AJAX加载更多按钮每次返回相同的帖子

时间:2015-11-19 12:25:33

标签: php jquery ajax wordpress lazy-loading

AJAX加载更多每次返回相同的帖子。问题出在WP_Query中,因为当我删除它时,此代码可以正常工作。我无法弄清楚我的WP_Query有什么问题。

这是index.php的一部分

$category_id = get_cat_ID('Događaji');
        $exlude_latest_featured_post = array($featuredID);
        $args = array(
            'category__not_in' => array($category_id),
            'post__not_in' => $exlude_latest_featured_post,
            'posts_per_page' => 10,
        );

        $main_loop = new WP_Query ( $args );
        while ($main_loop->have_posts()) : $main_loop->the_post(); ?>

        <?php get_template_part('loop/content'); ?>

        <?php endwhile; ?>

        <div class="listing-more-posts">
            <a>
               <?php
                   $link_label = '<img class="listing-more-posts-image" src="'. get_bloginfo('template_directory') .'/images/more-posts-2.gif" alt="Učitaj još postova">';
                   next_posts_link($link_label);
               ?>
            </a>
        </div>

这是我的loadmore.js文件。正如我所说,当我在index.php

中删除WP_Query时,它工作正常
jQuery(function($){

// Ajax (next) page load
    var pageLoading = false;
    function loadContent($link){

        if( pageLoading == true ){
            return;
        }

        pageLoading = true;

        $.ajax({
            type: "get",
            url: $link.attr("href"),
            dataType: "html",
            success: function(response){
                var html = $('<div>').html(response);

                // 'standard' blog layout
                var $articles = $(html).find("#post-listing article");

                //$("#main").append(articles);
                $link.closest(".listing-more-posts").before($articles);

                // remove old nav wrapper (new one is added with new content)
                // if( $link != null ){
                $link.closest(".listing-more-posts").html($(html).find(".listing-more-posts").html());
                // }

                pageLoading = false;
            }
        });
    }

      $("body").on("click", ".listing-more-posts a", function(e){
        e.preventDefault();
        console.log("click");

        // var $link = $(this);
        $(this).parent().addClass('loading');
        loadContent($(this));
    });  
});

我正在寻找答案,却找不到答案。从我到目前为止找到的答案我认为我需要跟踪页码做一些事情,但我不知道该怎么做。

谢谢

1 个答案:

答案 0 :(得分:0)

我明白了。

我通过从上面做事来打破主循环。我指望搜索,经过一段时间后,我发现了一个名为per_get_posts的真正有用的动作钩子,这是我的问题的解决方案

  

在创建查询变量对象之后调用此挂钩,但是   在运行实际查询之前。
- Wordpress Codex

我现在要做的就是这两件事:

function exclude_category( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $category_id = get_cat_ID('Događaji');
            $query->set( 'category__not_in', array($category_id) );
        }
    }
add_action( 'pre_get_posts', 'exclude_category' );
//Exclude latest featured post from showing in loop
function exclude_latest_post( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $exlude_latest_featured_post = array($featuredID);
            $query->set( 'post__not_in', $exlude_latest_featured_post );
        }
    }
add_action( 'pre_get_posts', 'exclude_latest_post' );