页面、分类和自定义帖子类型之间的弹出冲突

时间:2018-01-11 作者:Ivica

我有一个罕见的场景,我需要高级重写URL,以便检索所需的URL结构。事情是这样的。我有3个单独的项目要处理:

页面自定义帖子类型分类我需要以下URL结构

example.com/landing-page - This is the landing page
example.com/landing-page/child-page - This is the child of the landing page
example.com/landing-page/child-page/custom-post-type-name - This is the complicated part. 
正如您所看到的,我想要实现的是某种永久链接层次结构,其中CPT在其slug中同时使用登录页和子页。这有可能吗?

谢谢

1 个回复
SO网友:WebElaine

您可以通过两种方式完成此操作:(1)使用两个页面和一个不带存档的CPT,或(2)使用一个页面和一个带存档的CPT。

Option 1 - two Pages:

创建两个常规页面,将“子页面”设置为“登录页面”的子页面。注册CPT时,将其设置为无存档,并将其重写设置为各个CPT位于“子页”下。

register_post_type(\'wpse_post_type\',
    array(
        \'has_archive\' => false,
        \'rewrite\' => array(
            \'slug\' => \'landing-page/child-page\'
        ),
    )
);
这似乎回答了您最初的问题,其好处是“子页面”是wp admin中的一个页面,因此很容易编辑其内容。缺点是,除非您创建一个特殊的页面模板page-child-page.phptpl-child-page.php 然后从页面模板下拉列表中手动选择-您没有任何CPT存档。

Option 2 - one Page and CPT with archive

如果“登录页”是一个页面,“子页面”是您的CPT存档,“自定义帖子类型名称”是一个CPT,您可以将“登录页”设置为普通页面。

注册CPT时,要将“子页”启用为比单个CPT高一级的存档,请执行以下操作:

register_post_type(\'wpse_post_type\',
    array(
        \'has_archive\' => \'landing-page/child-page\',
        \'rewrite\' => array(
            \'slug\' => \'landing-page/child-page\'
        ),
    )
);
这里的好处是child-page 将使用您现有的archive.php 因此,您可能不必调整主题中的任何内容来归档新的CPT。当然,您也可以通过创建archive-wpse_post_type.php (更改为您的实际CPT名称)在主题中。如果愿意,您可以使用自定义字段在wp admin中编辑某些内容。

最后一个提示-如果您已经注册了CPT,请确保使用unregister_post_type() 首先擦除它,然后重新注册它,因为一旦定义了CPT,就很难在不影响它的情况下更改重写规则。(如果您已经在CPT中创建了帖子,请不要担心。取消注册不会将其从数据库中删除;一旦您重新注册CPT,它们将再次显示,这次显示在正确的URL上)。

结束

相关推荐

Query posts using less than

我有一个工作查询,使用pre_get_posts 使用status post格式,仅在使用UNIX时间戳的日期范围内显示这些帖子。唯一的问题是,即使帖子超出范围,它仍然会被查询。我只是想知道是否有更好的方法使用自定义字段查询帖子,该字段使用的代码:$args = array(\'status_message\' => \'alerts\'); $status_alert = new WP_Query( $args ); $notice_startend = false; $n