it-swarm.com.de

Gibt es eine Möglichkeit, "Kommentare in Seiten aufteilen" und "Kommentare für alte Beiträge schließen" für bestimmte Beiträge außer Kraft zu setzen, für andere jedoch nicht?

In Einstellungen> Diskussion gibt es die Option "Kommentare in Seiten aufteilen", mit der den Kommentaren eine Paginierung hinzugefügt und diese in separate Seiten aufgeteilt werden.

Ich möchte dies auf meiner gesamten Website deaktivieren ... ABER in einem bestimmten Beitrag möchte ich, dass dies aktiviert wird, damit dieser Beitrag (und nur dieser Beitrag) paginierte Kommentare enthält.

Kann das gemacht werden?

Teilbezogenes Follow-up: Könnte das auch mit der Option "Kommentare zu Posts, die älter als sind, automatisch schließen" geschehen? In diesem Fall, damit Kommentare zu allen Beiträgen nach X Tagen außer Beitrag 149, 150 und 151 geschlossen werden?

Vielen Dank im Voraus für jede Hilfe.

2
ioutshine

Der option_{$option_name}-Filter kann verwendet werden, um den Wert einer Option im laufenden Betrieb zu ändern. Ersetzen Sie {$option_name} durch den Namen der zu ändernden Option.

Option zum Überschreiben der Kommentar-Paginierung

Der Name der Option zum Paginieren von Kommentaren lautet page_comments, daher erstellen wir einen Filter mit dem Namen option_page_comments. Im folgenden Beispiel überprüfen wir, ob wir uns einen der Posts in unserem ID-Array ansehen, um die Paginierung zu erzwingen. In diesem Fall erzwingen wir die Paginierung von Kommentaren. Andernfalls wird der Wert aus dem Bildschirm Dashboard> Einstellungen> Diskussion verwendet.

// Forces comment pagination for certain posts regardless
// of settings within the Settings > Discussion page.
add_filter( 'option_page_comments', 'wpse_modify_page_comments' );
function wpse_modify_page_comments( $page_comments ) {
    if ( is_admin() ) {
        return $page_comments;
    }

    // Array of post IDs where comment pagination is forced on.
    $force_comment_pagination = [ 
        149,
        150,
        151,
    ];

    if ( in_array( get_the_ID(), $force_comment_pagination ) ) {
        $page_comments = true;
    }

    return $page_comments;
}

Schließen Sie die Option "Kommentare für alte Beiträge überschreiben"

So beantworten Sie Ihre Folgefrage: - Ja, wir können die Aktivierung von Kommentaren für bestimmte ältere Posts erzwingen, auch wenn die Einstellungen im Diskussionsbildschirm so konfiguriert sind, dass Kommentare zu alten Posts geschlossen werden.

// Forces comments for old posts to be *allowed* regardless
// of settings within the Settings > Discussion page.
add_filter( 'option_close_comments_for_old_posts', 'wpse_modify_close_comments_for_old_posts' );
function wpse_modify_close_comments_for_old_posts( $close_comments_for_old_posts ) {
    // Don't do anything for the admin area. Return the originally set value of the option.
    if ( is_admin() ) {
        return $close_comments_for_old_posts;
    }

    // This array contains the posts IDs where we want to 
    // override the settings for closing comments for old posts.
    // (Comments will be forced open for these posts.)
    $close_comments_for_old_posts_overrides = [ 
        149,
        150,
        151,
    ];

    // Handle case when a comment is being made.
    if ( isset( $_POST['comment'] ) && isset( $_POST['comment_post_ID'] ) ) {
        if ( in_array( $_POST['comment_post_ID'], $close_comments_for_old_posts_overrides ) ) {
            // Comments should be open for this post.
            return false;
        }               
    }

    // Handle case when post is displayed.
    global $wp_query;
    if ( ! is_array( $wp_query->posts ) ) {
        // There are no posts to display. Don't change the option.
        return $close_comments_for_old_posts;
    }
    foreach ( $wp_query->posts as $post ) {
        if ( in_array( $post->ID, $close_comments_for_old_posts_overrides ) ) {
            // Comments should be open for this post.
            return false;
        }
    }

    // If we get here, return the original value of the option without altering it.
    return $close_comments_for_old_posts;
}
4
Dave Romsey