似乎要创建custom page template 要显示custom post type? 如果是这样的话,你真的不需要pre_get_posts
完全
First, 创建自定义页面模板。我想你已经这么做了。
Second, 您需要使用WP_Query()
:
global $post;
$types = $post->post_name;
$trips_query_args = array(
\'post_type\' => \'trips\',
\'types\' => $types,
);
$trips_query = new WP_Query( $trips_query_args );
(注意:什么是
\'types\'
参数据我所知,它不是一个核心查询参数。你在用它吗?)
Third, 我们需要让WordPress知道,它需要基于我们的自定义查询而不是默认查询进行分页:
global $wp_query;
// Put default query object in a temp variable
$tmp_query = $wp_query;
// Now wipe it out completely
$wp_query = null;
// Re-populate the global with our custom query
$wp_query = $trips_query;
此时,我们将默认查询移动到一个临时变量中,并重新填充
$wp_query
使用我们的自定义查询进行全局查询。
Fourth, 我们需要输出自定义查询循环:
if ( $trips_query->have_posts() ) : while ( $trips_query->have_posts() ) : $trips_query->the_post();
// Normal loop output goes here
// You can use loop template tags normally
// such as the_title() and the_content()
endwhile; endif;
只需将您的循环输出放到上面。为了简洁起见,我省略了它。
Fifth, 我们只需要重新设置:
// Restore original query object
$wp_query = $tmp_query;
// Be kind; rewind
wp_reset_postdata();
这就是输出具有正确分页的自定义查询循环所需的全部内容。
编辑分类法的使用{slug} => {term}
as a query taxonomy parameter 在WordPress 3.1中被弃用,取而代之的是\'tax_query\'
. 您应该替换此:
\'types\' => $types
。。。使用此选项:
\'tax_query\' => array(
array(
\'taxonomy\' => \'types\',
\'field\' => \'slug\',
\'term\' => $types
)
)
这会让你
$types_query_args
数组如下所示:
$trips_query_args = array(
\'post_type\' => \'trips\',
\'tax_query\' => array(
array(
\'taxonomy\' => \'types\',
\'field\' => \'slug\',
\'term\' => $types
)
)
);
编辑ChipBennett有趣的发展。我在$trips\\u query\\u args数组中添加了“paged”=>N,其中N代表一个数字。当添加1时,页面实际上显示了与第1页完全相同的结果。当添加2时,它显示了第2页的完美结果。然而,当使用导航链接甚至操纵URL时,它就不再有效了。有什么想法吗?
因此,让我们尝试使用以下命令强制查询分页:
$paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
您将更新您的
$trips_query_args
相应地排列:
$paged = ( get_query_var( \'paged\') ) ? get_query_var( \'paged\' ) : 1;
$trips_query_args = array(
\'post_type\' => \'trips\',
\'tax_query\' => array(
array(
\'taxonomy\' => \'types\',
\'field\' => \'slug\',
\'term\' => $types
)
),
\'paged\' => $paged;
);
这会导致正确的分页吗?