【问题标题】:Wordpress The Events Plugin wp_query not paginatingWordpress 事件插件 wp_query 没有分页
【发布时间】:2025-12-10 09:20:09
【问题描述】:

我遇到了 Modern Tribe 的“活动日历”插件无法正确分页的问题。它可以很好地显示第一页,但拒绝转到任何辅助页面(使用 wp-pagenavi)。理想情况下,我试图通过 AJAX 加载它,但此时分页将是一个奇迹。我在这里已经筋疲力尽了一天。基本上,这是查询:

<?php 
$wp_query = new WP_Query();
$wp_query->query( array(
'post_type'=> 'tribe_events',
'eventDisplay' => 'upcoming',
'posts_per_page' => 5)
);
$max = $wp_query->max_num_pages;
$paged = ( get_query_var('paged') > 1 ) ? get_query_var('paged') : 1;


if ($wp_query->have_posts()) :
while ($wp_query->have_posts()) :
    $wp_query->the_post();
    ?>
  <li><!-- do stuff    -->  </li>
  <?php
endwhile;?>
    </ul>
<?php
endif;
wp_reset_query(); // important to reset the query
?>

【问题讨论】:

    标签: ajax wordpress calendar pagination


    【解决方案1】:

    你的循环有很多问题:

    您说您正在使用 wp_page_navi,但是我在您的任何代码中都没有看到对该插件的任何引用。此外,您在循环中生成了列表项以及结束 ul 标记,但我在任何地方都看不到任何开始 ul 标记,这也可能导致您的一些问题。

    我还在您尝试将“eventDisplay”设置为“即将到来”的参数列表中注意到。 'eventDisplay' 不是有效的 WP_Query 参数。我猜你可能有一个注册的 eventDisplay 分类法?如果是这样,您将需要改用Tax Query。我已在示例中删除了此参数,但当您对设置所需的参数感到满意时,可以随意替换它。

    最后,查询参数应该在调用 WP_Query 时生成,而不是通过 $query->query。

    这是我使用标准 Wordpress 分页和代码中的参数提出的。我不熟悉 wp_page_navi,但这应该可以帮助您走上正确的道路:

    <?php
    global $paged;
    $curpage = $paged ? $paged : 1;
    $query = new WP_Query(array(
        'post_type'=> 'tribe_events',
        'paged' => $paged,
        'posts_per_page' => 5
    ));
    
    if ($query->have_posts()) :
    ?>
    <ul>
    <?php while ($query->have_posts()) : $query->the_post(); ?>
        <li><?php the_title(); ?></li>
    <?php endwhile; ?>
    </ul>
    <?php
    echo '<div id="wp_pagination">';
        echo '<a class="first page button" href="'.get_pagenum_link(1).'">&laquo;</a>';
        echo '<a class="previous page button" href="'.get_pagenum_link(($curpage-1 > 0 ? $curpage-1 : 1)).'">&lsaquo;</a>';
        for($i=1;$i<=$query->max_num_pages;$i++)
        {
            echo '<a class="'.($active = $i == $curpage ? 'active ' : '').'page button" href="'.get_pagenum_link($i).'">'.$i.'</a>';
        }
        echo '<a class="next page button" href="'.get_pagenum_link(($curpage+1 <= $query->max_num_pages ? $curpage+1 : $query->max_num_pages)).'">&rsaquo;</a>';
        echo '<a class="last page button" href="'.get_pagenum_link($query->max_num_pages).'">&raquo;</a>';
    echo '</div>';
    endif;
    wp_reset_query();
    ?>
    

    这会将您的循环设置为在列表中显示 5 个帖子标题。下面将是一系列编号链接,具体取决于您拥有的帖子数量。当您单击一个数字时,它会重新加载带有相应标题的页面。

    如果这有帮助,请告诉我。

    【讨论】: