Категория продукта WooCommerce и стоимость доставки по городу - PullRequest
0 голосов
/ 03 мая 2020

У меня есть сценарий здесь.

В магазине WooCommerce, который я установил, категория продукта 'Bronx' является родительской, а 'Baby Items Bronx' - дочерней. Здесь название родительской категории Бронкс - это город, в котором продается продукция под номером 'Baby Items Bronx'.

Другая категория продуктов 'Newark' - это родительская категория, а 'Baby Items Newark' - это дочерняя категория Это. Здесь имя родительской категории Ньюарк - город, из которого продается продукция по номеру 'Baby Items Newark'.

Клиент из Бронкс пытается купить товары по номеру 'Baby Items Newark' category.

Я пытаюсь настроить пользовательскую плату за доставку в WooCommerce, где она может рассчитать стоимость доставки в зависимости от местоположения клиента и добавить плату за доставку. Мне удалось добавить комиссию, если клиент выберет город как Бронкс в платежном адресе с этим кодом.

function from_to_city_add_checkout_fee() {
    if (($_POST['city']=='Bronx')){
        WC()->cart->add_fee( 'Delivery Fee', 15 );
    }

Теперь мне нужна функция, которая может рассчитать комиссию если клиент из Бронкс и пытается купить продукты, перечисленные в родительской категории: 'Newark'

Я попробовал следующий код, и он не работает.

function from_to_city_add_checkout_fee() {
    if (($_POST['city']=='Bronx') && (has_term( array( 'baby-items-newark' ), 'product_cat' ))){
        WC()->cart->add_fee( 'Fee', 150 );
    }   
}

Я попытался сделать что-то подобное с фрагментом кода, который я получил от https://businessbloomer.com/woocommerce-check-product-category-cart/, который помогает проверить, какая категория продукта находится в корзине, он все еще не работает.

add_action('woocommerce_before_cart', 'bbloomer_check_category_in_cart');

function bbloomer_check_category_in_cart() {

// Set $cat_in_cart to false
$cat_in_cart = false;

// Loop through all products in the Cart        
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {

    // If Cart has category "download", set $cat_in_cart to true
    if ( has_term( 'baby-items-newark', 'product_cat', $cart_item['product_id'] ) ) {
        $cat_in_cart = true;
        break;
    }
}

// Do something if category "download" is in the Cart      
if ( $cat_in_cart == true) {

// For example, print a notice
// Or maybe run your own function...
function from_to_city_add_checkout_fee() {
    if (($_POST['city']=='Bronx')){
        WC()->cart->add_fee( 'Delivery Fee', 150 );
    }


}

}

Любая помощь приветствуется.

1 Ответ

1 голос
/ 04 мая 2020

попробуйте приведенный ниже фрагмент кода. и замените условие if вашей логикой c.

add_action('woocommerce_cart_calculate_fees', 'woocommerce_custom_surcharge', 10, 1);
function woocommerce_custom_surcharge($cart)
{
    global $woocommerce;

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

    foreach ($cart->get_cart() as $cart_item) {
        $product = $cart_item['data'];
        if (
            $woocommerce->customer->get_shipping_city() == "Bronx" &&
            has_term('baby-items-newark', 'product_cat', $product->id)
        ) :
            WC()->cart->add_fee('Fee', 150);
        endif;
    }
}

. Вы можете получить родительскую категорию из

$parentcats = get_ancestors($product_cat_id, 'product_cat');

. Я бы лучше создал класс доставки и добавил его, если условие верно, так что будет применяться другая стоимость доставки.
Также легко использовать настраиваемое поле для города в товарах, кроме категории.

...