2016-12-16 3 views
1

На моем веб-сайте WooCommerce у меня есть код, который работает, но не так хорошо.Добавить Стоимость доставки по продукту по категории и стране

Расчет по странам работает нормально, , но когда я добавил категории, то цены указаны неверно.

Вот мой код:

add_filter('woocommerce_get_discounted_price', 'calculate_discounted_price', 10, 2); 
add_filter('woocommerce_cart_item_subtotal', 'display_discounted_price', 10, 2); 

function calculate_discounted_price($price, $values) { 
    global $woocommerce, $product; 

    $countryArray = array('AL', 'AD', 'AT', 'BY', 'BE', 'BA', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FO', 'FI', 'FR', 'DE', 'GI', 'GR', 'HU', 'IS', 'IE', 'IM', 'IT', 'RS', 'LV', 'LI', 'LT', 'LU', 'MK', 'MT', 'MD', 'MC', 'ME', 'NL', 'NO', 'PL', 'PT', 'RO', 'RU', 'SM', 'RS', 'SK', 'SI', 'ES', 'SE', 'CH', 'UA', 'VA', 'RS'); 
    $catArray = array('handbags','kids','hats'); 


       if($woocommerce->customer->get_shipping_country() == 'GB') { 

        foreach ($woocommerce->cart->cart_contents as $product) : 
        if (has_term($catArray, 'product_cat', $product['product_id'])) { 
         $price += 4.50; 
        } else { 
         $price += 8.50; 
        } 
        endforeach;    

       } elseif(in_array($woocommerce->customer->get_shipping_country(), $countryArray)) { 

        foreach ($woocommerce->cart->cart_contents as $product) : 
        if (has_term($catArray, 'product_cat', $product['product_id'])) { 
         $price += 4.50; 
        } else { 
         $price += 12.50;  
        } 
        endforeach; 

       } else { 

        foreach ($woocommerce->cart->cart_contents as $product) : 
        if (has_term($catArray, 'product_cat', $product['product_id'])) { 
         $price += 8.50; 
        } else { 
         $price += 18.50;  
        } 
        endforeach; 
       } 

    return $price; 
} 

function display_discounted_price($values, $item) { 
    return wc_price($item[ 'line_total' ]).'<br>incl. shipping'; 
} 

Когда я удалить все о Еогеаспе и оставить только состояние страны он работает нормально, то цикл Еогеаспа какой-то образом вызывает проблему.

Некоторая помощь в этом, очень понравится.

Спасибо.

+0

кто за помощью, спасибо –

ответ

1

Для получения идентификатора продукта вам не нужна петля foreach для тележки, как вы увидите ниже. Я не решил вашу проблему странных отображаемых цен, как кажется, исходя из Категории товаров Условие. Я должен проверить, что в дальнейшем, но это незавершенный код поможет вам понять, что аргументы в первой крючковатой функции:

add_filter('woocommerce_get_discounted_price', 'calculate_discounted_price', 10, 3); 
function calculate_discounted_price($price, $cart_item, $cart_object) { 

    $country_arr = array('AL', 'AD', 'AT', 'BY', 'BE', 'BA', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FO', 'FI', 'FR', 'DE', 'GI', 'GR', 'HU', 'IS', 'IE', 'IM', 'IT', 'RS', 'LV', 'LI', 'LT', 'LU', 'MK', 'MT', 'MD', 'MC', 'ME', 'NL', 'NO', 'PL', 'PT', 'RO', 'RU', 'SM', 'RS', 'SK', 'SI', 'ES', 'SE', 'CH', 'UA', 'VA', 'RS'); 

    $cats_arr = array('handbags','kids','hats'); 

    // ONLY for logged users (I think) 
    $user_ship_country = WC()->customer->get_shipping_country(); 


    $product_id = $cart_item['product_id']; 

    if($user_ship_country == 'GB') { 

     if (has_term($cats_arr, 'product_cat', $product_id)) 
      $price += 4.50; 
     else 
      $price += 8.50; 

    } elseif(in_array($user_ship_country, $country_arr)) { 

     if (has_term($cats_arr, 'product_cat', $product_id)) 
      $price += 4.50; 
     else 
      $price += 12.50; 

    } else { 

     if (has_term($cats_arr, 'product_cat', $product_id)) 
      $price += 8.50; 
     else 
      $price += 18.50; 

    } 

    return $price; 
} 

add_filter('woocommerce_cart_item_subtotal', 'display_discounted_price', 10, 2); 
function display_discounted_price($values, $item) { 
    return wc_price($item[ 'line_total' ]).'<br>incl. shipping'; 
} 

Также WC()->customer->get_shipping_country(); будет работать только для журнала джин клиентов (я думаю) ...

Надеюсь, это вам немного поможет.

НО Для доставки дополнительных расходов, я думаю, что вы не используете правильные крюки ...

+0

Привета Спасибо за помощь, я думаю, что его работу, но нужно закрыть см. расчеты, а также какой должен быть правильный крюк? –

+0

Я знаю, что это непросто, но спасибо за вашу помощь ... на момент, когда это будет временное исправление, до тех пор, пока я отвечу вам правильно –

+0

@FrancisAlvinTan Я оставлю комментарий и обновлю свой ответ, если я получу правильный ответ ... Я работаю одновременно ... так что нелегко теперь для меня. Спасибо :) – LoicTheAztec

 Смежные вопросы

  • Нет связанных вопросов^_^