Мета-запрос ничего не возвращает, когда слишком много данных - PullRequest
0 голосов
/ 20 декабря 2018

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

Кажется, что все будет работать нормально, пока я не получупара тысяч почтовых индексов.

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

  <?php
  // This takes in a zip code and returns all zip codes in a specific radius
  // using the zip code api: https://www.zipcodeapi.com/API#radius
  $api_root   = 'https://www.zipcodeapi.com/rest';
    $api_key    = $ZIP_CODE_API_KEY;
    $zip_radius = isset($_POST['radius']) ? $_POST['radius'] : 25;
    $zip_code   = $_POST['zip'];
    $type       = isset($_POST['type']) ? $_POST['type'] : array('architectural','auto','safety-security');

    $api_url    = $api_root.'/'.$api_key.'/radius.json/'.$zip_code.'/'.$zip_radius.'/miles?minimal';

    $curl = curl_init($api_url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    $curl_response = curl_exec($curl);
    if ($curl_response === false) {
    $info = curl_getinfo($curl);
    curl_close($curl);
    die('error occured during curl exec. Additional info: ' . var_export($info));
    }

// Because all zip codes come back as strings, we set up an array to push 
// the new zip code integers into
$zip_array = array();

// Decode response for easy looping
$curl_response = json_decode($curl_response);

// var_dump($curl_response);

// Change zip code strings to integers and push into zip_array
foreach ($curl_response as $zipcode) {
    foreach ($zipcode as $the_zip) {
        array_push($zip_array, intval($the_zip));
    }
}

 $meta_query_args = array(
    'post_type'      => 'dealer',
    'posts_per_page' => -1,
    'meta_query'     => array(
        array(
            'key'     => 'zip',
            'value'   => $zip_array,
            'compare' => 'IN',
            'type'    => 'NUMERIC'
        )
    ),
    'tax_query' => array(
        array(
            'taxonomy' => 'types',
            'field'    => 'slug',
            'terms'    => $type
        )
    )
);
$meta_query = new WP_Query( $meta_query_args );

  ?>

. После этого я просто выполняю стандартные loop и HTML и отображаю всю информацию о дилере на странице.API возвращает все почтовые индексы, как должно, и все отображается так, как должно, и отображается быстро, но я заметил, что когда я устанавливаю радиус на 100 miles, для некоторых почтовых индексов на северо-востоке Соединенных Штатов он возвращается вверхиз 2500 почтовых индексов.

Например, 19804 на 75 милях возвращает около 1200 почтовых индексов и правильно отображает 9 дилеров.19804 при пробеге 100 миль возвращает около 2200 почтовых индексов, и цикл отображения достигает значения else и говорит, что ни один дилер не соответствует этим данным.

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

Это просто случай проверки слишком большого количества почтовых индексов или я не в порядке, и это что-то совершенно другое?

1 Ответ

0 голосов
/ 21 декабря 2018

Нашел проблему.Я проверил WordPress debug.log и увидел Query Killed.Погуглил эту проблему и обнаружил, что на хостинге WP Engine они ограничивают запросы определенного размера.

Итак, в wp-config я добавил строку define( 'WPE_GOVERNOR', false );, и это сняло ограничение запроса WP Engine.

...