Включите адрес доставки для конкретных виртуальных продуктов из категории продуктов в разделе проверки Woocommerce. - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть категория для показа доставки на виртуальных товарах.В основном у меня есть продукты, с которых я не хочу взимать плату за доставку, и я имею их в категории под названием подарки ... но я все еще хочу адрес доставки.Проблема в том, что когда я использую фильтр категорий, который я построил, он не сохранит адрес в порядке ... если я просто использую ...

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

Он прекрасно работает ...

Но когда я надену ворота ... он не сохранит значения ... вот ворота ...

//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);

1 Ответ

0 голосов
/ 19 декабря 2018

В вашем коде есть ошибки.Чтобы это работало, вам лучше установить код непосредственно в хуке фильтра woocommerce_cart_needs_shipping_address следующим образом:

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;
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы).Протестировано и работает.

В корзине , для обработки Woocommerce пользовательских таксономий как категории товаров или теги при использовании has_term() WordPressусловная функция, вам нужно использовать $cart_item['product_id'] вместо $cart_item['data']->get_id(), которая не работает для вариантов продукта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...