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
Freigeben: 2024-11-14 13:16:02
Original
174 Leute haben es durchsucht

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;
}
Nach dem Login kopieren

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
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage