replytocom
パラメータのURLを解析して、そこからコメントIDを取得できるかもしれません。しかし、それは私のプラグインがこのパラメータを削除することができる他のプラグインと完全に互換性がないことを意味するでしょう(最も顕著に Yoast SEO )。それに、ちょっとハッキーな感じがします。別の方法はありますか?
Endgoal:AJAXリクエストで使用するコメントIDが必要です。フロントエンドでカスタムデータを表示できるように、データ(コメントスレッドの深さなど)を取得します。
ここにいくつかのアイデアがあります:
comment_reply_link
フィルタを介してカスタムのHTMLまたはデータ属性を挿入することは可能ですが、控えめにしておくほうが良いと思います。
返信コメントフォームからコメントの親の値を取得しようとすることができます。
<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
情報にも注意してください。
replytoリンクのonclick
属性を解析しようとすることができます。
onclick='return addComment.moveForm( "div-comment-34", "34", "respond", "123" )'
これは私の 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);
}
}
});
});