点击回复按钮,如何获取前端的评论ID?

时间:2016-07-28 作者:woodduck

我想我可以解析replytocom 参数并从中获取注释ID。然而,这意味着我的插件将无法与其他可以删除此参数的插件完全兼容(最显著的是Yoast SEO)。另外,感觉有点不舒服。还有别的办法吗?

Endgoal:我需要在AJAX请求中使用该注释ID—获取数据(例如注释线程深度),以便在前端显示自定义数据。

2 个回复
最合适的回答,由SO网友:birgire 整理而成

以下是一些想法:

可以通过comment_reply_link 过滤,但我认为最好保持低调。

可以尝试从回复注释表单中获取注释父值:

<input type=\'hidden\' name=\'comment_parent\' id=\'comment_parent\' value=\'0\' />
使用相应的值更新后。

另一种方法是在评论列表的HTML中扫描ID:

由生成Walker_Comment::html5_comment():

<li id="comment-34" class="comment even thread-even depth-1">
    <article id="div-comment-34" class="comment-body">
    ... cut...
由生成Walker_Comment::comment():

<li class="comment even thread-even depth-1 parent" id="comment-34">
    <div id="div-comment-34" class="comment-body">
    ... cut...
例如,可以搜索这两种情况,但用户可以使用自定义输出覆盖这些情况。

另请注意depth 此处提供信息。

可以尝试分析onclick “replyto”链接的属性:

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

SO网友:woodduck

这是我的实现birgire\'的最后一个建议(要分析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);
        }
    }
}); 
});