当您将规则指向除index.php
, 它被解释为外部的并写入。htaccess文件。解析外部规则后,请求被定向到WordPress,后者在php中解析内部规则。这是内部版本:
function custom_rewrite() {
add_rewrite_rule(
\'^(bar|baz|foo-.*)\',
\'index.php?my_var=$matches[1]\',
\'top\'
);
}
add_action( \'init\', \'custom_rewrite\' );
您还需要注册规则中使用的自定义查询变量。请注意
page
已被WordPress使用
function wpd_query_vars( $qvars ) {
$qvars[] = \'my_var\';
return $qvars;
}
add_filter( \'query_vars\', \'wpd_query_vars\' , 10, 1 );
仅此一项并不能起多大作用,您必须检查是否存在与您的规则匹配的页面,如果不存在,则加载您的文件
parse_request
行动
function wpd_parse_request( $request ) {
// if the rule was matched, the query var will be set
if( isset( $request->query_vars[\'my_var\'] ) ){
// check if a page exists, reset query vars to load that page if it does
if( get_page_by_path( $request->query_vars[\'my_var\'] ) ){
$request->query_vars[\'pagename\'] = $request->query_vars[\'my_var\'];
unset( $request->query_vars[\'my_var\'] );
// else load the file
} else {
include \'test.php\';
die();
}
}
return $request;
}
add_action( \'parse_request\', \'wpd_parse_request\' );