add_rewrite_rule again

时间:2011-12-17 作者:Smarty

一般来说from this question 90%适合我。我需要一个小小的改变——我想要所有URL都像示例一样。com/snpv/any\\u text/直接不索引。php与原始代码一样,但my.php 我的根目录中的脚本THEME (不是站点!)。因此,我根据自己的需要更正代码:

register_activation_hook(__FILE__, \'make_flush_rules\');
function make_flush_rules()
{
    add_rewrite_rule(\'snpv/([^/]+)\', \'/wp-content/themes/lightsaber/my.php?prm1=$matches[1]\', \'top\');
    flush_rewrite_rules(false);
}

add_filter(\'query_vars\', \'make_query_vars\');
function make_query_vars($query_vars)
{
    $query_vars[] = \'prm1\';
    return $query_vars;
}
要使图片清晰,请执行以下操作:

光剑我的主题。php只是独立脚本。它不是页面(或者准确地说,不是WP页面)或页面模板,只是生成一些输出的php代码,我创建并激活了这个插件。输入URL示例。com/snpv/ABC/and get 404第页:(如何更正问题?谢谢!

1 个回复
最合适的回答,由SO网友:Milo 整理而成

下面是一个示例template_redirect 如果prm1 已设置查询变量:

// set up the rewrite
add_action( \'init\', \'wpse36736_setup_rewrites\' );
function wpse36736_setup_rewrites(){
    add_rewrite_rule( \'snpv/([^/]+)\', \'index.php?prm1=$matches[1]\', \'top\' );
}

// add query var
add_filter(\'query_vars\', \'wpse36736_query_vars\');
function wpse36736_query_vars( $query_vars ){
    $query_vars[] = \'prm1\';
    return $query_vars;
}

// check the query var on template_redirect
add_filter( \'template_redirect\', \'wpse36736_template_redirect\' );
function wpse36736_template_redirect(){
    global $wp_query;
    if( $wp_query->get( \'prm1\' ) ):
        include( get_template_directory() . "/prm1.php" );
        exit();
    endif;
}
然后您可以访问prm1 在脚本中,通过:

$prm1 = get_query_var( \'prm1\' );
唯一奇怪的是WordPress解释这个查询的方式,3.3中的行为似乎与以前的版本有所不同。如果您检查全球$wp_query 为这些请求中的任何一个设置变量,所有内容都会被填充,就像它是主贴子页面一样is_404 为false。我记得以前我想帮忙的时候不是这样的this question.

无论如何,在这种情况下,我通常会创建一个页面snpv, 并将重写规则更改为\'index.php?pagename=snpv&prm1=$matches[1]\'.

结束

相关推荐