it-swarm.com.de

Kommentare entfernen Metabox erlaubt aber immer noch Kommentare

Ich weiß bereits, wie ich eine Metabox von meiner Bearbeitungsseite für benutzerdefinierte Beitragstypen entfernen kann. Ich möchte jedoch die Kommentarmetabox entfernen, aber dennoch das Kommentieren für den Beitrag zulassen. Da ich bemerke, wenn ich es entferne, werden Kommentare deaktiviert. Welche Funktion kann ich verwenden?

4
JonnyPlow

Entfernen Sie dies nicht über CSS. Der _POST-Teil ist ebenfalls aktiv und WP speichert die Daten! Verwenden Sie die Haken, um Meta-Boxen zu entfernen. Code von Grund auf neu.

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

weitere Informationen zu einem Plugin zum Entfernen aller UI-Elemente und Funktionen für Kommentare: https://github.com/bueltge/Remove-Comments-Absolutely

3
bueltge

Sie können die Benutzeroberfläche verwenden, um sie zu entfernen:

Klicken Sie oben rechts im Bearbeitungsbildschirm auf "Bildschirmoptionen"

enter image description here

und deaktivieren Sie das Kontrollkästchen Diskussion

enter image description here

oder wenn Sie es per Code tun möchten, verstecken Sie einfach den Container div by 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

Es gibt ein Problem in der Datei /wp-includes/post.php function wp_insert_post()

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

Ihre Kommentare werden nach dem Update geschlossen. Die Lösung ist change callback von 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

Fügen Sie dies in functions.php Ihres Themas hinzu

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

Dies ist, was ich verwendet habe, um einige der Meta-Felder, einschließlich des Kommentar-Statusfelds, auszublenden:

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;

Auf diese Weise werden die Meta-Boxen für alle Mitwirkenden, aber nicht für die Administratoren, ausgeblendet.

In der zweiten Funktion wird comment_status nur dann auf "open" gesetzt, wenn dieselben Bedingungen erfüllt sind, die dazu geführt haben, dass die Kommentare überhaupt deaktiviert wurden.

0
Paul T.