web-dev-qa-db-fra.com

Supprimer les commentaires Metabox mais toujours autoriser les commentaires

Je sais déjà comment supprimer une metabox de ma page d'édition de type d'article personnalisée. Cependant, je souhaite supprimer les commentaires metabox tout en autorisant les commentaires pour le post. Parce que je remarque que lorsque je le supprime, cela désactive les commentaires. Toute fonction que je peux utiliser?

4
JonnyPlow

Ne supprimez pas cela via CSS. La partie _POST est également active et WP enregistre les données! Utilisez les crochets pour supprimer les méta-boîtes; code par scratch.

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

voir plus sur un plugin pour supprimer tous les éléments de l'interface utilisateur et la fonction pour les commentaires: https://github.com/bueltge/Remove-Comments-Absolutely

3
bueltge

Vous pouvez utiliser l'interface utilisateur pour le supprimer:

Cliquez sur "Options d'écran" en haut à droite de l'écran d'édition.

enter image description here

et décochez la case Discussion

enter image description here

ou si vous voulez le faire par code, masquez simplement le conteneur div par style="display:none;"

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

Il y a un problème dans le fichier /wp-includes/post.php fonction wp_insert_post()

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

Vos commentaires seront fermés après la mise à jour. La solution est de modifier le rappel de commentstatusdiv insted:

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

Ajoutez ceci dans functions.php de votre thème

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

C'est ce que j'avais l'habitude de cacher certaines des boîtes de méta, y compris la boîte de statut de commentaire:

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;

De cette façon, les méta-boîtes seront masquées pour tous les contributeurs, mais pas pour les administrateurs.

Dans la deuxième fonction, comment_status est défini sur "open" uniquement lorsque les mêmes conditions que celles qui ont entraîné la désactivation des commentaires sont remplies.

0
Paul T.