2017-12-01 14 views
0

私はインターネット上で検索しましたが、無数の人々が質問しているにもかかわらず、どこでも答えがないようです。WooCommerceのすべてのクーポンから商品を除外します

特定の製品をすべてのクーポンから除外する方法はありますか?

TLDR ...私はあなたがクーポンレベルでそれを行うことができますことを理解し、これは多くの人が自動クーポン、クーポンなどを作成し、いくつかの人々を持っている、特にとして、かなり厄介である

製品を作るための任意の方法をすべてのクーポンの商品レベルから除外されています。

+0

このソリューションを試しましたか? https://www.clowcreative.com/post/exclude-products-from-coupon-codes-automatically-at-checkout –

答えて

2

このプロセスを自動化するうえで便利な方法です。

1)製品の一般設定のmetaboxにカスタムチェックボックスを追加して、現在の製品のクーポン機能を無効にします。だから、バックエンドの編集製品ページでこれを取得します:

custom checkbox in product general settings 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のアクティブな子テーマのファイル(またはアクティブテーマ)または任意のプラグインファイルになります。

テスト済みで完全に動作します