Ограничение использования купонов WooCommerce по разрешенным ролям пользователей - PullRequest
1 голос
/ 30 мая 2020

нам нужно создать автоматический купон на скидку c, который будет применяться, если текущая роль пользователя - (поставщик), мы добились этого, создав обычный купон, а затем использовали приведенный ниже фрагмент, чтобы c автоматически применить купон .. но нам нужно ограничить использование этого купона только ролью пользователя ( 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 Ответ

1 голос
/ 30 мая 2020

Следующий код добавляет новое поле на вкладку ограничения использования, где вы можете добавить разрешенные роли пользователей.

// 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 ) {
    update_post_meta( $post_id, 'customer_user_role', $_POST['customer_user_role'] );
}
add_action( 'woocommerce_coupon_options_save', 'action_woocommerce_coupon_options_save', 10, 2 );

// Valid
function filter_woocommerce_coupon_is_valid( $is_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 ) ) {           
            $is_valid = false;
        }
    }

    return $is_valid;
}
add_filter( 'woocommerce_coupon_is_valid', 'filter_woocommerce_coupon_is_valid', 10, 3 );

enter image description here


РЕДАКТИРОВАТЬ:

Чтобы автоматически применить купон на странице КОРЗИНА и скрыть ссылку на удаление купона (в зависимости от роли пользователя)

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 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...