延伸斯蒂芬·哈里斯(StephenHarris)的优秀答案,我会选择;
add_action( \'generate_rewrite_rules\', \'my_rewrite_rules\' );
function my_rewrite_rules( $wp_rewrite )
{
$wp_rewrite->rules = array(
\'mypageslug/([^/]+)/page/?([0-9]{1,})/?$\' => $wp_rewrite->index . \'?pagename=mypageslug&user=\' . $wp_rewrite->preg_index( 1 ) . \'&paged=\' . $wp_rewrite->preg_index( 2 ),
\'mypageslug/([^/]+)/?$\' => $wp_rewrite->index . \'?pagename=mypageslug&user=\' . $wp_rewrite->preg_index( 1 )
) + $wp_rewrite->rules;
}
这遵循WordPress core中使用的实际regex标准。Stephen的代码示例的主要变化是
$wp_rewrite->index
确保重写传递给WordPress(否则可能会添加到“外部”重写列表)。
其次,也是最重要的,通过pagename
查询字符串中的var-这意味着WordPress的行为就像通常加载带有slug的页面一样mypageslug
.
UPDATE: 我忘了添加,请确保user
是公共查询变量,否则WordPress不会从URL映射它。要么用query_vars
或者使用全局$wp
;
add_filter( \'query_vars\', \'my_query_vars\' );
function my_query_vars( $vars )
{
$vars[] = \'user\';
}
// my preferred method - make sure you run this only after \'init\' has fired!
$GLOBALS[\'wp\']->add_query_var( \'user\' );
// then once the request has been parsed (anything after the action \'parse_request\')
$user = get_query_var( \'user\' );