wordpress - 处理订单时以编程方式生成 WC 优惠券 - 优惠券代码错误
问题描述
已经检查了这里发布的数十篇文章和问题 - 已经使用了他们每个人的提示 :)
我的目标是在确认付款后生成带有特定产品 ID 的预定义详细信息的优惠券。我希望它是手动生成的。这是我的代码:
这很长,但可以为特定电子邮件地址创建优惠券。
function bp_generate_coupon_for_training_packs( string $email ) {
// check id of user
$user = get_user_by( 'email', $email );
if ( $user ) {
$userid = $user->ID;
}
else {
$userid = 'unknown';
}
// generate random coupon code
$characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$char_length = "15";
$random_string = substr( str_shuffle( $characters ), 0, $char_length );
// today date
$date = date_create();
$today = date_format( $date, "Ymd" );
// coupon name
$coupon_code = $userid . '_treningx4_' . $today . '_' . $random_string;
// set expiry date
$date->add( new DateInterval( 'P30D' ) ); // add 30 days to expiry date
$date_expires = date_timestamp_get( $date );
$expiry_date = date_format( $date, "d.m.Y" ); // correct the format
$schedule_end = date_format( $date, "d.m.Y H:i" ); // here too
// coupon details
$new_coupon = array(
'post_title' => $coupon_code,
'post_content' => '',
'post_status' => 'publish',
'post_author' => 1,
'post_type' => 'shop_coupon'
);
// restrict coupon
$roles = [ "customer", "wpamelia-customer" ];
$restrictions = array_map( 'sanitize_text_field', $roles );
// new coupon creation
$new_coupon_id = wp_insert_post( $new_coupon );
// post meta
update_post_meta( $new_coupon_id, 'discount_type', 'percent' );
update_post_meta( $new_coupon_id, 'coupon_amount', '100' );
update_post_meta( $new_coupon_id, 'individual_use', 'yes' );
update_post_meta( $new_coupon_id, 'product_ids', '2762' );
update_post_meta( $new_coupon_id, 'usage_limit', '4' );
update_post_meta( $new_coupon_id, 'usage_limit_per_user', '0' );
update_post_meta( $new_coupon_id, 'limit_usage_to_x_items', '1' );
update_post_meta( $new_coupon_id, 'usage_count', '0' );
update_post_meta( $new_coupon_id, 'date_expires', $date_expires );
update_post_meta( $new_coupon_id, 'free_shipping', 'no' );
update_post_meta( $new_coupon_id, 'exclude_sale_items', 'no' );
update_post_meta( $new_coupon_id, 'customer_email', $email );
update_post_meta( $new_coupon_id, '_acfw_disable_url_coupon', 'yes' );
update_post_meta( $new_coupon_id, '_acfw_force_apply_url_coupon', 'yes' );
update_post_meta( $new_coupon_id, '_acfw_code_url_override', '' );
update_post_meta( $new_coupon_id, '_acfw_enable_role_restriction', 'yes' );
update_post_meta( $new_coupon_id, '_acfw_role_restrictions_type', 'allowed' );
update_post_meta( $new_coupon_id, '_acfw_role_restrictions_error_msg', 'Nie mozesz skorzystac z tej promocji.' );
update_post_meta( $new_coupon_id, '_acfw_cart_conditions', '' );
update_post_meta( $new_coupon_id, '_acfw_cart_condition_notice', '' );
update_post_meta( $new_coupon_id, '_acfw_role_restrictions', $restrictions );
update_post_meta( $new_coupon_id, '_acfw_bogo_deals', '' );
update_post_meta( $new_coupon_id, '_acfw_success_message', '' );
update_post_meta( $new_coupon_id, '_acfw_after_redirect_url', '' );
update_post_meta( $new_coupon_id, '_acfw_bogo_auto_add_products', '' );
update_post_meta( $new_coupon_id, '_acfw_add_before_conditions', '' );
update_post_meta( $new_coupon_id, '_acfw_add_products_data', '' );
update_post_meta( $new_coupon_id, '_acfw_excluded_coupons', '' );
update_post_meta( $new_coupon_id, '_acfw_shipping_overrides', '' );
update_post_meta( $new_coupon_id, '_acfw_schedule_start', '' );
update_post_meta( $new_coupon_id, '_acfw_schedule_end', $schedule_end );
update_post_meta( $new_coupon_id, '_acfw_schedule_start_error_msg', '' );
update_post_meta( $new_coupon_id, '_acfw_schedule_expire_error_msg', 'Ten pakiet juz wygasl.' );
update_post_meta( $new_coupon_id, '_acfw_apply_notification_message', '' );
update_post_meta( $new_coupon_id, '_acfw_apply_notification_btn_text', '' );
update_post_meta( $new_coupon_id, '_acfw_apply_notification_type', 'info' );
update_post_meta( $new_coupon_id, '_acfw_reset_usage_limit_period', 'none' );
update_post_meta( $new_coupon_id, '_acfw_loyalty_program_user', '' );
update_post_meta( $new_coupon_id, '_acfw_loyalty_program_points', '' );
update_post_meta( $new_coupon_id, '_acfw_cart_condition_display_notice_auto_apply', '' );
update_post_meta( $new_coupon_id, 'expiry_date', $expiry_date );
update_post_meta( $new_coupon_id, '_acfw_usage_limit_reset_time', '' );
// id of coupon category
$cat_id = array( 164 );
$term_id = array_map( 'intval', $cat_id );
$term_id = array_unique( $term_id );
wp_set_post_terms( $new_coupon_id, $term_id, 'shop_coupon_cat' );
}
一旦订单状态更改为处理中(付款后),这将创建一张优惠券:
add_action( 'woocommerce_order_status_completed', 'bp_generate_coupon_after_payment' );
function bp_generate_coupon_after_payment( $order_id ) {
$order = wc_get_order( $order_id );
$email = $order->get_billing_email();
$items = $order->get_items();
foreach ( $items as $item ) {
$product_id = $item[ 'product_id' ];
if ( $product_id == '2804' ) {
bp_generate_coupon_for_training_packs( $email );
}
}
}
使用函数 bp_generate_for_training_packs( 'test@email.pl' ) 创建优惠券时,它工作得很好。但是当在 bp_generate_coupon_after_payment() 中调用函数时,它会创建一个带有代码的优惠券:
order – 4th December, 2020 @ 09:19 pm
并且用户的电子邮件地址不会放入优惠券的 customer_email 字段中。
欢迎任何提示:) 在此先感谢!
解决方案
推荐阅读
- python - 在 Windows 上为 Anaconda 添加 LibreOffice 字典到 Pyenchant
- python-3.x - 在一个 csv 文件中写入数据帧和字符串
- c# - 无法从枚举中获取字符串
- python - 自定义 Matplotlib 子图
- c++ - 为什么 const_casting a heap.top() of priority_queue 有未定义的行为?
- excel - Excel公式从字符串中提取数字和单词组合
- treeview - 在 VB.net 中折叠 Treeview 节点时的问题
- javascript - Discord 添加角色超时
- python - 为什么我在 X 轴上有额外的值,带有条形图?
- javascript - 赛普拉斯无法通过循环选择多选