我有一个按日期顺序显示的事件列表,其中隐藏了过去的事件。
问题是,总共有3页的事件,但一旦过去的事件被隐藏,就只有足够的事件来填满2页。但是,第三个空白页仍然存在,可以通过分页链接访问。
这是“我的事件列表”页面上的代码:
<?php $today = date("Ymd");?>
<?php $paged = 1;
if ( get_query_var(\'paged\') ) $paged = get_query_var(\'paged\');
if ( get_query_var(\'page\') ) $paged = get_query_var(\'page\');
query_posts( \'&post_type=upcomingevents&paged=\' . $paged );?>
<?php $loop = new WP_Query( array( \'post_type\' => \'upcomingevents\', \'paged\'=> $paged, \'meta_key\' => \'start_date\', \'meta_compare\' => \'>=\', \'meta_value\' => $today, \'orderby\' => \'meta_value_num\', \'order\' => \'ASC\' )); ?>
<?php while ( $loop->have_posts(\'post_type=upcomingevents\') ) : $loop->the_post(); ?>
这是我的函数文件中的分页代码:
function paginate() {
global $wp_query, $wp_rewrite;
$wp_query->query_vars[\'paged\'] > 1 ? $current = $wp_query->query_vars[\'paged\'] : $current = 1;
$pagination = array(
\'base\' => @add_query_arg(\'page\',\'%#%\'),
\'format\' => \'\',
\'total\' => $wp_query->max_num_pages,
\'current\' => $current,
\'show_all\' => true,
\'type\' => \'plain\'
);
if ( $wp_rewrite->using_permalinks() ) $pagination[\'base\'] = user_trailingslashit( trailingslashit( remove_query_arg( \'s\', get_pagenum_link( 1 ) ) ) . \'page/%#%/\', \'paged\' );
if ( !empty($wp_query->query_vars[\'s\']) ) $pagination[\'add_args\'] = array( \'s\' => get_query_var( \'s\' ) );
echo paginate_links( $pagination );
}
SO网友:s_ha_dum
你有两个问题在我看来是相互竞争的。
您正在使用query_posts
更改主查询,但不在其中包含任何筛选器您正在使用筛选器创建新查询--\'meta_key\' => \'start_date\'
, 等等--并循环查询结果集以显示您的帖子然后使用主查询分页--$wp_query
-- 没有任何过滤功能。事情不同步并不奇怪您需要重新考虑这一点,以便只使用一个查询,而不是将两个查询混在一起。我相信你可以使用$loop
对象,就像您正在使用$wp_query
在分页函数中。
function paginate($loop) {
global $wp_rewrite;
$loop->query_vars[\'paged\'] > 1 ? $current = $loop->query_vars[\'paged\'] : $current = 1;
$pagination = array(
\'base\' => @add_query_arg(\'page\',\'%#%\'),
\'format\' => \'\',
\'total\' => $loop->max_num_pages,
\'current\' => $current,
\'show_all\' => true,
\'type\' => \'plain\'
);
// ...
我不能保证这是一个完整的解决方案。如果不复制数据库和页面结构,您所获得的内容将非常复杂,很难进行测试。
您也可以使用pre_get_posts
筛选以更改主查询并为数据库节省一些麻烦。