Heim >Backend-Entwicklung >PHP-Tutorial >Wie kann ich den Produktzugriff basierend auf früheren Einkäufen in WooCommerce einschränken?

Wie kann ich den Produktzugriff basierend auf früheren Einkäufen in WooCommerce einschränken?

DDD
DDDOriginal
2024-11-14 13:16:02183Durchsuche

How can I restrict product access based on previous purchases in WooCommerce?

Ermitteln von Kundenkäufen für die Produktzugriffskontrolle

Problemstellung:

In WooCommerce müssen Sie die Möglichkeit dazu einschränken bestimmte Produkte (c, d, e) kaufen, es sei denn, der Kunde hat zuvor eines der Produkte a oder b gekauft. Wenn diese Bedingung erfüllt ist, sollten die Kaufschaltflächen für die Produkte c, d und e aktiviert werden; andernfalls sollten sie deaktiviert bleiben.

Lösung:

Implementieren Sie eine bedingte Funktion, um zu überprüfen, ob ein Kunde zuvor bestimmte Produkte gekauft hat, und nutzen Sie diese Funktion, um die Sichtbarkeit zu steuern Funktionalität der Kaufschaltflächen für eingeschränkte Produkte.

Code:

Fügen Sie die folgende bedingte Funktion hinzu Ihre Datei „functions.php“:

function has_bought_items() {
    $bought = false;

    // Specify the product IDs of restricted products
    $prod_arr = array( '21', '67' );

    // Retrieve all 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' // Only orders with status "completed"
    ) );

    foreach($customer_orders as $customer_order) {
        // Compatibility for WooCommerce 3+
        $order_id = method_exists( $order, 'get_id' ) ? $order->get_id() : $order->id;
        $order = wc_get_order( $customer_order );

        // Iterate through purchased products in the order
        foreach($order->get_items() as $item) {
            // Compatibility for WC 3+
            if(version_compare(WC_VERSION, '3.0', '<')){
                $product_id = $item['product_id'];
            }else{
                $product_id = $item->get_product_id();
            }

            // Check if any of the designated products were purchased
            if(in_array($product_id, $prod_arr)){
                $bought = true;
            }
        }
    }

    // Return true if a designated product was purchased
    return $bought;
}

Verwendung:

In Ihren relevanten WooCommerce-Vorlagen (z. B. loop/add-to-cart.php) können Sie Verwenden Sie die Funktion has_bought_items(), um die Sichtbarkeit und Funktionalität von Kaufschaltflächen für eingeschränkte Produkte zu steuern:

// Replace restricted product IDs as needed
$restricted_products = array( '20', '32', '75' );

// Compatibility for WC +3
$product_id = method_exists( $product, 'get_id' ) ? $product->get_id() : $product->id;

// Customer has not purchased a designated product for restricted products
if( !has_bought_items() && in_array( $product_id, $restricted_products ) ) {
    // Display inactive add-to-cart button with custom text
}else{
    // Display normal add-to-cart button
}

Indem Sie dies implementieren Mit der bedingten Prüfung können Sie effektiv verhindern, dass Kunden eingeschränkte Produkte kaufen, bis sie die festgelegte Kaufvoraussetzung erfüllt haben.

Das obige ist der detaillierte Inhalt vonWie kann ich den Produktzugriff basierend auf früheren Einkäufen in WooCommerce einschränken?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn