webentwicklung-frage-antwort-db.com.de

wie erhalte ich die Kommentar-ID im Frontend, wenn auf die Schaltfläche ANTWORT geklickt wird?

Ich denke, ich könnte in der Lage sein, die URL für den Parameter replytocom zu analysieren und daraus die Kommentar-ID zu erhalten. Es würde jedoch bedeuten, dass mein Plugin nicht vollständig mit anderen Plugins kompatibel ist, die diesen Parameter entfernen können (insbesondere Yoast SEO ). Außerdem fühlt es sich ein bisschen abgedreht an. Gibt es eine andere Art und Weise?

Endziel: Ich benötige diese Kommentar-ID, um in einer AJAX -Anforderung Daten abzurufen (z. B. die Kommentarthreadtiefe), damit ich benutzerdefinierte Daten im Front-End anzeigen kann.

2
woodduck

Hier sind einige Ideen:

  • Es ist möglich, benutzerdefinierte HTML- oder Datenattribute über den Filter comment_reply_link einzufügen, aber ich denke, es wäre besser, ihn unauffällig zu halten.

  • Man könnte versuchen, den übergeordneten Kommentarwert aus dem Antwort-Kommentarformular zu erhalten:

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

    nachdem es mit dem entsprechenden Wert aktualisiert wurde.

  • Ein anderer Ansatz wäre, im HTML der Kommentarliste nach IDs zu suchen:

    Durch die Walker_Comment::html5_comment() generiert:

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

    Durch die Walker_Comment::comment() generiert:

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

    Man könnte z.B. Suche nach beiden Fällen, aber es ist dem Benutzer möglich, diese mit einer benutzerdefinierten Ausgabe zu überschreiben.

    Beachten Sie auch die depth Informationen hier.

  • Man könnte versuchen, das Attribut onclick des Links replyto zu analysieren:

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

Dies ist meine Implementierung des letzten Vorschlags von birgire (um den Klick zu analysieren):

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