我没有从谷歌搜索中找到任何有用的提示,我在wordpress论坛上写了同样的问题,但没有得到回复
我在这里写完整的步骤
第一步我将页面重定向到自定义后期归档页面
添加\\u操作(“template\\u redirect”、“plu\\u redirects”)//我正在会话中保存post\\u id,它是事件$\\u会话[\'event\\u page\']=$\\u GET[\'event\'];
wp\\u safe\\u重定向(get\\u post\\u type\\u archive\\u link(\'plug\');
在存档页面中,我试图通过id获取帖子,如果会话不存在,则获取最新帖子。
if ( !isset($_SESSION[\'event_page\'])) :
$args = array(
\'post_type\'=> \'plug\',
\'posts_per_page\' => 1,
\'order\' => \'ASC\',
\'tax_query\' => array(
array(
\'taxonomy\' => \'event_type\',
\'field\' => \'slug\',
\'terms\' => \'schedule\'
)
)
);
query_posts($args);
else :
$args = array(
\'post_type\'=> \'plug\',
\'posts_per_page\' => 1,
\'p\' => $_SESSION[\'event_page\'],
\'order\' => \'ASC\',
\'tax_query\' => array(
array(
\'taxonomy\' => \'event_type\',
\'field\' => \'slug\',
\'terms\' => \'schedule\'
)
)
);
query_posts($args); endif;
但这总是在会话设置时获取最后一条记录。。。为什么?我需要有更好的方法来编写it代码,而不是使用会话,而且我不需要循环,因为我只得到一条记录。我在存档页面中遇到问题,我添加的代码正在工作。但不专业。。
最合适的回答,由SO网友:helgatheviking 整理而成
我们将注册一个查询变量,而不是使用$\\u会话变量。
function wpa_91718_query_var( $vars ) {
$vars[] = \'event_page\';
return $vars;
}
add_filter( \'query_vars\', \'wpa_91718_query_var\' );
然后,我们可以在运行查询之前使用
pre_get_posts
.
如果我正确理解了您和您的代码,那么如果URL中存在查询变量,那么您需要搜索具有该ID的帖子。否则,您只需要在“event\\u type”分类中显示带有“schedule”术语的最新CPT。
我认为这可以通过以下方式实现:
function wpa_91718_pre_get_posts( $query ) {
// only modify the main query and only on the front-end
if ( !is_admin() && $query->is_main_query() ) {
if ( is_post_type_archive( \'plug\' ) ) {
// Display only 1 post for the cpt archive
set_query_var( \'posts_per_page\', 1 );
// if query var exists search for that particular post ID number
if ( $event_page = get_query_var( \'event_page\' ) ){
set_query_var( \'p\', (int) $event_page );
// otherwise get the most recent post of event_type taxonomy
} else {
set_query_var( \'event_type\', \'schedule\' );
}
}
}
}
add_action( \'pre_get_posts\',\'wpa_91718_pre_get_posts\' );
完全没有经过测试,但我认为这应该让你走上正确的道路。