What I need
为了进行产品页面变化测试,我正在尝试将我的产品页面url重写为如下内容:
www.website.com/products/product-x/variation/1/
What I have done
我添加了查询变量,如下所示:
/**
* Adds variation query var
*/
function gtp_add_variation_query_vars( $vars ) {
$vars[] = \'variation\';
return $vars;
}
add_filter( \'query_vars\', \'gtp_add_variation_query_vars\');
我已经迷上了
generate_rewrite_rules
, 要添加新的重写规则,请执行以下操作:
/**
* Adds rewrite rule for template variation paramater
*/
function gtp_add_variation_rewrite_rules() {
global $wp_rewrite;
// Rewrite rule with (v)ariation parameter
$new_rules[\'products/(.+?)/variation/([0-9]*)/?$\'] = \'index.php?post_type=products&products=\' . $wp_rewrite->preg_index( 1 ) . \'&variation=\' . $wp_rewrite->preg_index( 2 );
// Add new rewrite rules to rewrite rules array
$wp_rewrite->rules = $wp_rewrite->rules + $new_rules;
return $wp_rewrite->rules;
}
add_action( \'generate_rewrite_rules\', \'gtp_add_variation_rewrite_rules\' );
刷新重写规则时,在
$wp_rewrite->rules
已添加阵列:
[products/(.+?)/variation/([0-9]*)/?$] => index.php?post_type=products&products=$matches[1]&variation=$matches[2]
The problem
但当我访问该页面时:
www.website.com/products/product-x/variation/1/
我有一个404。
奇怪的是,它可以在我的XAMPP本地主机副本上运行,但不能在实时站点上运行。这可能是与服务器相关的问题吗?或者另一个重写规则(但我认为这应该不是问题,因为该规则位于重写规则数组的底部)
Extra information:
我已将永久链接结构(在设置->永久链接下)设置为自定义结构
"/%category%/%postname%/"
.
我的htaccess文件如下所示:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
最合适的回答,由SO网友:bswatson 整理而成
重写规则是正确的,但因为您正在修改$wp_rewrite
直接来说,您无法使用将规则添加到堆栈顶部add_rewrite_rules
.
规则在数组中的位置正确,但首先检查顶部的规则,然后使用第一个要匹配的规则。
用下面的代码替换这两个函数应该可以处理query\\u var和重写规则+定位。
/**
* Adds rewrite rule for template variation paramater
*/
function gtp_add_variation_rewrite_rules() {
add_rewrite_tag( \'%variation%\', \'([0-9]*)\' );
add_rewrite_rule( \'products/(.+?)/variation/([0-9]*)/?$\', \'index.php?post_type=products&products=$matches[1]&variation=$matches[2]\', \'top\' );
}
add_action( \'init\', \'gtp_add_variation_rewrite_rules\' );