好的,我已经为所有三种类型的请求提供了工作示例。为了使它们工作,需要花大量的时间进行实验和弄乱。我想Milo擅长促使人们回答自己的问题。
经过无数次更改并刷新了永久链接后,我意识到找出add_rewrite_url之外的URL更加容易,一旦它们起作用,然后定义重写。例子是index.php?param=foo&post_type=example_type
。
另一件事很明显,但是在此处添加它可能会对其他人有所帮助。在定义页面/子页面通配符规则之前,必须定义自定义帖子类型add_rewrite_rule规则。我在那个上浪费了很多时间,并认为这是导致我不明白为什么规则不起作用的主要原因。
这是满足我所有需求的3条规则。页面/子页面规则被合并为一个规则。
// Custom Post Archive
add_rewrite_rule(
'^foo/example_type/?$',
'index.php?param=foo&post_type=example_type',
'top'
);
// Custom Post Individual
add_rewrite_rule(
'^foo/example_type/([^/]*)/?$',
'index.php?param=foo&example_type=$matches[1]',
'top'
);
// Pages, Top-Level and Sub-Pages
// This MUST be placed in the code AFTER custom post add_rewrite_rule
add_rewrite_rule(
'^foo/(.+)/?$',
'index.php?param=foo&pagename=$matches[1]',
'top'
);
另外,我所做的是设置一个循环以添加多个自定义帖子类型规则。请记住,在定义页面/子页面通配符规则之前,必须定义自定义帖子类型add_rewrite_rule规则。
$custom_types = array('example_type', 'projects', 'people');
foreach($custom_types as $type) {
// Custom Post Archive
add_rewrite_rule(
'^foo/'.$type.'/?$',
'index.php?param=foo&post_type='.$type,
'top'
);
// Custom Post Individual
add_rewrite_rule(
'^foo/'.$type.'/([^/]*)/?$',
'index.php?param=foo&'.$type.'=$matches[1]',
'top'
);
}
当试图更好地了解Wordpress如何查询页面/帖子时,Milo传递的Rewrite Analyzer非常有用。
page
帖子类型,还是任何页面?层次结构中的父/子页面如何?