如何更改WooCommerce中特定变体的添加到购物车文本?

时间:2017-10-18 14:02:28

标签: woocommerce

在我的WooCommerce商店中,我有简单的产品和可变产品,简单的产品和变体都有一个元值为' pre_order'是/否。

如果在后端设置了此选项,我想让“添加到购物车”按钮说明“预订'而不是'添加到购物车'。

对于简单的产品,我没有使用过滤器或编辑文件模板来改变这个问题,但变化似乎更棘手......

当选择变体选项然后价格和sku更新时,在此过程中我还想检查上面提到的元值,如果该变体具有元值预先排序'是'那么我也想改变按钮文字,但我找不到办法呢!

2 个答案:

答案 0 :(得分:0)

WooCommerce提供名为variation_id的隐藏输入字段。变体更改后,更新的变体ID将保存在此隐藏的输入字段中。因此,首先你必须在更新此输入字段的值时使用jQuery进行检测,当检测到触发您自己的ajax请求并检查是否为预订分配了此变体,如果是,现在您可以更改添加到购物车的文本ajax的反应是成功的。

答案 1 :(得分:0)

WooCommerce将变体详细信息(如价格,尺寸,重量等)存储在data-product_variations元素中名为.variations_form的数据属性中。此数据用于显示用户选择特定变体时的价格和其他详细信息。您可以使用过滤器woocommerce_available_variation在此数据属性中添加元值,例如:

add_filter('woocommerce_available_variation', 'vna_add_variation_meta');
function vna_add_variation_meta($dataattr, $product, $variation) {
    $dataattr['pre_order'] = get_post_meta($variation->get_id(), 'pre_order', true);
    return $dataattr;
}

您可以在woocommerce_available_variation文件中找到有关class-wc-product-variable.php的更多详细信息。

在DOM元素中获得元值后,您可以使用以下事件来了解用户何时选择了变体。

$( ".single_variation_wrap" ).on( "show_variation", function ( event, variation ) {
    // Fired when the user selects all the required dropdowns / attributes
    // and a final variation is selected / shown
    // Here you will need to get the value of 'pre_order' from the variation object
    // something like: variation.pre_order
    // and take appropriate action
} );

请注意:代码未经测试,因此可能存在拼写错误;)