产品变化的自定义重写不起作用

时间:2018-08-31 作者:Ilian Andreev

我正在尝试将手机型号属性的产品变体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\');
}

1 个回复
最合适的回答,由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\' );

结束

相关推荐