Aktivieren Sie die Versandadresse für bestimmte virtuelle Produkte aus einer Produktkategorie in der Woocommerce-Kaufabwicklung

Lesezeit: 2 Minuten

Benutzer-Avatar
Matt Nath

Ich habe ein Kategorietor, um den Versand für virtuelle Produkte anzuzeigen. Grundsätzlich habe ich Produkte, für die ich keine Versandkosten berechnen möchte, und ich habe sie in einer Kategorie namens Geschenke … aber ich möchte trotzdem eine Lieferadresse. Das Problem ist, dass, wenn ich den von mir erstellten Kategoriefilter verwende, die Adresse nicht in der Reihenfolge gespeichert wird … wenn ich nur verwende …

add_filter( 'woocommerce_cart_needs_shipping_address', '__return_true', 50 );

Es funktioniert super…

Aber wenn ich das Tor darauf setze … speichert es die Werte nicht … hier ist das Tor …

//gifts filter
function HDM_gift_shipping() {
// set our flag to be false until we find a product in that category
$cat_check = false;

// check each cart item for our category
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {

    $product = $cart_item['data'];

   // if cat matches gift return true
    if ( has_term( 'gift', 'product_cat', $product->id ) ) {
        $cat_check = true;
        // break because we only need one "true" to matter here
        break;
    }
}

// if a product in the cart is in our category, do something
if ( $cat_check ) {
    add_filter( 'woocommerce_cart_needs_shipping_address', '__return_true', 50 );
}

}
add_action('woocommerce_before_checkout_billing_form', 'HDM_gift_shipping', 100);

Benutzer-Avatar
LoicTheAztec

In deinem Code sind einige Fehler. Damit das funktioniert, sollten Sie Ihren Code besser direkt in der einstellen woocommerce_cart_needs_shipping_address Filterhaken auf diese Weise:

add_filter( 'woocommerce_cart_needs_shipping_address', 'custom_cart_needs_shipping_address', 50, 1 );
function custom_cart_needs_shipping_address( $needs_shipping_address ) {
    // Loop though cat items
    foreach ( WC()->cart->get_cart() as $cart_item ) {
        if ( has_term( array('gift'), 'product_cat', $cart_item['product_id'] ) ) {
            // Force enable shipping address for virtual "gift" products
            return true; 
        }
    }
    return $needs_shipping_address;
}

Der Code wird in die function.php-Datei Ihres aktiven untergeordneten Designs (oder aktiven Designs) eingefügt. Getestet und funktioniert.

Im Wagenum mit Woocommerce umzugehen benutzerdefinierte Taxonomien wie Produktkategorien oder Tags bei der Verwendung has_term() Bedingte WordPress-Funktion, die Sie verwenden müssen $cart_item['product_id'] Anstatt von $cart_item['data']->get_id() das funktioniert nicht bei Produktvariationen.

  • Wieder einmal mit dieser Antwort in die Kupplung kommen. Klingt, als kennst du dich aus!

    – Matt Nath

    19. Dezember 2018 um 1:06 Uhr

  • Eine letzte Frage, sagen wir, ich wollte es eher auf ein Tag als auf eine Kategorie beschränken. Würde ich einfach ‘product_cat’ durch ‘product_tag’ ersetzen?

    – Matt Nath

    19. Dezember 2018 um 9:42 Uhr

  • @MattNath ersetzt die Taxonomie „product_cat“ durch „product_tag“ im Code.

    – LoicTheAztec

    19. Dezember 2018 um 9:48 Uhr

  • Ich dachte auch. Danke nochmal!

    – Matt Nath

    19. Dezember 2018 um 23:30 Uhr

1037880cookie-checkAktivieren Sie die Versandadresse für bestimmte virtuelle Produkte aus einer Produktkategorie in der Woocommerce-Kaufabwicklung

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

Privacy policy