我有一个罕见的场景,我需要一个高级重写URL来检索所需的URL结构。事情是这样的。我有三个单独的项目可以操作:
我需要以下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在它的弹格中同时使用着陆器和子页面。有可能吗?
谢谢!
发布于 2018-01-11 14:18:40
您可以通过两种方法来实现这一点:(1)使用两个页面,而CPT没有存档,或者(2)使用一个页面和一个带有存档的CPT。
Option 1-两页:
创建两个常规页面,将“子页面”设置为“登陆页”的子页面。注册CPT时,将其设置为没有存档,并设置其重写,以便单个CPT位于“子页面”之下。
register_post_type('wpse_post_type',
array(
'has_archive' => false,
'rewrite' => array(
'slug' => 'landing-page/child-page'
),
)
);这似乎回答了你最初的问题,好处是“子页面”是wp-admin中的一个页面,所以很容易编辑它的内容。缺点是,除非您创建一个特殊的页面模板--要么是page-child-page.php,要么是tpl-child-page.php,然后从page下拉列表中手动选择--否则您就没有任何用于CPT的存档。
Option 2-存档的一个页面和CPT
如果“登陆页”是页面,“子页”是您的CPT存档,而“自定义post类型名称”是单个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,因此您可能不需要调整主题中的任何内容就可以获得新D5的存档。当然,您也可以通过在主题中创建一个archive-wpse_post_type.php (更改您的实际CPT名称)来自定义此归档。如果您愿意,可以使用自定义字段来编辑wp中的某些内容。
最后一个提示--如果您已经注册了CPT,一定要首先使用unregister_post_type()删除它,然后重新注册它,因为一旦定义了CPT,就很难在不对其进行核武器的情况下更改重写规则。(如果您已经在CPT中创建了职位,请不要担心。取消注册不会将它们从数据库中删除;一旦重新注册CPT,它们将再次出现,这一次出现在正确的URL上)。
https://wordpress.stackexchange.com/questions/290811
复制相似问题