So fügen Sie Gebühren basierend auf Produktkategorien und Mengen in WooCommerce hinzu

Lesezeit: 2 Minuten

Benutzer-Avatar
Si8

Ich habe einige Produkte in WooCommerce und zwei Kategorien sind:

Name: ORG Test
Slug: org-test

Name: ORG Prod
Slug: org-prod

Ich möchte die Versandkosten pro Menge (15 USD pro Menge) berechnen, wenn das Produkt übereinstimmt org-prod Kategorie:

Mein Codeversuch:

add_action('woocommerce_cart_calculate_fees', 'add_fees_on_ids');
function add_fees_on_ids() {
    $total_act_fee = 0;
    $business_plan_exist = false;
    if (is_admin() && !defined('DOING_AJAX')) {return;}
    foreach( WC()->cart->get_cart() as $cart_item ) {
        $product = $cart_item['data'];
        $quantity = $cart_item['quantity'];
        $categories = wc_get_product_category_list(  $product->get_id() );
        if (strstr($categories, 'org-prod')) {
            $business_plan_exist = true;
            $total_act_fee = $total_act_fee + 15;
        }
        
        if ($business_plan_exist) {
            WC()->cart->add_fee(__('Shipping Fees '), $total_act_fee);
        }
    }
}

Dies führt jedoch nicht zum gewünschten Ergebnis. Die Gebühr wird erhoben, aber die Summe ist falsch? Können Sie helfen, herauszufinden, warum nicht?

Benutzer-Avatar
7uc1f3r

Ihr Code enthält einige Fehler und/oder könnte optimiert werden:

  • Bei der Berechnung der Summen berücksichtigen Sie die Menge nicht
  • Ihre if-Bedingung zum Hinzufügen der Gebühr befindet sich in Ihrer foreach-Schleife, sodass sie bei jeder Schleife überschrieben wird
  • Die Verwendung von WC()->cart ist nicht notwendig, da $cart bereits an die Callback-Funktion übergeben
  • Verwenden has_term() gegen wc_get_product_category_list() und strstr()

Sie erhalten also:

function action_woocommerce_cart_calculate_fees( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;
    
    // Specific categories: the term name/term_id/slug. Several could be added, separated by a comma
    $categories = array( 'org-prod', 'categorie-1', 83 );

    // Initialize
    $total_act_fee = 0;
    $amount = 15;
     
    // Gets cart contents
    foreach ( $cart->get_cart_contents() as $cart_item ) {
        // Has certain category     
        if ( has_term( $categories, 'product_cat', $cart_item['product_id'] ) ) {
            // Get quantity
            $quantity = $cart_item['quantity'];
        
            // Addition to the total
            $total_act_fee += $amount * $quantity;
        }
    }

    // Greater than
    if ( $total_act_fee > 0 ) {
        // Add fee
        $cart->add_fee( __( 'Shipping Fees', 'woocommerce' ), $total_act_fee, true );
    }
}
add_action( 'woocommerce_cart_calculate_fees', 'action_woocommerce_cart_calculate_fees', 10, 1 );

1017510cookie-checkSo fügen Sie Gebühren basierend auf Produktkategorien und Mengen in WooCommerce hinzu

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy