通过AJAX加载帖子时应用过滤器

时间:2016-05-05 作者:Gadzhev

已经尝试解决这个问题好几个小时了。情况是这样的:我正在制作一个插件,使用<!--nextpage--> 标签它工作得很好,但我想通过ajax更改页面。

下面我将展示我是如何做到这一点的,但当内容返回时,没有应用\\u内容过滤器,许多功能也没有显示(我添加的分页,可能还有附加到帖子的主题和其他插件功能)。

以下是我的ajax函数:

jQuery(document).ready(function($) {
    $(document).on(\'click\', \'#upp-pagination a\', function(event) {
        event.preventDefault();

        var page = $(this).parent().attr(\'class\').replace(/\\D/g, \'\');
        var postID = $(\'#upp-pagination\').attr(\'class\').replace(/\\D/g, \'\');

        $.ajax({
            url: upppagination.ajaxurl,
            type: \'post\',
            data: {
                action: \'load_page\',
                page: page,
                postID: postID
            },
            success: function (result) {
                var newPage = result;

                $(\'div.entry-content\').html(newPage);
            }
        });
    });
});
这是后端返回页面的函数:

public function loadPage() {
    $postID = $_POST[\'postID\'];
    $page = $_POST[\'page\'];

    $post = get_post($postID);

    $content = $post->post_content;

    if ( false !== strpos( $content, \'<!--nextpage-->\' ) ) {
            $content = str_replace( "\\n<!--nextpage-->\\n", \'<!--nextpage-->\', $content );
            $content = str_replace( "\\n<!--nextpage-->", \'<!--nextpage-->\', $content );
            $content = str_replace( "<!--nextpage-->\\n", \'<!--nextpage-->\', $content );

            // Ignore nextpage at the beginning of the content.
            if ( 0 === strpos( $content, \'<!--nextpage-->\' ) )
                    $content = substr( $content, 15 );

            $pages = explode(\'<!--nextpage-->\', $content);
    } else {
            $pages = array( $post->post_content );
    }

    $page = $pages[$page - 1];

    $response = apply_filters(\'the_content\', $page);
    wp_send_json($response);
}
我是否在这里使用了正确的方法,以及如何应用过滤器?有什么想法吗?

1 个回复
SO网友:jake

您可能希望同时加载页面上的所有项,并使用jQuery一次显示多少项。例如:

默认情况下,您可以加载(到DOM)并隐藏所有这些内容,然后使用jQuery的切片一次加载4个

以下是我的视频示例,但您也可以在加载下4个视频之前隐藏前4个视频,以模拟您的目标:

<script>
$(function(){
    $(".video_single").hide(); //hide all div classes called container
    $(".video_single").slice(0, 4).fadeIn(); // show the first 4 container divs
    $("#load_more").click(function(e){ // click button to load more
        e.preventDefault();
        $(".video_single:hidden").slice(0, 4).fadeIn(800); // select next 4 hidden divs and show them

        if($(".video_single:hidden").length == 0){ // check if any hidden divs still exist
            $("#load_more").hide(); //if not more divs are hidden, hide button       
        }
    });
});
</script>