Разбивка на страницы повторяет сообщения несколько раз на первой странице

#php #wordpress #loops #pagination

#php #wordpress #циклы #разбивка на страницы

Вопрос:

У меня проблема с разбиением на страницы на моем сайте. Я создал список событий, и для прошлых событий я добавил тот же код разбивки на страницы, который находится в category.php досье. К сожалению, это выводит список прошлых событий несколько раз на каждой странице (например, одни и те же события, перечисленные 6 раз на странице 1, затем остальные события, перечисленные на второй странице 6 раз). Что не так с моим кодом?

Здесь вы можете увидеть проблему: http://www.mybeatfix-new.com

 <?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; query_posts('paged='.$paged.'amp;cat='.$cat); ?>        


<?php if(have_posts()) : ?>                     
<?php while(have_posts()) : the_post(); ?>

<?php 
$eventquery = array (
    'post_type' => 'events',
    'orderby' => '_cmb_event-date',
    'order' => 'desc',
    'posts_per_page' => 5,
    'meta_value' => time(),
    'meta_key' => '_cmb_event-date',
    'meta_compare' => '<',
    'paged' => $paged,
    );
?>

<?php $myeventlist = new WP_Query($eventquery); ?>
<?php while ($myeventlist->have_posts()) : $myeventlist->the_post(); 
        $data_event     = get_post_meta($post->ID, '_cmb_event-date', true);
        $pretty_date = date('D M j Y', $data_event);
        $m_day = get_post_meta( $post->ID, '_cmb_e_day', true );
        $m_start_time = get_post_meta( $post->ID, '_cmb_e_start_time', true );
        $m_end_time = get_post_meta( $post->ID, '_cmb_e_end_time', true );
        $m_venue = get_post_meta( $post->ID, '_cmb_e_venue', true );
        $event_text     = get_post_meta($post->ID, "_cmb_e_details", true);
        $event_price = get_post_meta( $post->ID, '_cmb_e_price', true );
        $event_ticket_status = get_post_meta( $post->ID, '_cmb_e_ticket_status', true );
        $thumbnail = get_the_post_thumbnail($id, 'event-image');

?>
<div class="elist-single">

<div class="elist-thumb">
<a href="<?php the_permalink() ?>"><?php echo $thumbnail; ?></a></div>

<div class="elist-right">
<div class="elist-title">
<a href="<?php the_permalink() ?>"><?php echo ShortenText(get_the_title()); ?></a>
</div>


<div class="elist-date"><?php echo $pretty_date; ?> </div><br  />
<div class="elist-info">
<i class="icon-home"> <?php echo $m_venue; ?> </i><br  />
<i class="icon-time"> <?php echo $m_start_time; ?> - <?php echo $m_end_time; ?></i><br  />
<?php echo $event_price ?><br  />
</div><br  />


</div>
</div>


<?php endwhile;?>
<?php endwhile; endif;?>


<?php wp_link_pages(); ?>
<?php get_template_part ('inc/pagination');?>
  

Ответ №1:

По сути, вы создали цикл внутри цикла. Вы говорите, что пока у вас есть сообщения, перебирайте все сообщения, поэтому он делает это 6 раз, предположительно, потому, что у вас 6 сообщений.

Если вы используете два цикла, вам нужно <?php endwhile;?> после первого цикла и wp_reset_postdata(); после WP_Query() , но вы должны быть в состоянии сделать это за один. WP_Query должно предоставить вам всю необходимую информацию само по себе в комплекте с разбиением на страницы.

Для справки: запрос WP

Комментарии:

1. Спасибо за ответ @mantis! Извините за то, что я такой новичок. lol В любом случае, я добавил постраничный запрос в wp_query… Фактическая разбивка на страницы работает, и я могу сказать, потому что, если я перейду к mybeatfix-new.com/past-events/page/2 остальные события есть, но кнопки не появляются.

2. <?php $myeventlist = new WP_Query($eventquery); ?> <?php while ($myeventlist->have_posts()) : $myeventlist->the_post(); $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

3. Лучше обновить код, отредактировав исходный вопрос, а не помещая его в комментарии. Вам не нужен отдельный запрос разбивки на страницы. Просто добавьте 'posts_per_page=3' , например, в качестве аргумента WP_Query , что на странице кодекса есть примеры этого.