定制REWRITE_RULES-只传递数字,不传递字母字符

时间:2014-03-26 作者:Sir Code-A-lot

我正在尝试添加一个重写规则,以将var传递给自定义页面模板。

出于某种奇怪的原因,当我键入它指向的数字以外的字符时,它只在变量中例外数字404.

例如:http://example.com/reco/9080

但事实并非如此:http://example.com/reco/abcd (重定向到404)

这是我的代码:

function add_rewrite_rules($wp_rewrite) {
        add_rewrite_rule(\'reco/([^/]*)/?\', \'index.php/reco/?b=$1\', \'top\');
}
add_action(\'generate_rewrite_rules\', \'add_rewrite_rules\');


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

1 个回复
SO网友:TheDeadMedic

而不是index.php/reco/?b=$1, 尝试以下操作:

"$wp_rewrite->index?pagename=reco&b=" . $wp_rewrite->preg_index( 1 )
还应附加$ 到您的reco/([^/]*)/? regex以确保规则只匹配整个路径,而不仅仅是开始。

然后刷新规则(只需在admin中重新保存永久链接设置)。

Update: 尝试使用page_rewrite_rules 改为过滤,并使用get_query_var( \'b\' ):

function wpse_139259_page_rules( $rules ) {
    return array(
        \'reco/([^/]+)/?$\' => \'index.php?pagename=reco&b=$matches[1]\',
    ) + $rules;
}

add_filter( \'page_rewrite_rules\', \'wpse_139259_page_rules\' );

结束

相关推荐

GET_SHORTCODE_regex()只与第一个短码匹配

法典中有an example 使用get\\u shortcode\\u regex()检查是否在给定页面上调用了短代码:$pattern = get_shortcode_regex(); preg_match(\'/\'.$pattern.\'/s\', $posts[0]->post_content, $matches); if (is_array($matches) && $matches[2] == \'YOURSHORTCODE\') { /