Недавно клиент поставил интересную задачу: запретить кириллицу при оформлении заказа в Woocommerce.
У клиента магазин на WordPress. И хотя сайт магазина на русском языке, доставка происходит из Китая, где кириллицу не понимают. Клиенту приходилось самостоятельно переводить адресные данные покупателей на английский язык, что было неудобно и неправильно.
Интересно, что нигде в интернете решение подобной задачи не встречается. Встречается код для проверки поля телефона (индекса) на ввод только цифр, а также код для проверки на «текст». Последний, однако, не пропускает цифры и специальные символы.
Итак, полное описание условий задачи:
- CMS WordPress, плагин магазина WooCommerce
- Запретить вводить кириллические символы в поля на странице оформления заказа /checkout/
- Разрешить вводить следующие символы: латиница (прописные и строчные), пробел, специальные символы (оба слэша, точка, запятая, скобки, дефис)
Последний пункт обусловлен тем, что наш код будет распространяться на все поля заказа. А в поле «Телефон» могут быть скобки и дефис, в поле «Адрес» могут быть запятая, точка и «косые черточки».
Запретить кириллицу: код для Вордпресс
В ходе разработки мы подобрали код, которых хорошо показал себя в работе именно на странице чекаута.
Нижеследующий код необходимо вставить в конец файла functions.php в вашей дочерней теме WP.
/* Speedplus.com.ua NO CYRILLIC = ALLOW ONLY LATIN LETTERS, NUMBERS AND SOME MORE CHARACTERS AT CHECKOUT */
add_action('woocommerce_checkout_process', 'Speedplus_com_ua_latin_checkout_fields');
function Speedplus_com_ua_latin_checkout_fields() {
$billing_address_1 = filter_input(INPUT_POST, 'billing_address_1');
$ship_to_different_address = filter_input(INPUT_POST, 'ship_to_different_address');
$shipping_address_1 = filter_input(INPUT_POST, 'shipping_address_1');
if (strlen(trim(preg_replace('/^[A-Za-z0-9.\\-\\/\\\,()\s+]+$/', '', $billing_address_1))) > 0) {
wc_add_notice(__('Пожалуйста, напишите <strong>Адрес</strong> латиницей.'), 'error');
}
// Check Shipping to different address
if (!empty($ship_to_different_address)) {
if (strlen(trim(preg_replace('/^[A-Za-z0-9.\\-\\/\\\,()\s+]+$/', '', $shipping_address_1))) > 0) {
wc_add_notice(__('Пожалуйста, напишите <strong>Адрес</strong> латиницей.'), 'error');
}
}
}
В примере написано правило только для поля billing_address_1 (Адрес), но вы по аналогии можете добавить нужное количество условных операторов.
После установки этого кода, если покупатель попробует отправить заказ хоть с одним кириллическим символом в своих данных, ничего не произойдет и выведется сообщение об ошибке.
Запрещаем латиницу
Если же вам надо запретить ввод латиницы, то воспользуйтесь таким кодом (добавлять в конец файла functions.php активной темы):
/* Speedplus.com.ua NO LATIN = ALLOW ONLY CYRILLIC LETTERS and hyphen */
add_action('woocommerce_checkout_process', 'Speedplus_com_ua_latin_checkout_fields');
function Speedplus_com_ua_latin_checkout_fields() {
$billing_first_name = filter_input(INPUT_POST, 'billing_first_name');
$billing_last_name = filter_input(INPUT_POST, 'billing_last_name');
if (strlen(trim(preg_replace('/^[А-Яа-яЁё\-]+$/', '', $billing_first_name))) > 0) {
wc_add_notice(__('Пожалуйста, напишите <strong>Имя</strong> кириллицей без пробелов.'), 'error');
}
if (strlen(trim(preg_replace('/^[А-Яа-яЁё\-]+$/', '', $billing_last_name))) > 0) {
wc_add_notice(__('Пожалуйста, напишите <strong>Фамилию</strong> кириллицей без пробелов.'), 'error');
}
}