web-dev-qa-db-fra.com

Custom Post Type Set Commentaires ON par défaut sans show METABOX

J'ai créé un nouveau type de publication personnalisé pour une publication spécifique. Les publications de mon nouveau type de publication personnalisée ont, par défaut, paramétré les commentaires sur "off". J'ai besoin que les commentaires soient "activés" par défaut.

Dans mon fichier functions.php, j'ai ceci:

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

et

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' );

Mais cela ne marque pas la case à commenter par défaut. Des conseils?

Mes publications par défaut, ne pas afficher la metabox pour les commentaires, et les commentaires sont autorisés par défaut. Je veux faire exactement cela avec mon nouveau type de message personnalisé. Je veux dire: ne pas afficher la metabox et activer les commentaires par défaut.

Le registre:

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

Les types de publication personnalisés prennent en charge les commentaires par défaut. Je ne suis pas sûr de savoir comment vous avez enregistré votre type de message puisque vous n’avez pas inclus la source complète mais le codex contient de bons exemples sur la façon de le faire.

Si la métabox est affichée dans votre type de publication personnalisé et que vous essayez de la masquer, vous pouvez cliquer sur Options d'écran en haut à droite de votre navigateur et décocher commentaires discussion. Cela cache simplement la metabox de commentaires dans l'écran d'édition.

enter image description here

Assurez-vous d'inclure la partie modèle de commentaire dans votre single.php ou page.php.

====== Modifier 2 - Réponse correcte ======

Après une recherche plus approfondie, il semble que quelque chose annule le statut du commentaire. Mettre les fonctions ci-dessous fera ce que vous voulez

// 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

La réponse précédente ne fonctionne pas pour moi et je pense que cela ne peut pas fonctionner pour la plupart des gens. Même si cela fonctionne pour quelqu'un, il remplace la configuration de WordPress pour l'ensemble du site et n'est pas spécifique au type de publication personnalisé requis.

Pour moi, la manière correcte d'activer les commentaires dans un type d'article personnalisé et de supprimer la méta-boîte d'état des commentaires ressemble à ceci (en supposant que le type d'article est enregistré avec prise en charge des commentaires):

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;

}

Ou peut-être mieux, si nous voulons permettre aux éditeurs de fermer les commentaires:

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;

}

De plus, je pense que le Codex a tort car il dit que comment_status est défini sur le statut des commentaires par défaut. Cela signifie que, si le type de publication personnalisé prend en charge les commentaires et que la configuration par défaut de commentaires dans la configuration de WordPress est ouverte pour les nouvelles publications, toute nouvelle publication doit avoir des commentaires ouverts par défaut, mais cela ne se produit pas si vous supprimez la méta-boîte d'état du commentaire. C'est pourquoi il est nécessaire de remplacer comment_status lorsque la publication est insérée.

0
cybmeta