在我的WooCommerce商店中,我有简单的产品和可变产品,简单的产品和变体都有一个元值为' pre_order'是/否。
如果在后端设置了此选项,我想让“添加到购物车”按钮说明“预订'而不是'添加到购物车'。
对于简单的产品,我没有使用过滤器或编辑文件模板来改变这个问题,但变化似乎更棘手......
当选择变体选项然后价格和sku更新时,在此过程中我还想检查上面提到的元值,如果该变体具有元值预先排序'是'那么我也想改变按钮文字,但我找不到办法呢!
答案 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
} );
请注意:代码未经测试,因此可能存在拼写错误;)