这是流程:
- 客户将产品添加到购物车。
- 客户在结账时添加优惠券"微笑"。
- 当客户下订单时,该功能将在订单之前运行 将加载详细信息页面。功能将检查"微笑"优惠券,如果 已应用,它会重定向到它们将位于的新页面 免费提供其他产品。如果没有,那么它将继续 照常。
我一直在参考我通过谷歌搜索找到的两个解决方案,类似于我的部分问题。单独地,我让他们工作,但在一起我似乎无法让他们正常工作。
这是我的代码:
add_action( 'woocommerce_thankyou' , 'sq_checkout_custom_redirect' );
function sq_checkout_custom_redirect($order_id) {
global $woocommerce;
$order = new WC_Order( $order_id );
$coupon_id = 'smile';
$applied_coupon = $woocommerce->cart->applied_coupons;
$url = 'https://site.mysite.org/score-you-win/';
if( $applied_coupon[0] === $coupon_id ) {
echo "<script type="text/javascript">window.location.replace('".$url."');</script>";
} else {
echo '<h3 style="font-size:200px; z-index:30000; color:#000 !important;">Coupon not applied</h3>';
}
}
无论我应用什么优惠券,我都会收到消息"优惠券未应用",并且不会发生重定向。
我引用的两个解决方案是:
在购物车中查找已应用coupon_id
使用 JS 重定向
此代码成功运行:
add_action( 'woocommerce_thankyou', function ($order_id){
$order = new WC_Order( $order_id );
$coupon_id = "smile";
$url = 'https://site.mysite.org/score-you-win/';
if ($order->status != 'failed') {
echo "<script type="text/javascript">window.location.replace('".$url."');</script>";
}
});
并且成功运行:
function product_checkout_custom_content() {
global $woocommerce;
$coupon_id = 'smile';
$applied_coupon = $woocommerce->cart->applied_coupons;
if( $applied_coupon[0] === $coupon_id ) {
echo '<span style="font-size:200px; z-index:30000; color:#red !important;">We are happy you bought this product =)</span> ';
} else {
echo '<h3 style="font-size:200px; z-index:30000; color:#000 !important;">Coupon not applied</h3>';
}
}
add_action( 'woocommerce_thankyou' , 'sq_checkout_custom_redirect' );
更新:在woocommerce的"订单已收到"页面(谢谢(中,没有更多的WC_Cart
对象可用。相反,您需要以这种方式定位WC_Order
对象:
add_action( 'woocommerce_thankyou', 'thankyou_custom_redirect', 20, 1 );
function thankyou_custom_redirect( $order_id ) {
// Your settings below:
$coupon_id = 'smile';
$url = 'https://site.mysite.org/score-you-win/';
// Get an instance of the WC_order object
$order = wc_get_order($order_id);
$found = false;
// Loop through the order coupon items
foreach( $order->get_items('coupon') as $coupon_item ){
if( $coupon_item->get_code() == strtolower($coupon_id) ){
$found = true; // Coupon is found
break; // We stop the loop
}
}
if( $found )
echo "<script type="text/javascript">window.location.replace('".$url."');</script>";
else
echo '<h3 style="font-size:200px; z-index:30000; color:#000 !important;">Coupon not applied</h3>';
}
代码进入函数.php活动子主题(或活动主题(的文件。经过测试并工作。