web-dev-qa-db-fra.com

Comment peut-on supprimer la balise H3 pour le Reply-title I.D

Nous faisons quelques ajustements SEO sur un site, et notre gourou SEO nous informe que nous devons supprimer les balises <h3> de l'élément #reply-title, générées à partir de la ligne 1554 de comments-template.php. C'est le texte de l'en-tête pour le formulaire de commentaires.

comme on le voit ici:

<?php if ( comments_open( $post_id ) ) : ?>
        <?php do_action( 'comment_form_before' ); ?>
        <div id="respond">
            <h3 id="reply-title"><?php comment_form_title( $args['title_reply'], $args['title_reply_to'] ); ?> <small><?php cancel_comment_reply_link( $args['cancel_reply_link'] ); ?></small></h3>
            <?php if ( get_option( 'comment_registration' ) && !is_user_logged_in() ) : ?>

Nous sommes conscients des nombreux filtres et points d'ancrage associés à la comment_form();, mais ce <h3> est codé en dur.

pour cela, nous n’avons pas pu trouver de solution durable pour remplacer le <h3 id="reply-title"></h3> par un <div id="reply-title"></div>.

cela commence à ressembler à l'option la plus rapide/la plus simple qui peut être de décrocher l'appel à comment_form(); et accrocher une copie de notre propre fonction, qui serait juste une copie, avec un simple changement à cette ligne.

Mais dans l'intervalle, il n'est jamais mauvais de sonder la communauté. Des idées sur la façon de modifier ce balisage de manière durable (non piratable)?

Il convient de noter que cela ne peut pas être résolu avec certains CSS ou JS. Le DOM actuel, explorable, doit être traité.

merci encore pile.

3
AhSo

Aujourd'hui, il existe une option native pour le faire sans pirater le noyau, ni faire de filtres difficiles avec un tampon de sortie. Il vous suffit d'utiliser le filtre 'comment_form_defaults' et de modifier les valeurs des clés 'title_reply_before' et 'title_reply_after':

add_filter( 'comment_form_defaults', 'custom_reply_title' );
function custom_reply_title( $defaults ){
  $defaults['title_reply_before'] = '<span id="reply-title" class="h4 comment-reply-title">';
  $defaults['title_reply_after'] = '</span>';
  return $defaults;
}

Dans cet exemple, j'ai enveloppé le titre avec une balise span n'ayant aucun impact sur le référencement avec une classe nommée .h4, avec un style identique à celui de la balise h4 d'origine:

h4, .h4 {
/* styles */
}

De cette façon, vous pouvez garder le style d'un en-tête sans vous embrouiller avec votre référencement. (:

Si vous utilisez Bootstrap, cette classe existe déjà et a le même style que celui mentionné ci-dessus pour tous les en-têtes. De H1 à H6 et les classes respectives.

5
Felipe Rodrigues

Eu un problème similaire, de courtes entrées de blog trouvées par Google, etc. montraient le titre de la réponse au commentaire à la place du contenu de l'entrée de blog.

Cette solution tamponne le formulaire de commentaire html et remplace le <h3 id="reply-title"..> par une autre balise avant de l'imprimer:

function my_comment_form_before() {
    ob_start();
}
add_action( 'comment_form_before', 'my_comment_form_before' );

function my_comment_form_after() {
    $html = ob_get_clean();
    $html = preg_replace(
        '/<h3 id="reply-title"(.*)>(.*)<\/h3>/',
        '<p id="reply-title"\1>\2</p>',
        $html
    );
    echo $html;
}
add_action( 'comment_form_after', 'my_comment_form_after' );

Remarque: Dans les anciennes versions de WordPress, le code HTML était <h3 id="reply-title">; depuis 3.6, il s'agit du <h3 id="reply-title" class="comment-reply-title">, les deux cas sont traités dans le code ci-dessus.

3
Ov3rfly

Il n’existe aucun moyen de modifier cet élément <h3> particulier sans pirater le noyau (et vous savez déjà qu’il ne faut pas le faire), mais vous avez toujours la possibilité de créer votre propre formulaire de commentaires ou d’utiliser un plugin de commentaire contenant le marquage souhaité.

Si vous ne voulez absolument pas utiliser une autre méthode, vous pouvez capturer la sortie HTML du formulaire en une chaîne ridiculement longue, effectuer un preg_replace dessus pour changer le <h3> incriminé, puis faire écho de ce formulaire HTML modifié au DOM.

0
Morgan Estes

Vous ne savez pas exactement à quel texte vous faites référence, mais un de ceux-ci peut vous aider ou au moins vous donner une idée:

add_filter( 'comment_author_says_text', 'sp_comment_author_says_text' );
function sp_comment_author_says_text() {
    return 'author says';
}


add_filter( 'comment_form_defaults', 'sp_comment_form_defaults' );
function sp_comment_form_defaults( $defaults ) {

    $defaults['title_reply'] = __( 'Leave a Comment' );
    return $defaults;

}

La source

0
Brad Dalton