自定义发布类型插件与页面名称相同,导致冲突

时间:2018-08-07 作者:Joe

我有一个自定义的职位类型所有设置。我希望slug与页面名称相同,因为所有这些CPT都将在该特定页面(/团队成员)上查询。

如果我将自定义Post类型slug设置为页面URL,则该特定页面将不再加载页面模板。它加载一个损坏的帖子模板。

我的自定义帖子类型重写:

$rewrite = array(
    \'slug\'                  => \'team-members\',
    \'with_front\'            => false,
    \'pages\'                 => false,
    \'feeds\'                 => false,
);
这允许我生成proper URL 其中:http://www.example.org/team-members/bob-jones

现在的问题是,当我尝试访问该页面时:http://www.example.org/team-members/, 它无法呈现正确的页面模板文件(标题恰当page-team-members.php). 保存永久链接设置无效。

How can I create the URL slug of my Custom Post Type to not interfere with a page titled the exact same thing?

2 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

出现在什么位置http://www.example.org/team-members/ 是您的帖子类型的“帖子类型存档”。这是WordPress自动生成的帖子列表。如果不希望帖子类型具有存档,可以通过设置has_archive 参数为false:

register_post_type( \'post_type_name\', array(
    \'has_archive\' => false,
) );
现在,您可以在/团队成员处创建一个没有冲突的页面。

SO网友:Peter HvD

多年来,我发现避免这种冲突的最简单方法是通过在URL中添加额外的步骤将CPT帖子与页面分开。

例如,更改\'slug\' => \'team-members\',\'slug\' => \'team-members/member\', 因此您的URL将成为http://www.example.org/team-members/member/bob-jones

当然,这并不理想,我希望URL更干净,但有时你不得不为轻松的生活妥协:-)

结束