Создайте купон только для одного пользователя, используя user_id в WooCommerce - PullRequest
1 голос
/ 03 мая 2020

Допустим, я использую этот код для создания купона:

$coupon_code = 'CODEOFF';
$amount = '10';
$discount_type = 'percent';

$coupon = array(
    'post_title' => $coupon_code,
    'post_status' => 'publish',
    'post_author' => 1,
    'post_type'     => 'shop_coupon'
);

$new_coupon_id = wp_insert_post( $coupon );

update_post_meta( $new_coupon_id, 'discount_type', $discount_type );
update_post_meta( $new_coupon_id, 'coupon_amount', $amount );
update_post_meta( $new_coupon_id, 'individual_use', 'yes' );
update_post_meta( $new_coupon_id, 'product_ids', $some_id );
update_post_meta( $new_coupon_id, 'usage_limit', '1' );
update_post_meta( $new_coupon_id, 'expiry_date', $some_date );

Теперь я хочу ограничить этот код только для одного пользователя.

Существует возможность использовать update_post_meta( $new_coupon_id, 'customer_email', '' );, но мои пользователи не имеют электронных писем.

Как я могу ограничить этот купон для пользователя, использующего идентификатор этого пользователя?

Ответы [ 2 ]

2 голосов
/ 03 мая 2020

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

// 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_id',  
        'label' => __( 'User ID restrictions', 'woocommerce' ),  
        'placeholder' => __( 'No restrictions', 'woocommerce' ),  
        'description' => __( 'List of allowed user IDs. Separate user IDs 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_id', $_POST['customer_user_id'] );
}
add_action( 'woocommerce_coupon_options_save', 'action_woocommerce_coupon_options_save', 10, 2 );

enter image description here


Так что в вашем случае вы можете использовать это вместе с кодом подтверждения

$user_ids = "1, 2, 3";
update_post_meta( $new_coupon_id, 'customer_user_id', $user_ids );
// Valid
function filter_woocommerce_coupon_is_valid( $is_valid, $coupon, $discount ) {
    // Get meta
    $customer_user_id = $coupon->get_meta('customer_user_id');


    if( !empty( $customer_user_id ) ) {
        // Convert string to array
        $customer_user_id = explode(', ', $customer_user_id);

        // Get current user id
        $user_id = get_current_user_id();

        if ( ! in_array( $user_id, $customer_user_id ) ) {
            $is_valid = false;
        }
    }

    return $is_valid;
}
add_filter( 'woocommerce_coupon_is_valid', 'filter_woocommerce_coupon_is_valid', 10, 3 );
1 голос
/ 03 мая 2020

Не существует прямого способа ограничения купонов по идентификатору пользователя. Но есть обходной путь, добавляя идентификатор пользователя с метаданными купона.

$user_id = get_current_user_id();
update_post_meta( $new_coupon_id, 'couponuserid', $user_id );

и проверяя курицу, применяющую купон.

add_filter( 'woocommerce_coupon_is_valid', function( $is_valid, $coupon ) {

    /**
     * Selected coupons allowed only for selected User IDs
     */
    $is_userid_coupon = get_post_meta( $coupon->get_id(), 'couponuserid', true );
    if ( isset( $is_userid_coupon ) ) {
        $user = wp_get_current_user();
        if ( $user->ID && $user->ID == get_post_meta( $coupon->get_id(), 'couponuserid', true ) ) {
            return true;
        }
    }

    return $is_valid;
}, 100, 2 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...