在Woocommerce中,我想添加一个特定数量的添加到购物车按钮。
答案“ additional add to cart button with fixed quantity in woocommerce single product pages” 主要不是,我只需要为任何产品类型的特定产品启用该代码。
这可能吗?我必须改变什么...
答案 0 :(得分:1)
要处理(可变产品上的)产品变体,它要复杂得多,并且需要添加一些JavaScript / jQuery代码。
我在自定义条件函数中将产品设置限制与主要功能分开,您可以选择以下两种方式:
1)您可以使用产品ID限制:
// PRODUCT IDs based ::: Conditional function
function enable_additional_add_to_cart_button( $product_id ) {
// HERE define your Product Ids in the array
$product_ids = array(37, 40, 53);
return in_array( $product_ids, $product_id ) ? true : false;
}
2)或者您可以使用产品类别限制:
// PRODUCT CATEGORY based ::: Conditional function
function enable_additional_add_to_cart_button( $product_id ) {
// HERE define your Product Category terms in the array (can be term Ids, names or slugs)
$terms = array('t-shirts', 'socks', 'glasses');
return has_term( $terms, 'product_cat', $product_id ) ? true : false;
}
现在下面是主要功能,它将显示一个附加的“添加到购物车”按钮,并且可以与上面的条件功能之一一起使用。
// Additional add to cart button with fixed bulk quantity
add_action( 'woocommerce_after_add_to_cart_button', 'additional_add_to_cart_button', 20 );
function additional_add_to_cart_button() {
global $product;
if( ! enable_additional_add_to_cart_button( $product->get_id() ) ) return;
$qty = 12;
$href = '?add-to-cart=' . esc_attr( $product->get_id() ) . '&quantity='.$qty;
$class = 'single_add_to_cart_button-12 button alt';
$style = 'display: inline-block; margin-top: 12px;';
$btn_txt = __( "Add a case of 12", "woocommerce" );
## ---------------------- For non variable products ----------------------- ##
if( ! $product->is_type('variable') ) :
// Output
echo '<br><a href"'.$href.'"= rel="no-follow" class="'.$class.'" style="'.$style.'">'.$btn_txt.'</a>';
## ---------- For variable products (handling product variations) --------- ##
else :
// Output
echo '<br><a rel="no-follow" class="'.$class.'" style="'.$style.'">'.$btn_txt.'</a>';
$data = array();
// Loop through available variations data
foreach( $product->get_available_variations() as $variation_data ){
if( $variation_data['is_in_stock'] && $variation_data['is_purchasable'] ) {
$variation_id = $variation_data['variation_id'];
$attributes_str = '';
// Loop through variation attributes
foreach ( $variation_data['attributes'] as $attribute_taxonomy => $term_slug ) {
$attributes_str .= '&'.$attribute_taxonomy.'='.$term_slug;
}
// Set product attributes pairs for variations
$data[$variation_id] = $href . '&variation_id=' . $variation_id . $attributes_str;
}
}
?>
<script type="text/javascript">
jQuery(function($){
var a = <?php echo json_encode($data); ?>, b = '.single_add_to_cart_button-12',
c = 'wc-variation-selection-needed', d = 'disabled',
f = 'form.variations_form', h = $(c).attr('href'),
s = '.variations select', i = 'input.variation_id';
// On show and hide variation event
$(f).on('show_variation', function() {
var found = false;
$.each(a, function(j,k){
if( $(i).val() == j ) {
found = true;
if( $(b).hasClass(c) && $(b).hasClass(d) )
$(b).removeClass(c).removeClass(d).attr('href',k);
}
});
if( ! found && ! ( $(b).hasClass(c) && $(b).hasClass(d) ) )
$(b).addClass(c).addClass(d).removeAttr("href");
}).on('hide_variation', function() {
if( ! ( $(b).hasClass(c) && $(b).hasClass(d) ) )
$(b).addClass(c).addClass(d).removeAttr("href");
});
});
</script>
<?php
endif;
}
代码进入您的活动子主题(或活动主题)的function.php文件中。经过测试,可以正常工作。
答案 1 :(得分:0)
您可以使用WC_prroduct->get_id()函数
检查产品ID。//仅适用于ID为16的产品 if($ product-> get_id()!= 16)return;
$href = '?add-to-cart=' . esc_attr( $product->get_id() ) . '&quantity=12';
$class = 'ingle_add_to_cart_button-12 button alt';
$style = 'display: inline-block; margin-top: 12px;';
$button_text = __( "Add a case of 12", "woocommerce" );
// Output
echo '<br><a rel="no-follow" href="'.$href.'" class="'.$class.'" style="'.$style.'">'.$button_text.'</a>';
答案 2 :(得分:0)
感谢您的所有澄清。 我将只有一种产品类型,但是有些产品需要添加到购物车中,以供6瓶装,还有一些需要12瓶装。 我想考虑是否可以在产品页面中选择一个选项,例如例如自定义字段wine-box,我可以在其中填写6或12,并且可以显示为额外的添加到购物车按钮(添加6文本的情况或添加12文本的情况)。 谢谢