每位客户从网站上购买产品时,我都会为他们动态生成优惠券代码,并且我已经设置了某些条件。
当我动态创建了优惠券代码后,它存储在woocommerce>优惠券部分中。
function couponCodeGeneration($order_id, $i){
// Get the order ID
$coupon_code = $order_id."".$i; // Coupon Code
$amount = '100%'; // Amount
$discount_type = 'percent'; // Type: fixed_cart, percent, fixed_product, percent_product
wp_coupon_exist( $coupon_code );
if( wp_coupon_exist( $coupon_code ) ) {
//coupon code exists.
} else {
//coupon code not exists, so inserting coupon code
$coupon = array(
'post_title' => $coupon_code,
'post_content' => '',
'post_status' => 'publish',
'post_author' => 1,
'post_type' => 'shop_coupon'
//'post_category' => array(1)
);
$new_coupon_id = wp_insert_post( $coupon );
//SET THE PRODUCT CATEGORIES
wp_set_object_terms($post_id, 'Holiday Season offers', 'product_cat');
// Add meta
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', '' );
update_post_meta( $new_coupon_id, 'exclude_product_ids', '' );
update_post_meta( $new_coupon_id, 'usage_limit', '1' );
update_post_meta( $new_coupon_id, 'expiry_date', '2019-07-31' );
update_post_meta( $new_coupon_id, 'apply_before_tax', 'yes' );
update_post_meta( $new_coupon_id, 'free_shipping', 'no' );
update_post_meta( $new_coupon_id, 'limit_usage_to_x_items', '1' );
update_post_meta( $new_coupon_id, 'usage_limit_per_user', '1' );
update_post_meta( $post_id, 'times', '1' );
echo '<div class="couponCode"><strong>Your Coupon Code for your next purchase - '.$coupon_code.'</strong><hr></div>';
}
}
在以下情况下我需要帮助。
生成的优惠券代码不应由其他客户使用。优惠券仅对该客户私人。优惠券代码无法转移。
客户下订单时,生成的优惠券代码未存储在管理订单页面中。我怎么知道哪个顾客产生了哪个优惠券代码。
有人可以给我建议吗
答案 0 :(得分:2)
自Woocommerce 3以来,您的代码确实过时了,并且有很多错误。 wp_coupon_exist()
功能不存在。
要将优惠券限于特定客户,可以使用Email restrictions
WC_Coupon
方法,该方法还可以让您知道哪个客户生成了优惠券代码。 >
如果需要,还可以设置一些自定义元数据,以保存用户ID或用户完整名称。
所以我的代码中有两个函数:
代码:
// Utility function that check if coupon exist
function does_coupon_exist( $coupon_code ) {
global $wpdb;
$value = $wpdb->get_var( "
SELECT ID
FROM {$wpdb->prefix}posts
WHERE post_type = 'shop_coupon'
AND post_name = '".strtolower($coupon_code)."'
AND post_status = 'publish';
");
return $value > 0 ? true : false;
}
function coupon_code_generation( $order_id, $i ){
$coupon_code = $order_id."".$i; // Coupon Code
// Check that coupon code not exists
if( ! does_coupon_exist( $coupon_code ) ) {
// Get a new instance of the WC_Coupon object
$coupon = new WC_Coupon();
// Get the instance of the WC_Order object
$order = wc_get_order( $order_id );
## --- Coupon settings --- ##
$discount_type = 'percent'; // Type
$coupon_amount = '100'; // Amount
$customer_email = array( $order->get_billing_email() ); // Customer billing email
$product_categories_names = array('Holiday Season offers');
$date_expires = '2019-07-31';
// Convert to term IDs
$term_ids = array();
foreach( $product_categories_names as $term_name ) {
if ( term_exists( $term_name, 'product_cat' ) )
$term_ids[] = get_term_by( 'name', $term_name, 'product_cat' )->term_id;
}
## --- Coupon settings --- ##
// Set the necessary coupon data
$coupon->set_code( $coupon_code );
$coupon->set_discount_type( 'percent' );
$coupon->set_amount( 100 );
if( is_array($term_ids) && sizeof($term_ids) > 0 )
$coupon->set_product_categories( $term_ids );
$coupon->set_email_restrictions( $customer_email );
$coupon->set_individual_use( true );
$coupon->set_usage_limit( 1 );
$coupon->set_usage_limit_per_user( 1 );
$coupon->set_limit_usage_to_x_items( 1 );
$coupon->set_date_expires( date( "Y-m-d H:i:s", strtotime($date_expires) ) );
// Save the data
$post_id = $coupon->save();
}
echo isset($post_id) && $post_id > 0 ? sprintf(
'<div class="couponCode"><strong>%s <code>%s</code></strong>.<hr></div>',
__("Your Coupon Code for your next purchase is", "woocommerce"), $coupon_code
) : __("Sorry, a coupon code already exist.", "woocommerce");
}
代码进入您的活动子主题(或活动主题)的function.php文件中。经过测试并可以正常工作。
您将得到类似的输出(生成优惠券时):
您下次购买的优惠券代码为
1198A
或者如果存在优惠券:
对不起,优惠券代码已经存在。
答案 1 :(得分:-1)
我已经解决了问题。
在functions.php中添加以下代码
add_filter( 'woocommerce_coupon_is_valid', 'wc_riotxoa_coupon_is_valid', 20, 2 );
if ( ! function_exists( 'wc_riotxoa_coupon_is_valid' ) ) {
function wc_riotxoa_coupon_is_valid( $result, $coupon ) {
$user = wp_get_current_user();
$restricted_emails = $coupon->get_email_restrictions();
return ( in_array( $user->user_email, $restricted_emails ) ? $result : false );
}
}
参考:https://gist.github.com/riotxoa/f4f1a895052c195394ba4841085a0e83