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));
});
});
我正在寻找答案,却找不到答案。从我到目前为止找到的答案我认为我需要跟踪页码做一些事情,但我不知道该怎么做。
谢谢
答案 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' );