ホームページ > バックエンド開発 > PHPチュートリアル > WooCommerce で以前の注文に基づいて製品の購入を制御するにはどうすればよいですか?

WooCommerce で以前の注文に基づいて製品の購入を制御するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-16 12:46:02
オリジナル
472 人が閲覧しました

How to Control Product Purchases Based on Previous Orders in WooCommerce?

WooCommerce での以前の注文に基づいた製品購入の制御

WooCommerce では、特定の製品が以前に購入されている場合にのみ購入可能になるシナリオが発生する場合があります。 。これにより、階層型購入システムを作成したり、特定のアイテムへのアクセスをロック解除する前に顧客が特定の要件を満たしていることを確認したりできます。

条件チェックの実装

この条件チェックを実現するには、カスタム関数を利用できます。現在のユーザーが過去に特定の製品を購入したかどうかを判断します。使用できるサンプル関数は次のとおりです。

function has_bought_items() {
    $bought = false;

    // Set target product IDs
    $prod_arr = array( '21', '67' );

    // Fetch customer orders
    $customer_orders = get_posts( array(
        'numberposts' => -1,
        'meta_key'    => '_customer_user',
        'meta_value'  => get_current_user_id(),
        'post_type'   => 'shop_order', // WC orders post type
        'post_status' => 'wc-completed' // Completed orders only
    ) );

    foreach ( $customer_orders as $customer_order ) {
        // Get order ID and data
        $order_id = method_exists( $order, 'get_id' ) ? $order->get_id() : $order->id;
        $order = wc_get_order( $order_id );

        // Iterate through purchased products
        foreach ($order->get_items() as $item) {
            // Get product ID
            if ( version_compare( WC_VERSION, '3.0', '<' ) )
                $product_id = $item['product_id'];
            else
                $product_id = $item->get_product_id();

            // Check if target product ID is purchased
            if ( in_array( $product_id, $prod_arr ) )
                $bought = true;
        }
    }

    // Return result
    return $bought;
}
ログイン後にコピー

条件チェックの使用

条件関数を定義したら、それを WooCommerce テンプレートに統合して、可視性と機能を制御できます。特定の購入が行われたかどうかに基づいて製品の評価を行います。たとえば、ショップ ページのloop/add-to-cart.php テンプレートで次のコードを使用できます:

// Replace product IDs with your restricted products
$restricted_products = array( '20', '32', '75' );

// Get current product ID
$product_id = method_exists( $product, 'get_id' ) ? $product->get_id() : $product->id;

// If not already purchased, disable add-to-cart button
if ( !has_bought_items() &amp;&amp; in_array( $product_id, $restricted_products ) ) {
    echo '<a class="button greyed_button">' . __("Disabled", "your_theme_slug") . '</a>';
    echo '<br><span class="greyed_button-message">' . __("Your message goes here…", "your_theme_slug") . '</span>';
} else {
    // Display regular add-to-cart button
    echo apply_filters( 'woocommerce_loop_add_to_cart_link',
        sprintf( '<a rel="nofollow" href="%s" data-quantity="%s" data-product_id="%s" data-product_sku="%s" class="%s">%s</a>',
            esc_url( $product->add_to_cart_url() ),
            esc_attr( isset( $quantity ) ? $quantity : 1 ),
            esc_attr( $product_id ),
            esc_attr( $product->get_sku() ),
            esc_attr( isset( $class ) ? $class : 'button' ),
            esc_html( $product->add_to_cart_text() )
        ),
    $product );
}
ログイン後にコピー

このコードでは、無効になっているカートに追加ボタンとカスタム ボタンが表示されます。顧客がまだ購入していない制限付き製品に関するメッセージ。また、顧客はすでに購入した商品を購入することもできます。

以上がWooCommerce で以前の注文に基づいて製品の購入を制御するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート