为了账号安全,请及时绑定邮箱和手机立即绑定

允许的用户角色限制 WooCommerce 优惠券使用

允许的用户角色限制 WooCommerce 优惠券使用

PHP
幕布斯7119047 2023-04-21 16:53:51
如果当前用户角色是 ( vendor ),我们需要制作一个自动折扣优惠券,我们通过创建普通优惠券然后使用下面的代码片段自动应用优惠券来实现这一点。但我们需要限制它的使用仅限用户角色(供应商)的优惠券..如果另一个用户角色甚至管理员使用它,他们会收到一条消息无效的优惠券    add_action( 'woocommerce_before_cart', 'apply_matched_coupons' );function apply_matched_coupons() {    global $woocommerce;    $coupon_code = 'freeee'; // coupon code    if ( $woocommerce->cart->has_discount( $coupon_code ) ) return;if ( current_user_can('yith_vendor') ) {        $woocommerce->cart->add_discount( $coupon_code );        wc_print_notices();    }}我们现在需要实现的是将优惠券的使用仅限于用户角色(供应商),如果另一个用户角色甚至管理员尝试使用它,他们会收到一条消息无效的优惠券。
查看完整描述

1 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

以下代码将一个新字段添加到使用限制选项卡,您可以在其中添加允许的用户角色。


// Add new field - usage restriction tab

function action_woocommerce_coupon_options_usage_restriction( $coupon_get_id, $coupon ) {

    woocommerce_wp_text_input( array( 

        'id' => 'customer_user_role',  

        'label' => __( 'User role restrictions', 'woocommerce' ),  

        'placeholder' => __( 'No restrictions', 'woocommerce' ),  

        'description' => __( 'List of allowed user roles. Separate user roles with commas.', 'woocommerce' ),  

        'desc_tip' => true,  

        'type' => 'text',  

    )); 

}

add_action( 'woocommerce_coupon_options_usage_restriction', 'action_woocommerce_coupon_options_usage_restriction', 10, 2 );


// Save

function action_woocommerce_coupon_options_save( $post_id, $coupon ) {

    // Isset

    if ( isset ( $_POST['customer_user_role'] ) ) {

        $coupon->update_meta_data( 'customer_user_role', sanitize_text_field( $_POST['customer_user_role'] ) );

        $coupon->save();

    }

}

add_action( 'woocommerce_coupon_options_save', 'action_woocommerce_coupon_options_save', 10, 2 );


// Valid

function filter_woocommerce_coupon_is_valid( $valid, $coupon, $discount ) {

    // Get meta

    $customer_user_role = $coupon->get_meta('customer_user_role');


    // NOT empty

    if( ! empty( $customer_user_role ) ) {

        // Convert string to array

        $customer_user_role = explode( ', ', $customer_user_role );


        // Get current user role

        $user = wp_get_current_user();

        $roles = ( array ) $user->roles;


        // Compare

        $compare = array_diff( $roles, $customer_user_role );


        // NOT empty

        if ( ! empty ( $compare ) ) {           

            $valid = false;

            

            if ( ! $valid ) {

                throw new Exception( __( 'My custom error message', 'woocommerce' ), 109 );

            }

        }

    }


    return $valid;

}

add_filter( 'woocommerce_coupon_is_valid', 'filter_woocommerce_coupon_is_valid', 10, 3 );

//img1.sycdn.imooc.com//64424f5800013c5806570387.jpg

编辑:


在CART页面自动应用优惠券并隐藏删除优惠券链接(基于用户角色)


function action_woocommerce_before_calculate_totals( $cart ) {

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )

        return;

    

   if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )

        return;

    

    // Only cart

    if( ! is_cart() )

        return;

    

    /* SETTINGS */

    

    // Coupon code

    $coupon_code = 'test';

    

    // Allowed user role

    $allowed_user_role = 'administrator';

    

    /* END SETTINGS */

    

    // check current user role

    $user = wp_get_current_user();

    $user_roles = ( array ) $user->roles;

    

    // ADD js

    $add_js = false;


    // In array user roles

    if ( in_array( $allowed_user_role, $user_roles ) ) {        

        // Format

        $coupon_code = wc_format_coupon_code( $coupon_code );


        // Applied coupons

        $applied_coupons = $cart->get_applied_coupons();


        // Is applied

        $is_applied = in_array( $coupon_code, $applied_coupons );


        // NOT applied

        if ( ! $is_applied ) {

            // Apply

            $cart->apply_coupon( $coupon_code );

            

            // True

            $add_js = true;

        } elseif ( $is_applied ) {

            // True

            $add_js = true;

        }

        

        // True

        if ( $add_js ) {

            ?>

            <script type="text/javascript">

            jQuery( function($) {               

                // Hide remove link

                $( '.woocommerce-remove-coupon' ).hide();

            });

            </script>

            <?php

        }

    }

}

add_action( 'woocommerce_before_calculate_totals', 'action_woocommerce_before_calculate_totals', 10, 1 );



查看完整回答
反对 回复 2023-04-21
  • 1 回答
  • 0 关注
  • 126 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信