利用wp-admin.php实现ajax评论翻页

实现方法非常简单,除了复制代码外,只需要改三个标签和你自己的主题对应上就可以了,需要标注的地方我已经写上了。

首先改装一下你的评分翻页,在父容器上加一个html5的data-*方便获取文章id

<nav class="commentnav" data-post-id="<?php echo $post->ID?>">
            <?php paginate_comments_links('prev_text=«&next_text=»');?>
        </nav>

下面的代码扔到functions.php中,注意修改callback函数名

wp_enqueue_script( 'base', true);
wp_localize_script('base', 'bigfa_Ajax_Url', array("um_ajaxurl" => admin_url('admin-ajax.php')));
add_action('wp_ajax_nopriv_ajax_comment_page_nav', 'ajax_comment_page_nav');
add_action('wp_ajax_ajax_comment_page_nav', 'ajax_comment_page_nav');
function ajax_comment_page_nav(){
    global $post,$wp_query, $wp_rewrite;
    $postid = $_POST["um_post"];
    $pageid = $_POST["um_page"];
    $comments = get_comments('post_id='.$postid);
    $post = get_post($postid);
    if( 'desc' != get_option('comment_order') ){
        $comments = array_reverse($comments);
    }
    $wp_query->is_singular = true;
    $baseLink = '';
    if ($wp_rewrite->using_permalinks()) {
        $baseLink = '&base=' . user_trailingslashit(get_permalink($postid) . 'comment-page-%#%', 'commentpaged');
    }
    echo '<ol class="commentlist">';
    wp_list_comments('callback=mycomment&page=' . $pageid . '&per_page=' . get_option('comments_per_page'), $comments);//注意修改mycomment这个callback
    echo '</ol>';
    echo '<nav class="commentnav" data-post-id="'.$postid.'">';
    paginate_comments_links('current=' . $pageid . '&prev_text=«&next_text=»');
    echo '</nav>';
    die;
}

放到你的JS文件中,把两个标签名对上就OK了。

$(document).on("click", ".commentnav a",//评论翻页标签名
    function() {
        var baseUrl = $(this).attr("href"),
        commentsHolder = $(".commentshow"),//评论内容容器名,要包住评论内容和分页菜单
        id = $(this).parent().data("post-id"),
        page = 1,
        concelLink = $("#cancel-comment-reply-link");
        /comment-page-/i.test(baseUrl) ? page = baseUrl.split(/comment-page-/i)[1].split(/(/|#|&).*$/)[0] : /cpage=/i.test(baseUrl) && (page = baseUrl.split(/cpage=/)[1].split(/(/|#|&).*$/)[0]);
        concelLink.click();
        var ajax_data = {
            action: "ajax_comment_page_nav",
            um_post: id,
            um_page: page
        };
        commentsHolder.html('<div id="JSloading">loading..</div>')
        $.post(bigfa_Ajax_Url.um_ajaxurl, ajax_data,
        function(data) {
            commentsHolder.html(data);
            $("body, html").animate({
                scrollTop: commentsHolder.offset().top - 50
            },
            1e3)
        });
        return false;
    })
})

搞定。

展开评论