这里我们有一个来自函数的片段。php文件。。。
add_action(\'init\', \'create_recipes\');
function create_recipes() {
$recipes_args = array(
...some properies...,
\'hierarchical\' => false,
\'rewrite\' => array(\'slug\' => \'recipes\')
...maybe more properties...
}
register_post_type(\'recipes\',$recipes_args);
}
add_action( \'init\', \'recipes_rewrites_init\' );
function recipes_rewrites_init(){
global $wp_rewrite;
$gallery_structure = \'recipes/%post_id%/%recipe%\';
$wp_rewrite->add_rewrite_tag("%recipe%", \'([^/]+)\', "recipe=");
$wp_rewrite->add_permastruct(\'recipe\', $gallery_structure, false);
}
这将注册一个自定义的post类型“recipes”,并设置permalink结构,以便我们可以实现,例如:
(1) example.com/recipes/394/lunch/
在“午餐”页面,我将赞美一顿好午餐的优点。到目前为止,一切顺利。
然而,如果我想将“午餐”细分为“三明治”、“汉堡”、“沙拉”(例如,在“三明治”页面上,我将谈论午餐,特别是三明治),该怎么办。首先,我在“recipe”自定义帖子类型部分下创建这些额外页面,并选择“午餐”页面作为其父页面。现在,我可能希望/假设以下方法会奏效,例如:
(2) example.com/recipes/513/lunch/sandwich/
哦,天哪,这不像假定的那样有效-我们收到了404错误。好的,我们如何进入“三明治”页面?让我们看看。。。
(3) example.com/recipes/513/sandwich/
很好,这很管用——但我希望“三明治”页面的父slug(“午餐”)在URL中位于它之前(
see (2)). 如何解决这个问题?让我们从某处开始。。。
Step 1
我只知道如果我改变
\'hierarchical\' => false
到
\'hierarchical\' => true
然后
the_permalink()
函数将(根据需要)构造permalink,如(2)所示。很好,但这将导致404错误
(2). 我猜我在
create_recipes
函数,或者我在
recipes_rewrites_init
作用
Step 2
我想我可以(理论上)钩住WP permalink功能来拦截请求/permalink,检索帖子的父slug(如果有),并将其放在帖子slug之前。然而,这大概只会修改生成的permalink,我已经在步骤1中完成了。我真正需要的是确保请求正确路由。
Questions
我该怎么做呢?是否有已知的WP方式(即初始自定义类型设置中的现有功能/选项)?
Other thoughts
我也知道自定义分类法可以(至少部分)用来解决帖子分类的问题,并且有一个插件可以提供帮助。然而,如果可能的话,我希望一开始坚持使用自定义的帖子类型。
谢谢
<小时>
Update 1
我现在知道了一个名为“Posts 2 Posts”的插件,它支持自定义post类型之间的连接,尤其是不同自定义post类型之间的连接。然而,在我的示例中,我只使用了一种自定义帖子类型,并试图建立一个自然的父子层次结构(这似乎是一个相当标准的WP事物),而不是强制在不同的自定义帖子类型之间建立关系。
<小时>一
(2) example.com/recipes/513/lunch/sandwich/
向自定义帖子类型添加自定义永久链接结构可以tricky.向自定义帖子类型添加自定义永久链接结构可能是unnecessary.我意识到,我正在通过创建一个[不必要的]自定义永久链接结构(例如。example.com/recipes/513/lunch/sandwich/
) 回想起来,这是令人费解的;我的理由是,出于性能原因,post ID应该出现在URL中(而不仅仅是slug,WP匹配slug可能会比较慢)。我认为这是可能的,但可能不值得这么麻烦。取而代之的是,我删除了我的定制permalink内容,然后让WP解决,例如,example.com/recipes/lunch/sandwich/
- 现在它完全按照预期工作。记住设置\'hierarchical\' => true
, 世界就是你的永恒。
Conclusion
如果您坚持执行我试图执行的操作,这可能是可能的,但需要正确设置自定义永久链接结构以避免404错误(我的原始问题)。目前,我将坚持使用标准的WP分层permalink功能。