3 votes

Accrochage à comment_text() pour ajouter une balise d'entourage

J'essaie de m'accrocher à la fonction commentaire_texte() fourni par l'API de Wordpress, afin d'intégrer la sortie de chaque commentaire dans un fichier de type <div>...</div> Je me heurte au problème suivant :

Sans mon filtre ajouté, la sortie de commentaire_texte() ressemble à ça :

<p>Hello User!</p>
<p>Thank you for your comment.</p>
<p>Stefan</p>

C'est bien, mais comme je l'ai dit, j'aimerais qu'il soit intégré dans un <div class="comment-text">...</div> . Pour autant que je sache, la manière correcte de procéder consisterait à ajouter un filtre à la fonction functions.php de mon thème et c'est ce que j'ai fait :

function stefan_wrap_comment_text($content) {
    return "<div class=\"comment-text\">". $content ."</div>";
}
add_filter('comment_text', 'stefan_wrap_comment_text');

Comme je peux le voir dans le résultat, le filtre donné fonctionne mais il a un effet secondaire négatif sur le premier paragraphe du contenu comme vous pouvez le voir dans l'exemple suivant. Le premier paragraphe devrait être <p>Hello User!</p> mais ressemble à ça : Hello User! .

<div class="comment-text">
    Hello User!
    <p>Thank you for your comment.</p>
    <p>Stefan</p>
</div>

Des idées ou des conseils sur ce que je fais mal ?

7voto

Ivo Sabev Points 3333

Essayez d'abaisser la priorité de votre fonction, peut-être y a-t-il une autre fonction de formatage que vous précédez.

add_filter('comment_text', 'stefan_wrap_comment_text', 1000);

7voto

stefanglase Points 5482

Aïe, je viens de tomber sur le dossier. wp-includes/default-filters.php et découvert qu'il y a plusieurs filtres appliqués à la même fonction par défaut :

add_filter( 'comment_text', 'wptexturize'            );
add_filter( 'comment_text', 'convert_chars'          );
add_filter( 'comment_text', 'make_clickable',      9 );
add_filter( 'comment_text', 'force_balance_tags', 25 ); 
add_filter( 'comment_text', 'convert_smilies',    20 );
add_filter( 'comment_text', 'wpautop',            30 );

Le dernier filtre avec la priorité 30 appelle la fonction wpautop() qui est utilisé pour remplacer les doubles sauts de ligne par <p>...</p> . Par défaut add_filter() enregistre de nouveaux filtres sur la priorité 10. En changeant mon filtre pour qu'il soit le dernier en choisissant un numéro plus élevé, tout fonctionne bien.

// This doesn't work because default priority is 10:
// add_filter('comment_text', 'stefan_wrap_comment_text');
// Add a lower priority (higher number) to apply this filter at last: 
add_filter('comment_text', 'stefan_wrap_comment_text', 99);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X