【问题标题】:Check for new customers in WooCommerce Order received (Thankyou) page在 WooCommerce 收到的订单(谢谢)页面中检查新客户
【发布时间】:2019-12-29 19:25:53
【问题描述】:

我正在尝试在Thankyou 页面中向所有新客户(非回头客)显示自定义消息,并且我正在使用 "Checking if customer has already bought something in WooCommerce" 应答代码。

问题是无法检测到客户之前是否购买过。例如,如果我在感谢页面中使用当前代码,新客户将成为老客户。

所以我的问题是:我如何检查客户是否早先购买了不在当前订单中的任何产品?

这是我的代码尝试,它不能正常工作:

function has_bought_before( $user_id = 0 ) {
    global $wpdb;
    $customer_id = $user_id == 0 ? get_current_user_id() : $user_id;
    $paid_order_statuses = array_map( 'esc_sql', wc_get_is_paid_statuses() );

    $results = $wpdb->get_col( "
        SELECT p.ID FROM {$wpdb->prefix}posts AS p
        INNER JOIN {$wpdb->prefix}postmeta AS pm ON p.ID = pm.post_id
        WHERE p.post_status IN ( 'wc-" . implode( "','wc-", $paid_order_statuses ) . "' )
        AND p.post_type LIKE 'shop_order'
        AND pm.meta_key = '_customer_user'
        AND pm.meta_value = $customer_id
    " );

    // Count number of orders and return a boolean value depending if higher than 0
    return count( $results ) > 0 ? true : false;
}



add_filter('woocommerce_thankyou_order_received_text', 'woo_change_order_received_text', 10, 2 );
function woo_change_order_received_text( $str, $order ) {
    if( has_bought_before() ){
        $new_str = $str . ' Welcome Back Again.';
    }else{
        $new_str = $str . ' Welcome To our site You will get 10% discount on your next order.';
    }
    return $new_str;
}

【问题讨论】:

    标签: php sql wordpress woocommerce orders


    【解决方案1】:

    thankyou 页面上,您正在定位下一个已付款订单,因此您需要对条件函数 has_bought_before() 进行一些更改,最后替换以下行:

    return count( $results ) > 0 ? true : false;
    

    作者:

    return count( $results ) > 1 ? true : false;
    

    它现在应该可以正常工作了。

    可以重命名这个条件函数thankyou_has_bought_before()

    【讨论】:

    • 感谢它有效 :) 我认为 woocommerce 对你来说就像 ABC。
    猜你喜欢
    • 2021-06-12
    • 2017-01-21
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2017-01-14
    • 2019-12-05
    相关资源
    最近更新 更多