このプロセスを自動化するうえで便利な方法です。
1)製品の一般設定のmetaboxにカスタムチェックボックスを追加して、現在の製品のクーポン機能を無効にします。だから、バックエンドの編集製品ページでこれを取得します:
選択したすべての製品は、アレイに保存され、次のように使用されます...
2)この選択された製品が対象から除外されます製品レベルでのクーポン割引、製品割引額はゼロに設定されます。
コード:
// Create and display the custom field in product general setting tab
add_action('woocommerce_product_options_general_product_data', 'add_custom_field_general_product_fields');
function add_custom_field_general_product_fields(){
global $post;
echo '<div class="product_custom_field">';
// Custom Product Checkbox Field
woocommerce_wp_checkbox(array(
'id' => '_disabled_for_coupons',
'desc' => __('Disable this products from coupon discounts', 'woocommerce'),
'label' => __('Disabled for coupons', 'woocommerce'),
'desc_tip' => 'true',
));
echo '</div>';;
}
// Save the custom field and update all excluded product Ids in option WP settings
add_action('woocommerce_process_product_meta', 'save_custom_field_general_product_fields', 10, 1);
function save_custom_field_general_product_fields($post_id){
$current_disabled = isset($_POST['_disabled_for_coupons']) ? 'yes' : 'no';
$disabled_products = get_option('_products_disabled_for_coupons');
if(empty($disabled_products)) {
if($current_disabled == 'yes')
$disabled_products = array($post_id);
} else {
if($current_disabled == 'yes') {
$disabled_products[] = $post_id;
$disabled_products = array_unique($disabled_products);
} else {
if (($key = array_search($post_id, $disabled_products)) !== false)
unset($disabled_products[$key]);
}
}
update_post_meta($post_id, '_disabled_for_coupons', $current_disabled);
update_option('_products_disabled_for_coupons', $disabled_products);
}
// Make coupons invalid at product level
add_filter('woocommerce_coupon_is_valid_for_product', 'set_coupon_validity_for_excluded_products', 12, 4);
function set_coupon_validity_for_excluded_products($valid, $product, $coupon, $values){
if(! count(get_option('_products_disabled_for_coupons')) > 0) return $valid;
$disabled_products = get_option('_products_disabled_for_coupons');
if(in_array($product->get_id(), $disabled_products))
$valid = false;
return $valid;
}
// Set the product discount amount to zero
add_filter('woocommerce_coupon_get_discount_amount', 'zero_discount_for_excluded_products', 12, 5);
function zero_discount_for_excluded_products($discount, $discounting_amount, $cart_item, $single, $coupon){
if(! count(get_option('_products_disabled_for_coupons')) > 0) return $discount;
$disabled_products = get_option('_products_disabled_for_coupons');
if(in_array($cart_item['product_id'], $disabled_products))
$discount = 0;
return $discount;
}
コードがfunction.phpのアクティブな子テーマのファイル(またはアクティブテーマ)または任意のプラグインファイルになります。
テスト済みで完全に動作します
このソリューションを試しましたか? https://www.clowcreative.com/post/exclude-products-from-coupon-codes-automatically-at-checkout –