web-dev-qa-db-ja.com

カスタム投稿の種類コメントを表示なしでデフォルトでオンに設定METABOX

特定の投稿用に新しいカスタム投稿タイプを作成しました。私の新しいカスタム投稿タイプの投稿では、デフォルトでコメントを "off"に設定しています。コメントはデフォルトで "on"である必要があります。

私のfunctions.phpファイルに、これがあります。

'supports' => array('editor','comments')

そして

function default_comments_on( $data ) {
    if( $data['post_type'] == 'registro' && $data['post_status'] == 'auto-draft' ) {
        $data['comment_status'] = 1;
    } 

    return $data;
}
add_filter( 'wp_insert_post_data', 'default_comments_on' );

しかし、それはデフォルトでコメントするボックスをマークしませんでした。任意のヒント?

私のデフォルトの投稿、コメントのメタボックスを表示しない、そしてコメントはデフォルトで許可されている。私は私の新しいカスタム投稿タイプでまさしくこれをしたいです。つまり、メタボックスを表示せず、デフォルトでコメントをオンにします。

登録簿:

function create_post_type_registro() {

/**
 * Labels customizados para o tipo de post
 * 
 */
$labels = array(
    'name' => _x('Registros', 'post type general name'),
    'singular_name' => _x('Registro', 'post type singular name'),
    'add_new' => _x('Adicionar novo', 'film'),
    'add_new_item' => __('Adicionar novo registro'),
    'edit_item' => __('Editar registro'),
    'new_item' => __('Novo registro'),
    'all_items' => __('Todos os registros'),
    'view_item' => __('Ver registro'),
    'search_items' => __('Procurar registros'),
    'not_found' =>  __('Nenhum registro encontrado'),
    'not_found_in_trash' => __('Nenhum registro encontrado na lixeira'),
    'parent_item_colon' => '',
    'menu_name' => 'Registros'
);

/**
 * Registamos o tipo de post registro através desta função
 * passando-lhe os labels e parâmetros de controle.
 */
register_post_type( 'registro', array(
    'labels' => $labels,
    'public' => true,
    'publicly_queryable' => true,
    'exclude_from_search' => false,   
    'show_ui' => true,
    'show_in_menu' => true,
    'has_archive' => 'registros',
    'rewrite' => array(
     'slug' => 'registros',
     'with_front' => false,
    ),
    'capability_type' => 'post',
    'has_archive' => true,
    'hierarchical' => false,
    'menu_position' => null,
    'supports' => array('editor','comments')
    )
);
1
Leibovich

カスタム投稿タイプはデフォルトでコメントをサポートします。完全なソースを含めなかったので、あなたがどのようにあなたの投稿タイプを登録したのかわかりませんが、 コーデックスはその方法について良い例 を持っています。

メタボックスがあなたのカスタム投稿タイプに表示されていてそれを隠そうとしているのなら、あなたはあなたのブラウザの右上にあるスクリーンオプションをクリックしてチェックを外すことができます コメント 討論。これは編集画面でコメントメタボックスを隠すだけです。

enter image description here

Single.phpまたはpage.phpにコメントテンプレート部分を含めるようにしてください。

======編集2 - 正解======

これをさらに調べた後、何かがコメントのステータスを無効にしているように見えます。以下の機能を追加するとあなたが望むことができます

// Sets the comments to allowed by default
function turn_on_comments() { 
   update_option('default_comment_status', 'open');
} 
add_action('update_option', 'turn_on_comments');

// Hides the metabox in the edit screen (replace post-type-here with your custom post type)
function remove_meta_boxes() {
    remove_meta_box('commentstatusdiv', 'post-type-here', 'normal');
}
add_action('admin_menu', 'remove_meta_boxes');
1
kel

前の答えは私のために働いていません、そして、私はそれがほとんどの人々のために働かないことができると思います。たとえそれが誰かのために働いても、それはサイト全体のWordPress設定を上書きします、そしてそれは要求されたカスタム投稿タイプに特定ではありません。

私にとっては、カスタム投稿タイプのコメントを有効にしてコメントステータスメタボックスを削除する正しい方法は次のようなものです(投稿タイプがコメントのサポート付きで登録されていると仮定)。

add_action('admin_menu', 'cyb_remove_meta_boxes');
function cyb_remove_meta_boxes() {

    remove_meta_box('commentstatusdiv', 'post-type-here', 'normal');

}

add_filter( 'wp_insert_post_data', 'cyb_comments_on' );
function cyb_comments_on( $data ) {

    if( $data['post_type'] == 'post-type-here' ) {

        $data['comment_status'] = "open";

    }

    return $data;

}

あるいは、編集者がコメントをクローズできるようにしたい場合は、もっといいかもしれません。

add_action('admin_menu', 'cyb_remove_meta_boxes');
function cyb_remove_meta_boxes() {

    if( ! current_user_can( 'edit_others_posts' ) ) {

        remove_meta_box('commentstatusdiv', 'post-type-here', 'normal');
        add_filter( 'wp_insert_post_data', 'cyb_comments_on' );

    }


}

function cyb_comments_on( $data ) {

    if( $data['post_type'] == 'post-type-here' ) {

        $data['comment_status'] = "open";

    }

    return $data;

}

また、comment_statusがデフォルトのコメントステータスに設定されていると言うので、Codexは間違っていると思います。つまり、カスタム投稿タイプがコメントをサポートしていて、WordPress設定のデフォルトのコメント投稿が新しい投稿に対して開かれている場合、新しい投稿にはデフォルトでコメントが開かれるはずですが、コメントステータスメタボックスを削除しても起こりません。そのため、投稿が挿入されたときにcomment_statusをオーバーライドする必要があります。

0
cybmeta