如何使用终结点,但删除/重写终结点基础?

时间:2016-08-16 作者:Ryan Dorn

我一直在搞重写query_var 要生成一些列表,例如:

我的页面?my\\u var=1~/my page/?my\\u var=2?my\\u var=3在仔细阅读了StackExchange和interwebs之后,似乎压倒性的共识是add_rewrite_endpoint 就是要走的路。因此,我实现了以下内容:

function wpd_add_my_endpoint(){
    add_rewrite_endpoint( \'my_var\', EP_PAGES );
}
add_action( \'init\', \'wpd_add_my_endpoint\' );
这将基于我前面提到的URI生成以下URI:

然而,我想去掉“端点基”(或slug,在这个问题/示例中,甚至不知道如何确切地称之为“my\\u var”),因此URI将是:

我已经尝试了很多不同的重写方法,但都没有任何效果,这是我迄今为止所做的,但没有奏效:

function setup_filter_rewrites(){
    add_rewrite_rule(\'my-page/([^/]*)/?\', \'index.php?pagename=my-page&my_var=$matches[1]\', \'top\');
}
add_action( \'init\', \'setup_filter_rewrites\' );

Updated

我的全部代码现在是:

// Add Query Var
function add_query_vars_filter( $vars ){
    $vars[] = "my_var";
    return $vars;
}
add_filter( \'query_vars\', \'add_query_vars_filter\' );

// Add Endpoint
function wpd_add_my_endpoint(){
    add_rewrite_endpoint( \'my_var\', EP_PERMALINK | EP_PAGES );
}
add_action( \'init\', \'wpd_add_my_endpoint\' );

// Add Rewrite
function setup_filter_rewrites(){
    add_rewrite_rule(\'^my-page\\/([0-9]+)\\/?\', \'index.php?pagename=my-page&my_var=$matches[1]\', \'top\');
}
add_action( \'init\', \'setup_filter_rewrites\' );
使用上述代码,~/my page/my\\u var/1/可以工作,但~/my page/1/返回404。(我冲洗过permalinks)

非常感谢!

2 个回复
SO网友:Alex Baulch

我认为add_rewrite_rule 是正确的路线,我认为你所拥有的也是正确的,除非使用正则表达式。

尝试用当前拥有的替换此=>^my-page\\/([0-9]+)\\/?.

完整代码如下:

function setup_filter_rewrites(){
    add_rewrite_rule(\'^my-page\\/([0-9]+)\\/?\', \'index.php?pagename=my-page&my_var=$matches[1]\', \'top\');
}
add_action( \'init\', \'setup_filter_rewrites\' );

SO网友:Ryan Dorn

好的,在经过一些调整和混乱之后,我有了以下代码,似乎可以工作:

// Add Query Var
function add_query_vars_filter( $vars ){
    $vars[] = "my_var";
    return $vars;
}
add_filter( \'query_vars\', \'add_query_vars_filter\' );

// Add Endpoint
function wpd_add_my_endpoint(){
    add_rewrite_endpoint( \'my_var\', EP_PAGES );
}
add_action( \'init\', \'wpd_add_my_endpoint\' );

// Add Rewrite Rule
function myplugin_rewrite_rule() {
    add_rewrite_rule( \'^my-page/([^/]*)/?\', \'index.php?pagename=my-page&my_var=$matches[1]\',\'top\' );
}
add_action(\'init\', \'myplugin_rewrite_rule\', 10, 0);

相关推荐

Dynamic Endpoints

我在WordPress外部有一个数据库表,需要为其创建端点。我已经创建了一个页面/cars/ 我计划使用页面模板生成链接。我希望url看起来像/cars/camaro/ ()/cars/%model%/ ). 起初,我认为我可以使用端点,但不知道如何根据从模型表中提取的段塞使它们动态。我也不确定使用Permalink结构标签是更容易还是更好。我甚至不完全确定从哪里开始,我以前创建过“静态”端点,所以我有一个基础可以跳出,但当我到达request 我不知道该怎么办。/** * Add endpoi