如果这是一个很难理解的问题,我很抱歉,但实际上这是一个模板层次结构/重写问题。
我已经设置了一些成功的重写规则,但我希望可以操纵它们来调用层次结构中的不同模板文件,以便更合理地控制归档页面。我有一个团队新闻自定义帖子类型和一个运动分类法。我的目标是建立一个只包含特定运动项目帖子的团队新闻档案,以及一个单独的运动档案,用于所有与该分类相关的帖子和页面。不幸的是,我只能通过当前的重写访问体育分类法档案,而不能访问团队新闻CPT档案。
以下是我的重写规则,并解释了我的想法:
add_rewrite_rule(\'^athletics/team/([^/]*)/news/?\',\'index.php?post_type=team-news&sport=$matches[1]\', \'top\');
这一个带来了
taxonomy-sport.php
, 虽然我希望它能
archive-team-news.php
. 我需要
sport=
部分原因是,我只想展示这项运动的球队新闻帖子。
add_rewrite_rule(\'^athletics/sport/([^/]*)/?\',\'index.php?sport=$matches[1]\', \'top\');
这一条正好提到
taxonomy-sport.php
正如我所希望的那样。
根据查询监视器插件,请求url时的模板层次结构/athletics/team/varsity-football/news/
这是:
分类体育大学足球。php分类运动。php——它使用的是分类法。php存档团队新闻。php---我希望它是归档文件。php索引。php有没有办法制作归档团队新闻。php是否适用于该URL?我需要吗filter the hierarchy? 我对WP很陌生,所以我不想改变太多。。。
EDIT 1: 为了简化我的目标--
?post_type=[1]&taxonomy=[2]
将始终拉出taxonomy 据我所知,存档页。我能把它拉上来吗post-type 是否改为存档页面?
EDIT 2: 我已将第一条重写规则的第二个参数更改为\'index.php?post_type=team-news\'
, 现在将显示正确的存档页面(archive-team-news.php
) 但我仍然需要以某种方式通过分类法进行进一步筛选。
注意:分类法slug在URL中为athletics/team/[taxonomy]/news/
, 所以现在我想parse the URL for that value in PHP, 但我更喜欢WP解决方案(不太老套)。
最合适的回答,由SO网友:Peter Arthur 整理而成
我用pre\\u get\\u posts钩子(谢谢@Milo)处理了这个问题,传入了与我需要的slug对应的URL部分。希望这对以后的人有所帮助。欢迎改进。谢谢
function filter_team_news_archives_by_sport_taxonomy($query) {
if (is_post_type_archive(\'team-news\') && $query->is_main_query()){
// Get $sport_slug from URL -- https://stackoverflow.com/a/36002190/4107296
$url = (isset($_SERVER[\'HTTPS\']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$parsed = parse_url( $url );
$chunks = explode( \'/\', trim($parsed[\'path\'],\'/\') );
// if the URL is in this format: /athletics/team/[sport-slug]/news
if ($chunks[0] === \'athletics\' && $chunks[1] === \'team\' && $chunks[3] === \'news\') {
$sport_slug = $chunks[2];
$query->set(\'tax_query\', array(array(
\'taxonomy\' => \'sport\',
\'field\' => \'slug\',
\'terms\' => $sport_slug,
)));
}
}
}
add_action(\'pre_get_posts\', \'filter_team_news_archives_by_sport_taxonomy\');