Не могу изменить метку в WooCommerce с помощью стандартного фильтра

31 окт. 2013 г., 09:38:21
Просмотры: 18.2K
Голосов: 2
  // Подключаем хук
  add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );

// Наша функция с хуком - $fields передается через фильтр!
function custom_override_checkout_fields( $fields ) {
 $fields['order']['order_comments']['placeholder'] = 'Особые требования к доставке';
 $fields['billing']['billing_company']['label'] = 'Название компании (если применимо)';
 $fields['shipping']['shipping_company']['label'] = 'Название компании (если применимо)';
 $fields['billing']['billing_address_2']['placeholder'] = 'Номер дома / название';
 $fields['shipping']['shipping_address_2']['placeholder'] = 'Номер дома / название';
 $fields['billing']['billing_state']['required'] = true;
 $fields['billing']['billing_state']['label'] = 'Округ <abbr class="required" title="обязательно">*</abbr>';
 return $fields;
}

Я использовал этот код для изменения некоторых полей в форме оформления заказа WooCommerce.

По необъяснимой причине метка для поля billing_state отказывается изменяться. Хотя метка для billing_company успешно изменилась, метка для billing_state не меняется. Поле успешно стало обязательным, но я не могу изменить его метку.

Кто-нибудь знает, что я делаю не так, или это может быть ошибкой?

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

Можешь проверить, не является ли тег <abbr> причиной, так как он используется для сокращений. Попробуй использовать, например, <span> вместо него... Просто предположение

Maruti Mohanty Maruti Mohanty
31 окт. 2013 г. 14:01:15

@MarutiMohanty нет, совсем не работает. Ты можешь воспроизвести ошибку?

Lucky Luke Lucky Luke
31 окт. 2013 г. 15:38:00
Все ответы на вопрос 2
3
10

Необходимо использовать хук woocommerce_default_address_fields:

add_filter( 'woocommerce_default_address_fields' , 'wpse_120741_wc_def_state_label' );
function wpse_120741_wc_def_state_label( $address_fields ) {
     $address_fields['state']['label'] = 'Район';
     return $address_fields;
}

Это (и многое другое) описано в документации WooCommerce: Настройка полей оформления заказа с использованием действий и фильтров, так что в следующий раз внимательно читайте документацию... ;)


Примечание:
Вышеуказанный код работает не во всех случаях, потому что при выборе страны поле региона в форме оформления заказа обновляется через javascript. Чтобы это работало, необходимо добавить желаемое название для таких случаев в качестве перевода, используя хук woocommerce_get_country_locale следующим образом:

add_filter('woocommerce_get_country_locale', 'wpse_120741_wc_change_state_label_locale');
function wpse_120741_wc_change_state_label_locale($locale){
    // раскомментируйте /** вот так /**/ чтобы увидеть локали
    /**
    echo '<pre>';
    print_r($locale);
    echo '</pre>';
    /**/
    $locale['GB']['state']['label'] = __('тест', 'woocommerce');
    $locale['US']['state']['label'] = __('любое_значение', 'woocommerce');
    return $locale;
}

Хук находится в файле class-wc-countries.php в функции get_country_locale().

31 окт. 2013 г. 13:36:48
Комментарии

Полезно отметить, что именно ajax-запрос для перезагрузки части формы оформления заказа перезаписывает изначально правильно переопределённые метки полей формы значениями, которые не были переопределены. Почему они не используют тот же хук в том или ином виде — для меня загадка.

kontur kontur
5 окт. 2017 г. 13:15:53

@NeophytePolyhistor Всегда пожалуйста

Nicolai Grossherr Nicolai Grossherr
6 окт. 2017 г. 14:18:52

@kontur Особенно спустя четыре года

Nicolai Grossherr Nicolai Grossherr
6 окт. 2017 г. 14:19:17
0

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

Есть некоторые поля на странице оформления заказа, которые просто не меняются, независимо от используемого фильтра. Эти поля связаны с файлом checkout.js. Этот файл загружает информацию о локали из текущей локали и сбрасывает метки полей и их плейсхолдеры на стандартные значения. Особенно раздражало попытка изменить плейсхолдер "Street address" на "PO Box/Street address".

Для изменения этих полей необходимо установить локаль в вашем файле wp_config.php, например:

define('WPLANG', 'en_GB');

Затем скачайте плагин "Codestyling Localisation".

Перейдите в Инструменты → Локализация, прокрутите вниз до WooCommerce и повторно просканируйте ваш языковой файл, в данном случае это будет файл для английского языка (Великобритания).

После сканирования нажмите "Редактировать" и найдите нужный термин, в данном случае "Street address", и добавьте ваш перевод — у меня это было "Street address/PO Box".

Нажмите кнопку "Generate MO-file" вверху, и всё готово. Полные инструкции по этому процессу можно найти по ссылке:

http://docs.woothemes.com/document/woocommerce-localization/

11 мар. 2014 г. 07:01:58