通过允许的用户 ID 对 WooCommerce 优惠券添加限制
Add restriction to WooCommerce coupons by allowed user ID
假设我正在使用此代码创建优惠券:
$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', '' );
,但我的用户没有电子邮件。
如何将此优惠券限制为使用该用户 ID 的用户?
要保持动态,您可以使用以下代码向使用限制选项卡添加新字段:
// 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 ) {
// Isset
if ( isset ( $_POST['customer_user_id'] ) ) {
$coupon->update_meta_data( 'customer_user_id', sanitize_text_field( $_POST['customer_user_id'] ) );
$coupon->save();
}
}
add_action( 'woocommerce_coupon_options_save', 'action_woocommerce_coupon_options_save', 10, 2 );
您可以在其中输入用户 ID,以逗号分隔。 (见附图)
连同此优惠券验证代码:
// Valid
function filter_woocommerce_coupon_is_valid( $valid, $coupon, $discount ) {
// Get meta
$customer_user_id = $coupon->get_meta( 'customer_user_id' );
// NOT empty
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 ) ) {
$valid = false;
if ( ! $valid ) {
throw new Exception( __( 'My error message', 'woocommerce' ), 109 );
}
}
}
return $valid;
}
add_filter( 'woocommerce_coupon_is_valid', 'filter_woocommerce_coupon_is_valid', 10, 3 );
没有直接通过用户 ID 限制优惠券的方法。但是有一个解决方法,即添加带有优惠券元数据的用户 ID。
$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 );
假设我正在使用此代码创建优惠券:
$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', '' );
,但我的用户没有电子邮件。
如何将此优惠券限制为使用该用户 ID 的用户?
要保持动态,您可以使用以下代码向使用限制选项卡添加新字段:
// 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 ) {
// Isset
if ( isset ( $_POST['customer_user_id'] ) ) {
$coupon->update_meta_data( 'customer_user_id', sanitize_text_field( $_POST['customer_user_id'] ) );
$coupon->save();
}
}
add_action( 'woocommerce_coupon_options_save', 'action_woocommerce_coupon_options_save', 10, 2 );
您可以在其中输入用户 ID,以逗号分隔。 (见附图)
连同此优惠券验证代码:
// Valid
function filter_woocommerce_coupon_is_valid( $valid, $coupon, $discount ) {
// Get meta
$customer_user_id = $coupon->get_meta( 'customer_user_id' );
// NOT empty
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 ) ) {
$valid = false;
if ( ! $valid ) {
throw new Exception( __( 'My error message', 'woocommerce' ), 109 );
}
}
}
return $valid;
}
add_filter( 'woocommerce_coupon_is_valid', 'filter_woocommerce_coupon_is_valid', 10, 3 );
没有直接通过用户 ID 限制优惠券的方法。但是有一个解决方法,即添加带有优惠券元数据的用户 ID。
$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 );