ホームページ  >  記事  >  バックエンド開発  >  顧客が以前に WooCommerce で購入したかどうかを確認するにはどうすればよいですか?

顧客が以前に WooCommerce で購入したかどうかを確認するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-17 16:15:02395ブラウズ

How to Check if a Customer Has Made a Previous Purchase in WooCommerce?

WooCommerce での顧客の購入履歴の確認

WooCommerce では、顧客が以前に購入を行ったかどうかを確認する必要があることがよくあります。この情報は、購入履歴に基づいてパーソナライズされた割引、特典、またはその他のプロモーションを提供するために利用できます。

解決策

次の関数 has_bought() は、以下のことを効率的にチェックします。特定の顧客が WooCommerce で有料注文を行っている:

function has_bought( $value = 0 ) {
    if ( ! is_user_logged_in() && $value === 0 ) {
        return false;
    }

    global $wpdb;

    // Based on user ID (registered users)
    if ( is_numeric( $value) ) { 
        $meta_key   = '_customer_user';
        $meta_value = $value == 0 ? (int) get_current_user_id() : (int) $value;
    } 
    // Based on billing email (Guest users)
    else { 
        $meta_key   = '_billing_email';
        $meta_value = sanitize_email( $value );
    }

    $paid_order_statuses = array_map( 'esc_sql', wc_get_is_paid_statuses() );

    $count = $wpdb->get_var( $wpdb->prepare("
        SELECT COUNT(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 = '%s'
        AND pm.meta_value = %s
        LIMIT 1
    ", $meta_key, $meta_value ) );

    // Return a boolean value based on orders count
    return $count > 0;
}

使用法:

この機能は、ログイン中の購入履歴を確認するためにさまざまな方法で利用できます。ユーザーとゲスト:

  • 購入の確認:

    if( has_bought() )
      echo '<p>You have already made a purchase</p>';
    else
      echo '<p>Welcome, for your first purchase you will get a discount of 10%</p>';
  • 特定のユーザーの確認ID 別:

    $user_id = 85;
    
    if( has_bought( $user_id ) )
          echo '<p>customer have already made a purchase</p>';
      else
          echo '<p>Customer with 0 purchases</p>';
  • 請求メールによるゲスト ユーザーの確認:

    $email = '[email&#160;protected]';
    
    if( has_bought( $email ) )
          echo '<p>customer have already made a purchase</p>';
      else
          echo '<p>Customer with 0 purchases</p>'

補足:

この機能は、請求メールに基づくゲスト ユーザーの処理を含め、精度とセキュリティの向上のために強化されました。 WooCommerce 3 でテストされており、以前のバージョンでも動作するはずです。

以上が顧客が以前に WooCommerce で購入したかどうかを確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。