web-dev-qa-db-ja.com

コメントメタボックスを削除しますが、それでもコメントを許可します

カスタム投稿タイプの編集ページからメタボックスを削除する方法は既に知っています。しかし、私はコメントメタボックスを削除したいのですが、それでもまだ投稿のコメントを許可します。削除すると気付くので、コメントを無効にします。使用できる機能はありますか?

4
JonnyPlow

CSSでこれを削除しないでください。 _POST部分もアクティブで、WPデータを保存します。フックを使用してメタボックスを削除します。最初からコードを書く。

function fb_remove_comments_meta_boxes() {
    remove_meta_box( 'commentstatusdiv', 'post', 'normal' );
    remove_meta_box( 'commentstatusdiv', 'page', 'normal' );
    // remove trackbacks
    remove_meta_box( 'trackbacksdiv', 'post', 'normal' );
    remove_meta_box( 'trackbacksdiv', 'page', 'normal' );
}
add_action( 'admin_init', 'remove_comments' );

コメントのためのすべてのUI要素と機能を削除するプラグインの詳細を参照してください。 https://github.com/bueltge/Remove-Comments-Absolutely

3
bueltge

あなたはそれを削除するためにUIを使用することができます:

編集画面の右上にある「画面オプション」をクリックしてください。

enter image description here

ディスカッションチェックボックスをオフにします。

enter image description here

あるいは、コードでそれをやりたいのであれば、単にstyle="display:none;"でコンテナーdivを隠してください。

function hide_comments_div() {
global $pagenow;
if ($pagenow=='post-new.php' OR $pagenow=='post.php')
        echo '<style>#commentstatusdiv{ display:none; }</style>';
}
add_action('admin_head', 'hide_comments_div');
2
Bainternet

/wp-includes/post.php関数wp_insert_post()ファイルに問題があります

if ( empty($comment_status) ) {
 if ( $update )
  $comment_status = 'closed';
 else
   $comment_status = get_option('default_comment_status');
}

あなたのコメントは更新後に閉じられます。解決策は、commentstatusdivのコールバックの変更コールバックです。

add_action(
 'add_meta_boxes', function () {
    global $wp_meta_boxes, $current_screen;
    $wp_meta_boxes[$current_screen->id]['normal']['core']['commentstatusdiv']['callback'] = function () {
        global $post;
        echo '<input type="hidden" value="' . $post->comment_status . '"      name="comment_status"/>';
        echo '<input type="hidden" value="' . $post->ping_status . '" name="ping_status"/>';
        echo '<style type="text/css">#commentstatusdiv {display: none;}</style>';
    };
  }
);
1
OzzyCzech

これをあなたのテーマのfunctions.phpに追加してください

function tune_admin_area() {
        echo '<style>#commentstatusdiv{ display:none; }</style>';
}
add_action('admin_head', 'tune_admin_area');
0
Alexey

これは私がコメントステータスボックスを含むいくつかのメタボックスを隠すために使用していたものです:

if (is_admin()) :
    function my_remove_meta_boxes() {
        if( !current_user_can('manage_options') ) {
            remove_meta_box('postcustom', 'post', 'normal');
            remove_meta_box('trackbacksdiv', 'post', 'normal');
            remove_meta_box('commentstatusdiv', 'post', 'normal');
            remove_meta_box('slugdiv', 'post', 'normal');
        }
    }
    add_action( 'admin_menu', 'my_remove_meta_boxes' );

    function handle_comments_setting( $data ) {
        if( !current_user_can('manage_options') ) {
            $data['comment_status'] = "open";
        }
        return $data;
    }
    add_filter( 'wp_insert_post_data', 'handle_comments_setting' );
endif;

これにより、メタボックスはすべての貢献者に対して非表示になりますが、管理者に対しては非表示になりません。

2番目の関数では、comment_status"open"に設定されていますが、そもそもコメントを無効にする原因となったのと同じ条件が満たされた場合に限られます。

0
Paul T.