@redesupar

Почему дублируются посты при выводе ajax wp?

Создал страницу и накатил туда вывод определенных постов, добавил пагинацию + 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);
}
  • Вопрос задан
  • 78 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы