WordPress有两种重写规则-内部和外部。内部规则由WordPress解析并路由到index.php
. 外部重写写入。htaccess和未定向到WordPress。
现在,您的规则是内部规则和外部规则的混合-您将其结构化为内部规则,但您将其错误地指向index.php
.
如果您想在接收此重写规则的代码中使用WordPress环境,则它应该是内部重写。如果希望这是WordPress未处理的外部规则,则需要更改规则以使用$1
而不是$matches[1]
.
EDIT
这里有两种方法,第一种是快速脏方法-
两种方法的第一步都是添加一个查询变量lpid
到已识别查询变量的WordPress数组:
function wpa55759_query_vars( $query_vars ){
$query_vars[] = \'lpid\';
return $query_vars;
}
add_filter( \'query_vars\', \'wpa55759_query_vars\' );
步骤2,将重写规则添加到仅设置
lpid
当我们的规则匹配时:
function wpa55759_rewrites(){
add_rewrite_rule(
\'lp/(\\d+)/?$\',
\'index.php?lpid=$matches[1]\',
\'top\'
);
}
add_action( \'init\', \'wpa55759_rewrites\' );
步骤3,挂钩
parse_request
并检查是否设置了查询变量。如果是,加载
lp.php
从模板目录中,然后退出:
function wpa55759_parse_request( $request ){
if( isset( $request->query_vars[\'lpid\'] ) ):
include( get_template_directory() . "/lp.php" );
exit();
endif;
return $request;
}
add_action( \'parse_request\', \'wpa55759_parse_request\' );
获取的值
lpid
在…内
lp.php
:
global $wp;
echo $wp->query_vars[\'lpid\'];
基本上,我们正在检查我们的查询var并尽早退出。WordPress从不运行数据库查询来加载帖子或页面。不确定这可能有什么副作用。
方法二第二种方法是在WordPress中创建页面,lp
, 并指出我们的规则,同时传递查询变量:
function wpa55759_rewrites(){
add_rewrite_rule(
\'lp/(\\d+)/?$\',
\'index.php?pagename=lp&lpid=$matches[1]\',
\'top\'
);
}
add_action( \'init\', \'wpa55759_rewrites\' );
现在可以创建模板
page-lp.php
和访问权限
lpid
使用:
echo get_query_var( \'lpid\' );
第二种方法的另一个选项是过滤
template_redirect
并在模板层次结构中设置快捷方式,加载您自己的自定义文件:
function wpa55759_template_redirect(){
global $wp_query;
if( $wp_query->get( \'lpid\' ) ):
include( get_template_directory() . "/lp.php" );
exit();
endif;
}
add_filter( \'template_redirect\', \'wpa55759_template_redirect\' );