我想使用WP_Rewrite
. 我找到了codex 他们有很好的例子和this stack topic 也向我解释了很多。
目前,我得到了以下基于codex的代码,并从堆栈溢出问题中更新了3:
add_filter( \'rewrite_rules_array\', \'custom_permalinks\' );
add_filter( \'query_vars\', \'custom_query_vars\' );
add_action( \'wp_loaded\', \'custom_flush_rules\' );
function custom_flush_rules() {
$rules = get_option( \'rewrite_rules\' );
if( !isset($rules[\'(employees)/([^/]*)$\']) ) {
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
}
function custom_permalinks( $rules ) {
$newrules = array();
$newrules[\'(employees)/([^/]*)$\'] = \'index.php?pagename=employees&employees_slug=$matches[1]\';
return $newrules + $rules;
}
function custom_query_vars( $vars ) {
array_push($vars, \'employees_slug\');
return $vars;
}
当我访问时
/employees/name_of_the_employee/
访问时显示相同的页面
/employees
, 因此没有显示404页(这意味着应用了新的重写规则)。但当我
print_r($_GET)
打印空数组。我也不知道如何为
/name_of_the_employee
页而不是父页。
在里面this stack topic 有一个参考get_query_var(\'employees_slug\')
但不是打印员工姓名,而是父页面slug/employees
显示。。
任何人都可以告诉我如何使用模板访问新的子页面,或者在显示时如何查看?
最合适的回答,由SO网友:Milo 整理而成
查询变量不以$_GET
, 使用get_query_var()
获取或检查由重写规则设置的自定义查询变量的值。
您的规则当前正在返回employees
像employees_slug
因为您的规则有两个捕获组employees_slug
持有于$matches[2]
, 不$matches[1]
. 不过,第一个捕获组是不必要的,因此可以删除paren。
要应用模板,可以筛选page_template
并检查是否存在查询变量。
function wpd_employees_page_template( $template ){
if( get_query_var( \'employees_slug\' ) ){
$template = locate_template( \'employees.php\' );
}
return $template;
}
add_filter( \'page_template\', \'wpd_employees_page_template\' );
另请注意,添加规则的一种稍微简单的方法是通过
add_rewrite_rule
连接到
init
操作而非筛选
rewrite_rules_array
.