WooCommerce: Изменение страны по умолчанию на странице корзины

14 янв. 2013 г., 15:45:36
Просмотры: 18.3K
Голосов: 1

Я хочу изменить страну по умолчанию на странице корзины на отсутствующую, чтобы в выпадающем списке стран по умолчанию отображалось "Выберите страну…".

Я изучил этот сниппет из документации WooCommerce, который использует фильтр default_checkout_country, но он применяется только к странице оформления заказа (а не к странице корзины), как и указано в его названии. Я также проверил это, окружив apply_filters('default_checkout_country', ... в файлах, где они встречаются, операторами echo, и они не появляются в сгенерированной разметке для страницы корзины.

Поскольку мы используем PayPal Express Checkout, мы не используем встроенную страницу оформления заказа WooCommerce, поэтому кажется, что упомянутый сниппет не подходит, и требуется другое решение.

Следующим шагом я изучил woocommerce/templates/cart/shipping-calculator.php, где генерируется список стран на странице корзины. Там есть вызов $woocommerce->customer->get_shipping_country(). Эта функция в woocommerce/classes/class-wc-customer.php просто получает переменные $_SESSION['customer']['shipping_country']. Единственное место, где эти переменные устанавливаются, — это функция set_shipping_to_base() в том же файле, и единственное место, где эта функция вызывается (условно), — это woocommerce/shortcodes/shortcode-cart.php, который, как я предполагаю, генерирует корзину из шорткода, используемого на автоматически созданной странице корзины. Я добавил оператор echo в блок в этом файле, где вызывается эта функция, но ничего не появилось в разметке, поэтому я застрял.

Однако это исследование кажется несколько ложным следом, так как упомянутые переменные сессии, похоже, на самом деле устанавливаются настройкой Страна/Регион по умолчанию на вкладке "Общие", поскольку они менялись соответствующим образом, когда переменная $_SESSION выводилась в браузере, где куки и кеш были предварительно удалены. Поэтому я снова застрял. Я хочу, чтобы настройка Страна/Регион по умолчанию оставалась установленной, но при этом не было страны по умолчанию, если посетитель её явно не выбрал.

Есть идеи?

2
Комментарии

Это не ответ, но я понял, что страна, выбранная в калькуляторе, не влияет на итоговую стоимость доставки. При использовании PayPal Express Checkout стоимость доставки фактически рассчитывается на основе страны доставки, возвращаемой PayPal (которая совпадает со страной выставления счета, если не указан другой адрес доставки). Это делает проблему для нас менее актуальной.

ivvi ivvi
21 янв. 2013 г. 15:37:40

Посмотрите этот код от MikeJolly: https://gist.github.com/mikejolley/2974310 Надеюсь, он поможет вам так же, как помог мне :)

ipruthi ipruthi
19 мар. 2013 г. 03:09:55
Все ответы на вопрос 2
0

У меня такая же проблема, но нужно установить страну на США, вот как я это исправил:

add_action('woocommerce_add_to_cart' , 'set_country_befor_cart_page'); 

function set_country_befor_cart_page(){

    WC()->customer->set_billing_country('US');
    WC()->customer->set_shipping_country('US');
}

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

10 мар. 2015 г. 22:16:34
0

Случайно и просто экспериментируя, я пришёл к такому решению:

add_filter( 'woocommerce_checkout_fields' , 'default_country_fields' );

function default_country_fields( $fields ) {

 $_SESSION['customer']['country'] = 'Выберите страну...';
 $_SESSION['customer']['shipping_country'] = 'Выберите страну...';

 return $fields;
}

Как видите, я просто устанавливаю переменные $_SESSION по мере необходимости. Я ещё новичок в этом, поэтому пока не знаю, есть ли у этого метода какие-то негативные последствия. И, вероятно, для этого есть более подходящий хук или фильтр, но тот, что я использовал, я взял отсюда:

руководство-по-настройке-полей-оформления-заказа-с-использованием-экшенов-и-фильтров

Если вы не авторизованы или у вас не указана информация для выставления счёта/доставки, вы увидите значения по умолчанию для страны выставления счёта/доставки. Однако при входе в учётную запись пользователя, у которой указана информация для выставления счёта или доставки, эта функция будет переопределена, и значения по умолчанию будут соответствовать информации для выставления счёта в вашей учётной записи.

4 февр. 2013 г. 23:23:53