>백엔드 개발 >PHP 튜토리얼 >WooCommerce에서 이전 주문을 기반으로 제품 구매를 제어하는 ​​방법은 무엇입니까?

WooCommerce에서 이전 주문을 기반으로 제품 구매를 제어하는 ​​방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-16 12:46:02462검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.