désactiver les commentaires par défaut pour les pages et les types de publication personnalisés?

20

Je souhaite désactiver les commentaires par défaut avec des pages et des post-types personnalisés

Au départ, j'ai simplement utilisé des conditions dans la fonction d'affichage des commentaires pour éviter d'afficher le bloc sur ces pages, mais j'ai besoin que l'utilisateur puisse réactiver les commentaires selon les besoins.

Doux Fuzz
la source
1
Juste un rappel amical, j'ai ajouté une réponse à cette question qui, je crois, a l'effet souhaité ..
t31os
1
Je suis sûr que votre fonction fonctionne bien, mais j'avais déjà sélectionné une réponse qui fonctionne pour mon objectif.
Mild Fuzz
Remarque: Billet Trac connexe n ° 12991
Chip Bennett

Réponses:

9

D'après ce que je comprends, vous souhaitez définir des pages et certains types de messages personnalisés pour que les commentaires soient désactivés par défaut, tandis que les messages utiliseront toujours l'option par défaut (c.-à-d. Commenter les commentaires sur). Si tel est le cas, la fonction suivante le fera.

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
la source
1
cela échoue lorsque vous souhaitez réactiver les commentaires. Il doit être modifié pour ne fonctionner qu'une seule fois
Mild Fuzz
1
pas sur une machine en ce moment, mais je suppose que vous pouvez utiliser le mécanisme de métadonnées pour vérifier la méta, s'il n'y a pas exécuté la fonction, sinon ajoutez la méta et exécutez la fonction.
Mild Fuzz
1
testé, cela ne fonctionnera pas aussi simplement que cela, car l'ID de publication n'est pas contenu dans la variable $ data de votre fonction.
Mild Fuzz
1
Je l'ai testé (avec WP 3.0) avant de soumettre ma réponse et cela a fonctionné. Quel problème rencontrez-vous? L'ID de publication n'est pas dans $ data car la publication n'a pas encore été créée avant l'exécution de la fonction (regardez le filtre dans la fonction wp_insert_post). La fonction ne s'exécutera que lorsque vous visiterez wp-admin / post-new.php? Post-type = xxx, avant de saisir du contenu dans les champs.
sorich87
1
sur mon serveur de test, je ne peux pas réactiver les commentaires, ils sont toujours désactivés.
Mild Fuzz
10

Lorsque vous créez une nouvelle publication (type personnalisé ou régulier), WordPress appelle get_default_post_to_editqui définit ensuite les valeurs par défaut d'une nouvelle publication.

Cette fonction fournit quelques crochets de filtre pour changer le titre, le contenu et l'extrait par défaut, mais malheureusement rien d'autre ... cependant chaque filtre transmet l' $postobjet complet au rappel, essentiellement cela signifie qu'il est possible de redéfinir plusieurs propriétés (ou une seule si nous aimons)

Cela devrait fonctionner pour vous, ajoutez simplement les types de publication auxquels le code doit s'appliquer en tant que cas à l'intérieur du commutateur .. (film et page sont des exemples) ..

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

Le code a été testé sur WP 3.0.1 et a l'effet souhaité de désactiver spécifiquement les commentaires pour les types de publication tout en laissant les autres hériter de l' état par défaut de l' default_comment_statusoption.

J'espère que cela pourra aider.... :)

t31os
la source
2

J'ai écrit un plugin pour désactiver les commentaires sur les pages par défaut. http://wordpress.org/extend/plugins/page-comments-off-please/

Peut-être que cela vous aidera?


la source
1
semble excessif étant donné la solution à 5 lignes dans la réponse de sorich87! Bravo cependant.
Mild Fuzz du
1
Pas vraiment, il existe de nombreuses approches pour s'attaquer aux exigences du code, c'est juste une méthode différente.
t31os
1

Selon ce fil , ce que vous demandez n'est pas possible sans l'utilisation d'un plugin ou d'une fonction personnalisée pour l'accomplir.

Travis Northcutt
la source
1
Je n'ai aucun problème à en écrire un, il suffit de pointer dans la bonne direction. Crochets et filtres, etc. qui peuvent aider.
Mild Fuzz
1
Si vous finissez par en écrire un, veuillez partager ce que vous avez fait ici! On dirait qu'un plugin qui peut le faire serait très utilisé.
Travis Northcutt,
1

Je recommanderais toujours d'utiliser vos conditions dans l'affichage des commentaires, mais utilisez des options pour stocker vos paramètres conditionnels. Ensuite, vous pouvez ajouter une page au menu Paramètres qui permet aux administrateurs d'activer ou de désactiver les commentaires selon vos besoins.


Mise à jour

Il me semble que vous souhaitez définir la valeur par défaut pour commenter sur "off" en tant que paramètre global plutôt que de la définir sur "off" chaque fois que vous créez une page. C'est possible.

Accédez à Paramètres >> Discussion dans la section d'administration de WordPress. Dans la première section ("Paramètres d'article par défaut", vous verrez une option intitulée "Autoriser les utilisateurs à publier des commentaires sur de nouveaux articles" ... décochez cette option.

Désormais, par défaut, les commentaires seront désactivés pour tous les nouveaux messages, pages et types de messages personnalisés. Vous pouvez toujours réactiver les commentaires "au cas par cas" en cochant la case appropriée dans la méta-boîte "Discussion" sur l'écran d'édition de la publication / page individuelle.

EAMann
la source
1
Il existe cependant déjà une option. Je veux simplement le désactiver par défaut.
Mild Fuzz
1
Il y a déjà une option où? Faites-vous référence à la boîte "Discussion" au bas de l'écran d'édition de la publication / de la page?
EAMann
1
Oui, je veux juste que cela ne soit pas contrôlé. La solution Sorich87 fonctionne presque. Pas encore sur une machine pour essayer quoi que ce soit.
Mild Fuzz
-2

Si vous ajoutez simplement ce code dans functions.php

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

Accédez au message et, dans les options de l'écran, cochez «Discussion» et «Commentaires», vous pouvez activer / désactiver les commentaires pour chaque type de message personnalisé.

kaizer1v
la source
2
ne répond pas vraiment à la question (bien qu'elle ait déjà répondu)
Mild Fuzz