真正的正则表达式来捕捉 wordpress 子页面永久链接
True regex to catch wordpress subpage permalinks
我有 wordpress 正则表达式“(get/(.*)?)”,它非常适合以下地址。
http://localhost/akasia/get/gulets/for/sale/
我的问题是此代码与以下网址不匹配
http://localhost/akasia/var/var/get/gulets/for/sale/
http://localhost/akasia/var/get/gulets/for/sale/var/
http://localhost/akasia/var/var/get/gulets/for/sale/var/var
http://localhost/akasia/n..0/var/var/get/gulets/for/sale/var/var/n..0
Regex buddy 匹配,但是wordpress regex 不匹配。
'.(get/(.)?)', '(.?.+?)(get/(.)?)' 和各种正则表达式不起作用.
我不明白为什么它不起作用。
注意:使用 $matches[] 检索匹配 URL 的值时,捕获组数据从 1 而不是 0 开始。
这是我的代码。
add_filter('rewrite_rules_array', 'create_rewrite_rule');
function create_rewrite_rule($rules){
$newrules = array(
'(get/(.*)?)' => 'index.php?&get=$matches[1]',
//'for/([^/]+)?' => 'index.php?for=$matches[1]',
);
return $newrules + $rules;
}
function get_rewrite_rules(){
// return get_option('rewrite_rules');
global $wp_rewrite;
return $wp_rewrite->rewrite_rules();
}
add_filter('query_vars', 'create_query_vars');
function create_query_vars($vars){
$vars[] = 'get';
$vars[] = 'for';
return $vars;
}
function get_flush_rewrite_rules() {
$rules = $GLOBALS['wp_rewrite']->wp_rewrite_rules();
if (!isset($rules['(get/(.*)?)'])){ // must be the same rule as in create_rewrite_rule($wp_rewrite)
press('Regex kurallari guncellendi. Bu normal degil. Admin\'i haberdar edin.');
flush_rewrite_rules();
}
}
add_filter('init', 'get_flush_rewrite_rules');
更新 几天+几个小时后,我发现正则表达式伙伴是真的。以下过滤器无效。
add_filter('rewrite_rules_array', 'create_rewrite_rule');
function create_rewrite_rule($rules){
$newrules = array(
'(get/(.*)?)' => 'index.php?get=$matches[1]',
);
return $newrules + $rules;
}
你应该使用
而不是这个
function create_rewrite_rule() {
add_rewrite_rule('(.*(get/(.*)?))', 'index.php?get=$matches[1]', 'top');
}
add_action('init', 'create_rewrite_rule', 10, 0);
你的代码应该是这样的。
function create_rewrite_rule() {
add_rewrite_rule('(.*(get/(.*)?))', 'index.php?get=$matches[1]', 'top');
}
add_action('init', 'create_rewrite_rule', 10, 0);
function get_rewrite_rules(){
// return get_option('rewrite_rules');
global $wp_rewrite;
return $wp_rewrite->rewrite_rules();
}
add_filter('query_vars', 'create_query_vars');
function create_query_vars($vars){
$vars[] = 'get';
$vars[] = 'for';
return $vars;
}
function get_flush_rewrite_rules() {
$rules = $GLOBALS['wp_rewrite']->wp_rewrite_rules();
if (!isset($rules['--(get/(.*)?)'])){ // must be the same rule as in create_rewrite_rule($wp_rewrite)
flush_rewrite_rules();
}
}
add_filter('init', 'get_flush_rewrite_rules');
希望能帮到一些人。
注意:get_flush_rewrite_rules 可能不是必需的。我会看看。一些测试告诉我 add_rewrite_rule 正在这样做。如果我没有忘记,我会做更多的测试并写到这里。
更新 几天+几个小时后,我发现正则表达式伙伴是真的。以下过滤器无效。
add_filter('rewrite_rules_array', 'create_rewrite_rule');
function create_rewrite_rule($rules){
$newrules = array(
'(get/(.*)?)' => 'index.php?get=$matches[1]',
);
return $newrules + $rules;
}
你应该使用
而不是这个
function create_rewrite_rule() {
add_rewrite_rule('(.*(get/(.*)?))', 'index.php?get=$matches[1]', 'top');
}
add_action('init', 'create_rewrite_rule', 10, 0);
你的代码应该是这样的。
function create_rewrite_rule() {
add_rewrite_rule('(.*(get/(.*)?))', 'index.php?get=$matches[1]', 'top');
}
add_action('init', 'create_rewrite_rule', 10, 0);
function get_rewrite_rules(){
// return get_option('rewrite_rules');
global $wp_rewrite;
return $wp_rewrite->rewrite_rules();
}
add_filter('query_vars', 'create_query_vars');
function create_query_vars($vars){
$vars[] = 'get';
$vars[] = 'for';
return $vars;
}
function get_flush_rewrite_rules() {
$rules = $GLOBALS['wp_rewrite']->wp_rewrite_rules();
if (!isset($rules['--(get/(.*)?)'])){ // must be the same rule as in create_rewrite_rule($wp_rewrite)
flush_rewrite_rules();
}
}
add_filter('init', 'get_flush_rewrite_rules');
希望能帮到一些人。
注意:get_flush_rewrite_rules 可能不是必需的。我会看看。一些测试告诉我 add_rewrite_rule 正在这样做。如果我没有忘记,我会做更多的测试并写到这里。
我有 wordpress 正则表达式“(get/(.*)?)”,它非常适合以下地址。
http://localhost/akasia/get/gulets/for/sale/
我的问题是此代码与以下网址不匹配
http://localhost/akasia/var/var/get/gulets/for/sale/
http://localhost/akasia/var/get/gulets/for/sale/var/
http://localhost/akasia/var/var/get/gulets/for/sale/var/var
http://localhost/akasia/n..0/var/var/get/gulets/for/sale/var/var/n..0
Regex buddy 匹配,但是wordpress regex 不匹配。
'.(get/(.)?)', '(.?.+?)(get/(.)?)' 和各种正则表达式不起作用.
我不明白为什么它不起作用。
注意:使用 $matches[] 检索匹配 URL 的值时,捕获组数据从 1 而不是 0 开始。
这是我的代码。
add_filter('rewrite_rules_array', 'create_rewrite_rule');
function create_rewrite_rule($rules){
$newrules = array(
'(get/(.*)?)' => 'index.php?&get=$matches[1]',
//'for/([^/]+)?' => 'index.php?for=$matches[1]',
);
return $newrules + $rules;
}
function get_rewrite_rules(){
// return get_option('rewrite_rules');
global $wp_rewrite;
return $wp_rewrite->rewrite_rules();
}
add_filter('query_vars', 'create_query_vars');
function create_query_vars($vars){
$vars[] = 'get';
$vars[] = 'for';
return $vars;
}
function get_flush_rewrite_rules() {
$rules = $GLOBALS['wp_rewrite']->wp_rewrite_rules();
if (!isset($rules['(get/(.*)?)'])){ // must be the same rule as in create_rewrite_rule($wp_rewrite)
press('Regex kurallari guncellendi. Bu normal degil. Admin\'i haberdar edin.');
flush_rewrite_rules();
}
}
add_filter('init', 'get_flush_rewrite_rules');
更新 几天+几个小时后,我发现正则表达式伙伴是真的。以下过滤器无效。
add_filter('rewrite_rules_array', 'create_rewrite_rule');
function create_rewrite_rule($rules){
$newrules = array(
'(get/(.*)?)' => 'index.php?get=$matches[1]',
);
return $newrules + $rules;
}
你应该使用
而不是这个function create_rewrite_rule() {
add_rewrite_rule('(.*(get/(.*)?))', 'index.php?get=$matches[1]', 'top');
}
add_action('init', 'create_rewrite_rule', 10, 0);
你的代码应该是这样的。
function create_rewrite_rule() {
add_rewrite_rule('(.*(get/(.*)?))', 'index.php?get=$matches[1]', 'top');
}
add_action('init', 'create_rewrite_rule', 10, 0);
function get_rewrite_rules(){
// return get_option('rewrite_rules');
global $wp_rewrite;
return $wp_rewrite->rewrite_rules();
}
add_filter('query_vars', 'create_query_vars');
function create_query_vars($vars){
$vars[] = 'get';
$vars[] = 'for';
return $vars;
}
function get_flush_rewrite_rules() {
$rules = $GLOBALS['wp_rewrite']->wp_rewrite_rules();
if (!isset($rules['--(get/(.*)?)'])){ // must be the same rule as in create_rewrite_rule($wp_rewrite)
flush_rewrite_rules();
}
}
add_filter('init', 'get_flush_rewrite_rules');
希望能帮到一些人。
注意:get_flush_rewrite_rules 可能不是必需的。我会看看。一些测试告诉我 add_rewrite_rule 正在这样做。如果我没有忘记,我会做更多的测试并写到这里。
更新 几天+几个小时后,我发现正则表达式伙伴是真的。以下过滤器无效。
add_filter('rewrite_rules_array', 'create_rewrite_rule');
function create_rewrite_rule($rules){
$newrules = array(
'(get/(.*)?)' => 'index.php?get=$matches[1]',
);
return $newrules + $rules;
}
你应该使用
而不是这个function create_rewrite_rule() {
add_rewrite_rule('(.*(get/(.*)?))', 'index.php?get=$matches[1]', 'top');
}
add_action('init', 'create_rewrite_rule', 10, 0);
你的代码应该是这样的。
function create_rewrite_rule() {
add_rewrite_rule('(.*(get/(.*)?))', 'index.php?get=$matches[1]', 'top');
}
add_action('init', 'create_rewrite_rule', 10, 0);
function get_rewrite_rules(){
// return get_option('rewrite_rules');
global $wp_rewrite;
return $wp_rewrite->rewrite_rules();
}
add_filter('query_vars', 'create_query_vars');
function create_query_vars($vars){
$vars[] = 'get';
$vars[] = 'for';
return $vars;
}
function get_flush_rewrite_rules() {
$rules = $GLOBALS['wp_rewrite']->wp_rewrite_rules();
if (!isset($rules['--(get/(.*)?)'])){ // must be the same rule as in create_rewrite_rule($wp_rewrite)
flush_rewrite_rules();
}
}
add_filter('init', 'get_flush_rewrite_rules');
希望能帮到一些人。
注意:get_flush_rewrite_rules 可能不是必需的。我会看看。一些测试告诉我 add_rewrite_rule 正在这样做。如果我没有忘记,我会做更多的测试并写到这里。