我正在尝试将手机型号属性的产品变体url重写为以下url:
index.php?product=example&attribute_pa_model=iphone-x
当我直接在浏览器中打开它时,它就会工作。因此,我希望的原始url是:
/product/example/iphone-x
我尝试了下面的代码,但它不起作用。
function add_model_taxonomy_args($args) {
$args[\'query_var\'] = \'attribute_pa_model\';
return $args;
}
add_filter(\'woocommerce_taxonomy_args_pa_model\', \'add_model_taxonomy_args\' );
function custom_rewrite_rules() {
add_rewrite_tag(\'%attribute_pa_model%\', \'([a-zA-Z0-9-]+)\');
add_rewrite_rule(\'^product/(.+?)/(.+?)/?$\', \'index.php?product=$matches[1]&attribute_pa_model=$matches[2]\', \'top\');
}
最合适的回答,由SO网友:Sally CJ 整理而成
这是因为在这个URL上,$_REQUEST[\'attribute_pa_model\']
设置,在此示例中,值为iphone-x
:
index.php?product=example&attribute_pa_model=iphone-x
但在这个URL上,
$_REQUEST[\'attribute_pa_model\']
未设置,因此产品变体的自动选择不起作用:
/product/example/iphone-x
因此,在该URL上,您可以使用
woocommerce_dropdown_variation_attribute_options_args
要过滤选定的值,请执行以下操作:
add_filter( \'woocommerce_dropdown_variation_attribute_options_args\', \'auto_select_attribute_pa_model\' );
function auto_select_attribute_pa_model( $args ) {
// If it\'s not the pa_model taxonomy, don\'t filter the $args.
if ( empty( $args[\'selected\'] ) && \'pa_model\' === $args[\'attribute\'] ) {
$args[\'selected\'] = get_query_var( \'attribute_pa_model\' );
}
return $args;
}
附加说明在我的测试中,这不是必需的,可以删除:
add_filter(\'woocommerce_taxonomy_args_pa_model\', \'add_model_taxonomy_args\' );