URL重写和存档模板文件-发布类型与分类

时间:2017-11-16 作者:Peter Arthur

如果这是一个很难理解的问题,我很抱歉,但实际上这是一个模板层次结构/重写问题。

我已经设置了一些成功的重写规则,但我希望可以操纵它们来调用层次结构中的不同模板文件,以便更合理地控制归档页面。我有一个团队新闻自定义帖子类型和一个运动分类法。我的目标是建立一个只包含特定运动项目帖子的团队新闻档案,以及一个单独的运动档案,用于所有与该分类相关的帖子和页面。不幸的是,我只能通过当前的重写访问体育分类法档案,而不能访问团队新闻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解决方案(不太老套)。

1 个回复
最合适的回答,由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\');

结束

相关推荐

Custom archives function

我正在为我的教会网站建立一个自定义档案页面。在我的档案页上,我想把上周的布道放在一个特殊的盒子里,然后是未来的布道,最后是布道档案。我希望将来的布道和布道档案用标题隔开。。。i、 未来的布道布道档案布道档案。。。我的问题是,当我用分页功能点击按钮转到旧的布道帖子时,它会在我所在的每个归档页面上显示当前和未来的布道!如何使当前和未来的布道仅显示在第1页上,而不在单击查看旧帖子时显示?以下是我的功能:// Create the loop for the sermons page function se

URL重写和存档模板文件-发布类型与分类 - 小码农CODE - 行之有效找到问题解决它

URL重写和存档模板文件-发布类型与分类

时间:2017-11-16 作者:Peter Arthur

如果这是一个很难理解的问题,我很抱歉,但实际上这是一个模板层次结构/重写问题。

我已经设置了一些成功的重写规则,但我希望可以操纵它们来调用层次结构中的不同模板文件,以便更合理地控制归档页面。我有一个团队新闻自定义帖子类型和一个运动分类法。我的目标是建立一个只包含特定运动项目帖子的团队新闻档案,以及一个单独的运动档案,用于所有与该分类相关的帖子和页面。不幸的是,我只能通过当前的重写访问体育分类法档案,而不能访问团队新闻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解决方案(不太老套)。

1 个回复
最合适的回答,由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\');

相关推荐

permalinks issue and archives

我对运行在WP 3.3上的一个站点有一个问题,当我们通过“/%post\\u id%/%postname%/”使永久链接成为任何内容时,归档页面会断开并变成404。经过一些研究,我明白了为什么从性能的角度来看,这不是一个好的做法,所以我尝试了建议的备选方案:“/%year%/%postname%/”和“/%post\\u id%/%postname%/”这两个建议都有效,只是只有使用post\\u id的建议,归档URL才会变成“/date/2012/11/”,并被找到。根据permalink的任何其他建