Возникла необходимость создать проверку вводимого индекса и города на странице оформления заказа woocommerce (checkout.php).

Так как готового решения я не нашел, пришлось сделать свое.

На странице checkout.php есть форма с полями.

Задача проверить индекс после выбора города. Например «Санкт-Петербург (Санкт-Петербург)».

В данном случае ajaxurl уже был ранее определен, поэтому можно им же и воспользоваться.

jQuery(document).ready(function() {
    jQuery('#billing_postcode').val('');  //данные поля индекса
    jQuery("#billing_postcode").focusin(function(){ //при клике на поле индекса данные которые были там введены ранее стираются
       jQuery('.index_info').remove(); //удаляет строку с ошибкой при клике на поле индекс
    });
    jQuery("#billing_postcode").focusout(function(){
         if ( $('#select2-billing_city-container').text() != '' && $('#billing_postcode').val() != '') {
             jQuery.post(
                  wpjxm_ajaxurl,
                  {
                      action : 'check_city_of_index', //название экшна для функции в php
                      'index' : jQuery('#billing_postcode').val(), //введеные данные из поля "индекс"
                      'city'  : jQuery('#select2-billing_city-container').text(), //введенные данные из поля "город"
                  },
                  function (result) {
                      if (result == 1) {
                          console.log ("ok");
                      } else {
                          console.log('not ok');
                          jQuery('#billing_postcode_field').append('<span class="index_info" style="font-size:12px; color:red;">Индекс: ' + jQuery('#billing_postcode').val() + ' не совпадает с городом ' + jQuery('#select2-billing_city-container').text() + '</span>'); //добавить информацию об ошибке под поле ввода индекса
                          jQuery('#billing_postcode').val(''); //очистить поле индекса, чтоб предотвратить отправку формы, т.к поле обязательное для заполнения, то форма без правильного индекса не отправится
                      }
                  }
             );
         }
        });
});
‘index’ : jQuery(‘#billing_postcode’).val(), //введенные данные из поля «индекс»

‘city’ : jQuery(‘#select2-billing_city-container’).text(), //введенные данные из поля «город»

Дальше получение обработка данных в functions.php
Первым делом подключаю скрипт с проверкой является ли текущая страница страницей checkout.

function check_index_script() {
    if (is_checkout()) {
      wp_enqueue_script( 'checkindex', get_stylesheet_directory_uri() . '/js/checkindex.js', array('jquery') );
    }
}
add_action( 'wp_enqueue_scripts', 'check_index_script' );

Дальше идет функция с проверкой на наличие данных в переданных значениях index и city на всякий пожарный

function _vk_check_index() {
    if ( isset($_POST['index']) && $_POST['city'] ) {
        $city_of_index = check_index_city($_POST['index']); 
        $city = remove_except_from_city($_POST['city']);
        if ( $city_of_index == $city ) {
            echo 1;
        } else {
            echo 0;
        }
    } else {
        echo 0
    }
    wp_die();
}

Пояснение:

check_index_city($_POST[‘index’]); // эта функция возвращает город по полученному индексу
function check_index_city($index) {
    $url = 'http://api.print-post.com/api/index/v2/?index=' . $index; 
    $content = file_get_contents($url);//получение контента
    $result = json_decode($content, true);//декодирование JSON данных
    $str = explode(',', str_replace(' ', '', $result['string']));
    return $str[0];
}

По api получаем данные из адреса
http://api.print-post.com/api/index/v2/?index= {подставляем полученные данные}

Удаляем пробелы из строки, и разбиваем строку на массив по запятой. Почему string из фйла json, потому что иногда бывает, что поле city в этом массиве пустое и можно использовать регион для проверки, если города не будет, то на его месте будет регион, т.е [0] индекс этого массива всегда будет иметь значение региона или города, что даст возможность сравнить данные из [0] индекса с данными которые отправлены в $_POST[‘city’]

remove_except_from_city($_POST[‘city’]) // сюда приходят данные из поля формы например «Санкт-Петербург (Санкт-Петербург)».

Строка содержит лишние символы, которе можно удалить регулярным выражением.

То что нам нужно удалить из строки находится в $matches[0][0]

Функция str_replace позволяет очищает строку от лишнего 

rim(str_replace($except, », $str));

trim — удаляет пробелы у строки на всякий случай. В итоге функция возвращает строку с названием города.

Далее функция check_index_city после получения данных от этих функций сравнивает название городов и если они совпадают, то вернет 1, в противном случае вернет 0. Если 1 то все ок, ошибок не будет, если 0 то появится сообщение о том что индекс не совпадает с указанным городом. Точка.