WooCommerce eine Gebühr pro Produkt hinzufügen, basierend auf der Kategorie

Ich habe schon eine Weile versucht, dies zum Laufen zu bringen, aber ich habe keine Lösung gefunden, die genau das tut, was wir brauchen, und ich bin weit davon entfernt, ein PHP-Experte zu sein, also bin ich ein bisschen verloren.

Wir verwenden WooCommerce und WooTickets. Das Ziel ist es, eine Gebühr von 5% für "Servicegebühr" nur für Produkte in der Kategorie "Tickets" (ID: 34) zu erheben.

Wir haben diesen Code Snipper gefunden, der basierend auf einer Produktkategorie Fixkosten hinzufügt:

// Add Service Fee to Category
function woo_add_cart_fee() {

$category_ID = '23';
global $woocommerce;

foreach ($woocommerce->cart->cart_contents as $key => $values ) {
    // Get the terms, i.e. category list using the ID of the product
$terms = get_the_terms( $values['product_id'], 'product_cat' );
    // Because a product can have multiple categories, we need to iterate through the list of the products category for a match
    foreach ($terms as $term) {
        // 23 is the ID of the category for which we want to remove the payment gateway
        if($term->term_id == $category_ID){
         $excost = 6;
         }
         }
        $woocommerce->cart->add_fee('Service Fee', $excost, $taxable = false, $tax_class = '');
}
}
add_action( 'woocommerce_cart_calculate_fees', 'woo_add_cart_fee' );

Das Hauptproblem bei dieser Lösung besteht darin, dass Fixkosten hinzugefügt werden, wohingegen prozentuale Kosten erforderlich sind.

Wir haben dieses Code-Snippet auch von WooThemes selbst gefunden:

/**
 * Add a 1% surcharge to your cart / checkout
 * change the $percentage to set the surcharge to a value to suit
 * Uses the WooCommerce fees API
 *
 * Add to theme functions.php
 */
add_action( 'woocommerce_cart_calculate_fees','woocommerce_custom_surcharge' );
function woocommerce_custom_surcharge() {
  global $woocommerce;

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    $percentage = 0.05;
    $surcharge = ( $woocommerce->cart->cart_contents_total + $woocommerce->cart->shipping_total ) * $percentage;    
    $woocommerce->cart->add_fee( 'Service Fee', $surcharge, true, 'standard' );

}

Aber es gibt wieder ein paar Probleme mit dieser Lösung ...

1) Die Produktkategorie wird nicht berücksichtigt. 2) Es wird eine Gebühr hinzugefügt, die auf dem gesamten Warenkorbwert basiert. Für Produkte in der Produktkategorie "Tickets" wird jedoch nur eine Gebühr von 5% erhoben, nicht für den gesamten Warenkorb.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage