从 WooCommerce 中的所有优惠券中排除产品 [英] Exclude product from all coupons in WooCommerce

查看:59
本文介绍了从 WooCommerce 中的所有优惠券中排除产品的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经在互联网上搜索了所有内容,但尽管有无数人问这个问题,但似乎在任何地方都没有任何答案.

I have searched all over the internet, but it doesn't seem to be any answer anywhere in spite of countless people asking the question.

有没有办法从所有优惠券中排除特定产品?

Is there any way to exclude a specific product from ALL coupons?

我知道你可以在优惠券级别上做到这一点,但这相当混乱,尤其是因为很多人都有自动优惠券,几个人创建优惠券等......

I understand that you can do it on coupon level, but this is rather messy especially as a lot of people have automatic coupons, several people creating coupons etc…

TLDR:任何使产品从所有优惠券中在产品级别排除的方法.

TLDR: Any way to make a product excluded from all coupons at Product level.

推荐答案

这是自动化此过程的好方法.

Here is a nice way to automate this process.

1) 我们在产品常规设置元框中添加了一个自定义复选框,以禁用当前产品的优惠券功能.因此,您将在后端编辑产品页面中获得此信息:

1) We add a custom checkbox in product general settings metabox to disable the coupon functionality for the current product. So you will get this in Backend Edit Product pages:

所有选中的产品将保存在一个数组中,并将用于以下...

All selected products will be saved in an array and will be used in the following…

2) 此选定产品将被排除在产品级别的优惠券折扣之外,产品折扣金额将设置为零.

2) This selected products will be excluded from coupon discount at product level and the product discount amount will be set to zero.

代码:

// 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',
        'label'     => __('Disabled for coupons', 'woocommerce'),
        'description' => __('Disable this products from coupon discounts', '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 文件或任何插件文件中.

经过测试并完美运行

这篇关于从 WooCommerce 中的所有优惠券中排除产品的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆