如何用重写规则变量覆盖url参数?

时间:2021-01-09 作者:l6ls

Setup a rule:

add_action( \'init\',  function() {
    add_rewrite_rule( \'^myparamname/?$\', \'index.php?myparamname=hello\', \'top\' );
} );

Whitelist the query param:

add_filter( \'query_vars\', function( $query_vars ) {
    $query_vars[] = \'myparamname\';
    return $query_vars;
} );

Get query vars:

localhost/myparamname

get_query_var(\'myparamname\'); // hello
localhost/myparamname?myparamname=hilocalhost/myparamname/?myparamname=hi

get_query_var(\'myparamname\'); // hi
正如你所见,"hi" 显示消息,而不是"hello" 在第二个示例中。在这里,理想的情况通常是"hello".

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

"hi" 显示消息,而不是"hello" 在第二个示例中

是的,因为它就是这样工作的:query_vars 是一个钩子,用于注册公共的自定义查询变量,因此如果URL查询字符串包含自定义查询变量,则WordPress会将查询变量设置为从查询字符串解析的值。

理想的情况通常是"hello"

您可以通过request hook. 例如。

add_filter( \'request\', function ( $query_vars ) {
    if ( isset( $query_vars[\'myparamname\'] ) ) {
        $query_vars[\'myparamname\'] = \'hello\';
    }

    return $query_vars;
} );
只需确保使用唯一的查询变量,或者注意不要覆盖不应该被覆盖的查询变量。

相关推荐

在我的帐户中输出自定义页面的PHP代码

几周来我一直在努力解决这个问题。我向woocommerce我的帐户页面添加了一些自定义端点。除了一个外,其他所有的都与一个短代码相链接,工作正常。你应该链接到一个普通的wordpress页面,在我的账户页面中显示它。我不知道如何编写php,现在它所做的只是在一个空屏幕上打开该页面,而不是在我的帐户页面中。这是我想到的代码,但是{}中的部分肯定是错误的(因为它打开时https://new.holistic-horse-training.com/forum-links):add_action( \'wooco