web-dev-qa-db-fra.com

comment obtenir l'ID de commentaire au début lorsque le bouton REPLY est cliqué?

Je pense que je pourrais peut-être analyser l'URL du paramètre replytocom et en obtenir l'ID de commentaire. Cependant, cela signifierait que mon plug-in ne serait pas entièrement compatible avec d'autres plug-ins capables de supprimer ce paramètre (notamment Yoast SEO ). En plus, ça fait un peu hacky. Y a-t-il un autre moyen?

Endgoal: J'ai besoin de cet ID de commentaire à utiliser dans une demande AJAX - pour extraire des données (telles que la profondeur du fil de commentaire) afin de pouvoir afficher des données personnalisées dans l'interface frontale.

2
woodduck

Voici quelques idées:

  • Il est possible d'injecter du HTML personnalisé ou des attributs de données via le filtre comment_reply_link , mais je pense qu'il serait préférable de le garder discret.

  • On pourrait essayer d’obtenir la valeur du commentaire parent à partir du formulaire de commentaire de réponse:

    <input type='hidden' name='comment_parent' id='comment_parent' value='0' />
    

    après avoir été mis à jour avec la valeur correspondante.

  • Une autre approche consisterait à rechercher les identifiants dans le code HTML de la liste de commentaires:

    Généré par la Walker_Comment::html5_comment():

    <li id="comment-34" class="comment even thread-even depth-1">
        <article id="div-comment-34" class="comment-body">
        ... cut...
    

    Généré par la Walker_Comment::comment():

    <li class="comment even thread-even depth-1 parent" id="comment-34">
        <div id="div-comment-34" class="comment-body">
        ... cut...
    

    On pourrait par exemple recherchez les deux cas, mais il est possible pour l'utilisateur de les remplacer par une sortie personnalisée.

    Notez également les informations depth ici.

  • On pourrait essayer d'analyser l'attribut onclick du replyto link:

    onclick='return addComment.moveForm( "div-comment-34", "34", "respond", "123" )'
    
0
birgire

Voici mon implémentation de la dernière suggestion de birgire (pour analyser le onclick):

jQuery(document).on( 'click', 'a.comment-reply-link', function( event ) {

// THIS PART GETS THE COMMENT ID
var hayStack = jQuery(this).attr('onclick');
var strawA = '"div-comment-';
var strawB = '"';
var tipNeedle = hayStack.lastIndexOf(strawA)+strawA.length;
var hayTruss = hayStack.substring(tipNeedle);
var endNeedle = hayTruss.indexOf(strawB); 
var needle = hayTruss.substring(0, endNeedle);
alert(needle);

// optional: THIS PART LOOKS UP THE PARENT ID (php side not shown)
var datatopost = {
        action: 'my_ajax_hook',
        nonce: ajaxobject.nonce,
        selected_comment_id: needle,
    };
jQuery.ajax({
    type: 'post',
    dataType: 'json',
    url: ajaxobject.ajaxurl,
    data: datatopost,
    error: function() { // Ajax request has failed
        jQuery('#comment').val('An error has occurred');
    },
    success: function (response) { // Ajax request has succeeded
        if (response.success) {
            // JSON successfully received
            alert(response.data.selected_comment_parent);
        }
    }
}); 
});
1
woodduck