AJAX load more возвращает одни и те же сообщения каждый раз. Проблема в 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. Как я уже сказал, он прекрасно работает, когда я удаляю WP_Query в index.php
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));
});
});
Я искал ответ, но не смог его найти. Из ответов, которые я нашел до сих пор, я думаю, что мне нужно что-то сделать с номером отслеживания страницы, но я не уверен, как это сделать.
Спасибо
Я понял.
Я нарушал основной цикл, делая вещи сверху. Я продолжил поиск и через некоторое время обнаружил один действительно полезный хук действия 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' );
Других решений пока нет …