静态变量和添加_重写_规则?

时间:2017-09-04 作者:Mac

我正在建立一个小型网站,我希望每当一个人使用某个链接时,他都会被重定向到frontpage,并打开一个公式。

外汇:www.homepage。com/example/-->www.homepage。com公司

过去,我使用add\\u rewrite\\u rule使用自定义变量重定向用户,只需使用以下命令即可轻松重定向用户:

add_rewrite_rule(\'^example/?\',\'index.php\',\'top\');
但我的“问题”是我需要一个静态变量,所以我想我可以这样做:

 add_rewrite_rule(\'^example/?\',\'index.php?key1=123\',\'top\');
遗憾的是,我似乎无法实现这一点,而当我尝试只查询var(“key1”)时,我什么也得不到。What am i doing wrong here?

Update 1尝试将查询变量列入白名单,如注释中所述

add_action(\'init\', \'test_rewrite_rule\', 10, 0);
function test_rewrite_rule() 
{
    add_rewrite_rule(\'^example/?\',\'index.php?p=1&my-api=test\',\'top\');
}

//add_action(\'init\', \'test_rewrite_tag\', 10, 0);
//function test_rewrite_tag() 
//{
    //add_rewrite_tag(\'%my-api%\', \'([^&]+)\');
//}

add_filter( \'query_vars\', \'wpd_query_vars\' );
function wpd_query_vars( $query_vars )
{
    $query_vars[] = \'my-api\';
    return $query_vars;
}
并获取变量

  $wp_query->query_vars[\'my-api\'] 
Update 2

说得很清楚,我真的不在乎它通过我的重写路径传递了什么变量,只要我能看到它被重定向了:)

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

您不能将任意查询变量添加到重写规则中,这里有一个允许变量的白名单。

要添加查询变量,请使用query_vars 过滤器,例如,此过滤器添加my-api 作为有效的查询变量:

function wpd_query_vars( $query_vars ){
    $query_vars[] = \'my-api\';
    return $query_vars;
}
add_filter( \'query_vars\', \'wpd_query_vars\' );
但这只会得到查询变量,you still need to do something with it. 重写规则将漂亮的URL映射到查询变量,仅此而已。这就是为什么重写规则index.php 行不通。

相反,您需要编写一个钩子来查找何时定义了新的查询变量,如果是这样的话,请执行您希望该页面执行的操作。

大多数人会使用template_redirect 钩住并加载自定义模板,例如。

add_action( \'template_redirect\', \'custom_page_template_redirect\' );
function custom_page_template_redirect() {
    global $wp_query;
    $custom_page = $wp_query->query_vars[\'my-api\'];
    if ( $custom_page == \'key\' ) {
        // we\'ve found our page, call render_page and exit
        echo "hooray! it works!";
        exit;
    }
}
您可以调用wp_safe_redirect() 将用户重定向到您选择的目的地(或wp_redirect 如果是场外)

结束

相关推荐

如何自定义自定义php文件的页面标题

我正在创建一个自定义php/js页面,在第二个页面上查询和显示来自单独的非wordpress DB的结果。页眉和页脚将与我的主题相同,因此我调用了主题的页脚和页眉,但我还没有弄清楚为什么我自定义页面标题的钩子不起作用,并询问使用哪个钩子来显示我指定的标题。除了主题的页眉和页脚,我不需要调用wordpress中的任何内容(我不使用页面模板的原因之一)。我想是的require(\'../wp-blog-header.php\'); get_header(); add_filter( \'wp_