Создал страницу и накатил туда вывод определенных постов, добавил пагинацию + ajax. Вопрос, при клике на кнопку просто новости дублируются, подскажите что сделал не так?
А так же как сделать динамическую пагинацию? а то при показать еще, остается такой какой и был
Вывожу посты так
<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : ((get_query_var('page')) ? get_query_var('page') : 1);
$posts = new WP_Query(array(
"post_type" => "post", # post, page, custom_post_type
"post_status" => "publish", # статус записи
"posts_per_page" => 3, # кол-во постов вывода/загрузки
"category_name" => "news",
'orderby' => 'date',
)); ?>
<?php if ($posts->have_posts()) : ?>
<?php while ($posts->have_posts()) : $posts->the_post(); ?>
<a class="col-md-4" href="<?php the_permalink(); ?>">
<div class="news-card">
<div class="thumbnail img__post" >
<?php echo get_the_post_thumbnail(); ?>
</div>
<div class="meta">
<div class="date"><?php echo get_the_date('d F Y'); ?></div>
<div class="view">
<i class="fa fa-eye" aria-hidden="true"></i>
<?php echo getPostViews(get_the_ID()); ?>
</div>
</div>
<div class="block">
<h3 class="posts-title"><?php the_title(); ?></h3>
</div>
<!--здесь выводится миниатюра записи-->
<?php the_content(); ?>
</div></a>
<?php endwhile; ?>
<?php endif; ?>
<?php // AJAX загрузка постов
if ($posts->max_num_pages > 1) { ?>
<script>
var current_page = 1;
</script>
<button
type="button"
class="btn--load"
data-param-posts='<?= json_encode($posts->query_vars); ?>'
data-max-pages="<?= $posts->max_num_pages; ?>"
data-tpl="portfolio"
>
Загрузить ещё
</button>
<?php } ?>
<?php post_pagination($paged, $posts->max_num_pages);
?>
<?
wp_reset_postdata(); ?>
js
jQuery(function ($) {
$(".btn--load").on("click", function () {
const button = $(this);
button.html("Загрузка...");
const data = {
"action": "load_more",
"query": button.data("param-posts"),
"page": current_page,
"tpl": button.data("tpl")
}
$.ajax({
url: "/wp-admin/admin-ajax.php",
data: data,
type: "POST",
success: function (data) {
if (data) {
button.html("Загрузить ещё");
button.prev().prev().after(data);
current_page++;
if (current_page == button.attr("data-max-pages")) {
button.remove();
}
} else {
button.remove();
}
}
});
});
});
load-posts.php
<?php
add_action("wp_ajax_load_more", "load_posts");
add_action("wp_ajax_nopriv_load_more", "load_posts");
function load_posts()
{
$args = json_decode(stripslashes($_POST["query"]), true);
$args["paged"] = $_POST["page"] + 1;
$posts = new WP_Query(array(
"post_type" => "post",
"category_name" => "news",
));
$html = '';
if ($posts->have_posts()) : while ($posts->have_posts()) : $posts->the_post();
?>
<a class="col-md-4" href="<?php the_permalink(); ?>">
<div class="news-card">
<div class="thumbnail img__post" >
<?php echo get_the_post_thumbnail(); ?>
</div>
<div class="meta">
<div class="date"><?php echo get_the_date('d F Y'); ?></div>
<div class="view">
<i class="fa fa-eye" aria-hidden="true"></i>
<?php echo getPostViews(get_the_ID()); ?>
</div>
</div>
<div class="block">
<h3 class="posts-title"><?php the_title(); ?></h3>
</div>
<!--здесь выводится миниатюра записи-->
<?php the_content(); ?>
</div></a>
<?
endwhile;
endif;
wp_reset_postdata();
die($html);
}