Kommentare als Standard für Seiten und benutzerdefinierte Beitragstypen deaktivieren?

20

Ich möchte die Kommentare standardmäßig mit Seiten und benutzerdefinierten Beitragstypen deaktivieren

Anfänglich habe ich in der Kommentardarstellungsfunktion einfach Bedingungen verwendet, um zu vermeiden, dass der Block auf diesen Seiten angezeigt wird, aber der Benutzer muss in der Lage sein, die Kommentare nach Bedarf wieder einzuschalten.

Milder Flaum
quelle
1
Nur eine freundliche Erinnerung, ich habe eine Antwort auf diese Frage hinzugefügt, von der ich glaube, dass sie den gewünschten Effekt hat.
t31os
1
Ich bin sicher, dass Ihre Funktion gut funktioniert, aber ich hatte bereits eine Antwort ausgewählt, die für meinen Zweck funktioniert.
Mild Fuzz
Hinweis: Zugehöriges Trac-Ticket Nr. 12991
Chip Bennett,

Antworten:

9

Soweit ich weiß, möchten Sie festlegen, dass für Seiten und einige benutzerdefinierte Beitragstypen die Kommentarfunktion standardmäßig deaktiviert ist, während für Beiträge weiterhin die Standardoption (dh das Kommentieren mit "Ein") verwendet wird. In diesem Fall erledigt die folgende Funktion dies.

function default_comments_off( $data ) {
    if( $data['post_type'] == 'page' && $data['post_status'] == 'auto-draft' ) {
        $data['comment_status'] = 0;
    }

    return $data;
}
add_filter( 'wp_insert_post_data', 'default_comments_off' );
sorich87
quelle
1
Dies schlägt fehl, wenn Sie die Kommentare wieder aktivieren möchten. Es muss bearbeitet werden, damit es nur einmal ausgeführt wird
Mild Fuzz
1
Momentan nicht auf einer Maschine, aber ich vermute, Sie können die Metadaten-Mechanik verwenden, um nach Meta zu suchen. Wenn die Funktion nicht ausgeführt wird, fügen Sie das Meta hinzu und führen Sie die Funktion aus.
Mild Fuzz
1
Getestet funktioniert dies nicht so einfach, da die Beitrags-ID in Ihrer Funktion nicht in der Variablen $ data enthalten ist.
Mild Fuzz
1
Ich habe es getestet (mit WP 3.0), bevor ich meine Antwort abschickte, und es hat funktioniert. Auf welches Problem stoßen Sie? Die Beitrags-ID befindet sich nicht in $ data, da der Beitrag noch nicht erstellt wurde, bevor die Funktion ausgeführt wird (siehe Filter in Funktion wp_insert_post). Die Funktion wird nur ausgeführt, wenn Sie wp-admin / post-new.php? Post-type = xxx besuchen, bevor Sie Inhalte in die Felder eingeben.
Sorich87
1
Auf meinem Testserver kann ich Kommentare nicht wieder aktivieren, sie werden permanent deaktiviert.
Mild Fuzz
10

Wenn Sie einen neuen Beitrag erstellen (benutzerdefinierter oder regulärer Typ), ruft WordPress auf get_default_post_to_edit und legt die Standardwerte für einen neuen Beitrag fest.

Diese Funktion bietet ein paar Filter-Hooks zum Ändern des Standardtitels, des Inhalts und des Ausschnitts, aber leider nichts anderes ... jedoch wird jeder Filter vollständig durchlaufen $post Objekt an den Rückruf. Dies bedeutet im Wesentlichen, dass es möglich ist, mehrere Eigenschaften neu zu definieren (oder nur eine, wenn wir mögen)

Dies sollte für Sie funktionieren. Fügen Sie einfach die Beitragstypen hinzu, auf die der Code als Fälle innerhalb des Schalters angewendet werden soll. (Film und Seite sind Beispiele).

function my_default_content( $post_content, $post ) {
    if( $post->post_type )
    switch( $post->post_type ) {
        case 'page':
        case 'movie':
            $post->comment_status = 'closed';
        break;
    }
    return $post_content;
}
add_filter( 'default_content', 'my_default_content', 10, 2 );

Code wurde in WP 3.0.1 getestet und hat den gewünschten Effekt, dass Kommentare für die Beitragstypen speziell deaktiviert werden, während andere den Standardstatus von übernehmendefault_comment_status Option übernehmen.

Hoffentlich hilft das.... :)

t31os
quelle
2

Ich habe ein Plugin geschrieben, um Kommentare auf Seiten standardmäßig zu deaktivieren. http://wordpress.org/extend/plugins/page-comments-off-please/

Vielleicht hilft das ja?


quelle
1
scheint übertrieben angesichts der 5-Zeilen-Lösung in der Antwort von sorich87! Prost aber.
Mild Fuzz
1
Nicht wirklich, es gibt viele Ansätze, um die Code-Anforderungen zu bewältigen, es ist nur eine andere Methode.
t31os
1

Laut diesem Thread ist das, was Sie anfordern, ohne die Verwendung eines benutzerdefinierten Plugins oder einer benutzerdefinierten Funktion nicht möglich.

Travis Northcutt
quelle
1
Ich habe kein Problem damit, eine zu schreiben, ich muss nur in die richtige Richtung weisen. Hooks & Filter etc, die helfen können.
Mild Fuzz
1
Wenn Sie am Ende eine schreiben, teilen Sie uns bitte mit, was Sie hier gemacht haben! Scheint, als würde ein Plugin, das das kann, viel Nutzen bringen.
Travis Northcutt
1

Ich würde empfehlen, weiterhin Ihre Bedingungen in der Kommentaranzeige zu verwenden, aber Optionen zum Speichern Ihrer bedingten Einstellungen zu verwenden. Anschließend können Sie dem Menü Einstellungen eine Seite hinzufügen, auf der Administratoren Kommentare nach Bedarf aktivieren oder deaktivieren können.


Aktualisieren

Mir fällt ein, dass Sie die Standardeinstellung für das Kommentieren als globale Einstellung auf "Aus" setzen möchten, anstatt sie bei jeder Erstellung einer Seite auf "Aus" zu setzen. Das ist möglich.

Gehen Sie zu Einstellungen >> Diskussion im WordPress-Admin-Bereich. Im ersten Abschnitt ("Standard-Artikeleinstellungen") sehen Sie die Option "Personen erlauben, Kommentare zu neuen Artikeln zu schreiben" ... deaktivieren Sie diese Option.

Standardmäßig sind Kommentare für alle neuen Beiträge, Seiten und benutzerdefinierten Beitragstypen deaktiviert. Sie können Kommentare weiterhin von Fall zu Fall wieder aktivieren, indem Sie das entsprechende Kontrollkästchen im Metakästchen "Diskussion" auf dem Bildschirm für die Bearbeitung einzelner Posts / Seiten aktivieren.

EAMann
quelle
1
Es gibt dort jedoch bereits eine Option. Ich möchte es einfach standardmäßig deaktivieren.
Mild Fuzz
1
Gibt es schon eine möglichkeit wo? Beziehen Sie sich auf das Feld "Diskussion" am unteren Rand des Bildschirms zum Bearbeiten von Beiträgen / Seiten?
EAMann
1
Ja, ich möchte nur, dass das deaktiviert ist. Sorich87 Lösung funktioniert fast. Noch nicht an einer Maschine, um etwas auszuprobieren.
Mild Fuzz
-2

Wenn Sie einfach diesen Code in functions.php hinzufügen

<?php
add_post_type_support( 'your_custom_post_type', array( 'comments' ) );
?>

Gehen Sie zum Beitrag, und aktivieren Sie in den Bildschirmoptionen "Diskussion" und "Kommentare". Sie können Kommentare für jeden benutzerdefinierten Beitragstyp aktivieren / deaktivieren.

kaizer1v
quelle
2
beantwortet die (wenn auch bereits beantwortete) Frage nicht wirklich
Mild Fuzz