web-dev-qa-db-ja.com

コメントがajaxからロードされている場合、コメントの「返信」リンクが機能しない

私はカスタムホームページを表示するプラグインを書いていますが、実際にはコメント付きで1つの投稿しかありません。最初のホームページはphpによる最初の呼び出しで表示されます。その後、ユーザーはメニューボタンをクリックして別の投稿を取得できます。これはajaxによって処理されます。そのため、ページ全体がリロードされません。

Ajaxで他の記事を取得して表示することは、私がajaxでページを「更新」するまではうまくいきます。そうするとコメントreplyリンクはもう機能しません。

[AJAXified commenting system] [1]を実装しましたが、返信リンクとは関係ないと思います。

Ajaxが使用される前の返信リンクは以下のようになります。

<a onclick="return addComment.moveForm(&quot;div-comment-11&quot;, &quot;11&quot;, &quot;respond&quot;, &quot;8&quot;)" 
href="/?replytocom=11#respond" class="comment-reply-link">Reply</a>

同じ投稿がajax経由でロードされると、返信ボタンは次のようになります。

<a onclick="return addComment.moveForm(&quot;div-comment-11&quot;, &quot;11&quot;, &quot;respond&quot;, &quot;8&quot;)" 
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部分を修正する必要がありますか。

2
Radek

私はcomment-reply.jsがロードされていないことに気づき、それは問題を解決しました。

誰かが説明できますか?何が起こったのかわかりません。

だから修正は私のプラグインコードにwp_enqueue_script( 'comment-reply' );を追加することでした。

2
Radek