私はカスタムホームページを表示するプラグインを書いていますが、実際にはコメント付きで1つの投稿しかありません。最初のホームページはphpによる最初の呼び出しで表示されます。その後、ユーザーはメニューボタンをクリックして別の投稿を取得できます。これはajaxによって処理されます。そのため、ページ全体がリロードされません。
Ajaxで他の記事を取得して表示することは、私がajaxでページを「更新」するまではうまくいきます。そうするとコメントreply
リンクはもう機能しません。
[AJAXified commenting system] [1]を実装しましたが、返信リンクとは関係ないと思います。
Ajaxが使用される前の返信リンクは以下のようになります。
<a onclick="return addComment.moveForm("div-comment-11", "11", "respond", "8")"
href="/?replytocom=11#respond" class="comment-reply-link">Reply</a>
同じ投稿がajax経由でロードされると、返信ボタンは次のようになります。
<a onclick="return addComment.moveForm("div-comment-11", "11", "respond", "8")"
href="/wp-admin/admin-ajax.php?replytocom=11#respond" class="comment-reply-link">Reply</a>
違いはhref
属性にあります。 2番目(ajax)のものはそこにあるべきではないwp-admin/admin-ajax.php
部分を持っていました。
私は1つのphp関数を使用して、最初の投稿が表示されている間とajax呼び出しの両方のためにhtmlを生成します。
関数の一部はこんな感じです
function my_get_comments($post_id, $number_of_comments){
//Gather comments for a specific post
$comments = get_comments(array(
'number' => $number_of_comments,
'post_id' => $post_id,
'status' => 'approve' //Change this to the type of comments to be displayed
));
ob_start(); //workaround how to capture the output from comments_number() function
comments_number( 'no comments', 'one comment', '% comments' );
$capture_comments_number = ob_get_clean();
$return_string ='<div id="comments_container">'
. '<style type="text/css">.hidden{display:none;}</style>'
. '<div id="comments_number">'
. $capture_comments_number
. '<a class="comment_switch"> Show / Hide Comments</a>'
. '</div>'
. '<div class="comments">'
. '<ol class="commentlist">';
//Display / format the list of comments
ob_start(); //workaround how to capture the output from wp_list_comments() function
wp_list_comments(array(
'reverse_top_level' => false //Show the latest comments at the top of the list
), $comments);
$capture_wp_list_comments = ob_get_clean();
return $return_string;
}
ob_start(); //workaround how to capture the output from comment_form() function
comment_form("", $post_id);
$capture_comment_form = ob_get_clean();
$return_string = $return_string
. $capture_comment_form
. '</div>'
. '</div>';
返信リンクのhref
部分を修正する必要がありますか。
私はcomment-reply.js
がロードされていないことに気づき、それは問題を解決しました。
誰かが説明できますか?何が起こったのかわかりません。
だから修正は私のプラグインコードにwp_enqueue_script( 'comment-reply' );
を追加することでした。