您所要求的permalink结构中有问题的部分是permalinks,如
/marketing-lists/{$something}/
有时候
$something
应该是一个类别,有时是一个页面标记。
因此,要使其正常工作,您应该运行数据库查询以了解$something
是,这会降低性能
之后,如果urlexample.com/marketing-lists/viral-marketing
你有一页写着slugviral-marketing
和一个带有slug的类别viral-marketing
WordPress应该显示什么,页面还是类别存档?
即使运行db查询,您也会找到一个页面和一个包含该段代码的类别,那么谁会赢呢?
此外,使用标准的WordPress重写规则,您的工作将非常困难。。。因为会发生很多冲突。
我开发了一个插件,Clever Rules 可以为您的任务提供很大帮助,但是,同样,没有db查询是不可能的/marketing-lists/
是一个页面slug或一个类别。。。
使用该插件,该代码应该可以工作,但它需要db查询,如果发生冲突,page slug将获胜:
/*
* Plugin Name: My Custom Rules
*/
add_action(\'plugins_loaded\', \'register_my_rules\');
add_filter(\'skip_clever_rule\', \'rule_pages_for_pages\', 20, 3);
function register_my_rules() {
if ( ! function_exists(\'register_clever_rule\') ) return;
$args = array( \'id\' => \'rule_pages\',\'route\' => \'/marketing-lists/%s\');
register_clever_rule( $args )->query(\'pagename=[0]\')->priority(1);
$args = array( \'id\' => \'rule_cats\',\'route\' => \'/marketing-lists/%s\');
register_clever_rule( $args )->query(\'category_name=[0]\')->priority(2);
$args = array( \'id\' => \'rule_singles\',\'route\' => \'/marketing-lists/%s/%s/\');
register_clever_rule( $args )->query(\'name=[1]\');
}
function rule_pages_for_pages( $skip, $rule, $pieces ) {
if ( $rule[\'args\'][\'id\'] === \'rule_pages\' ) {
global $wpdb;
$pages = $wpdb->get_col("SELECT post_name FROM $wpdb->posts WHERE post_type = \'page\' AND post_status = \'publish\'");
if ( ! in_array( $pieces[1], $pages ) ) $skip = true;
}
return $skip;
}
请注意,该代码位于
plugin 而且不能在主题中工作。