WP Query сильно замедлился более чем на 2 мета-запроса - PullRequest
0 голосов
/ 06 марта 2019

Я пытаюсь фильтровать сообщения с помощью wp-запроса и некоторых пользовательских полей (acf) в WordPress.

Код работает просто отлично, если я использую менее двух идентификаторов в массиве, хранящемся в $ query_filter_author. Когда в нем три или более идентификатора, загрузка страницы очень велика и много аппаратного питания будет использовано ...

У кого-нибудь есть идея, как это исправить и заставить его работать с более чем двумя идентификаторами в массиве?

Я думаю, что было бы лучше использовать сравнение => IN вместо LIKE внутри мета-запроса, но если я это сделаю, вывод будет пустым ... Есть идеи?

Код:

<?php
  $query_filter_author = get_sub_field('query_filter_lawyer'); //post-object field (output: IDs)
  $query_filter_tag = get_sub_field('query_filter_tag'); //taxonomy field
  $query_ID_in = get_sub_field('query_id_in'); //post-object field (output: IDs)
  $query_ID_not_in = get_the_ID();

  $meta_query = array('relation' => 'OR');
  if($query_filter_author){
    foreach ($query_filter_author as $author) {
        $meta_query[] = array(
            'key'       => 'author_IDs',
            'value'     => $author,
            'compare'   => 'LIKE',
        );
    }
  }

  $author_IDs = get_field('author_IDs'); //IDs of posts stored in an array (as int)
  var_dump($author_IDs);
  var_dump($meta_query);

  if(!$query_filter_author && !$query_filter_tag){
    $args = null;
  } else {
    $args = array(
      'post_type' => 'insights',
      'tag__in' => $query_filter_tag,
      'meta_query' => $meta_query,
      'orderby' => 'meta_value_num',
      'meta_key' => 'date',
      'order'	=> 'DESC',
      'post__not_in' => array($query_ID_not_in),
      'fields' => 'ids',
    );
  }

  if($query_ID_in){
    $pre_select = get_posts( $args );
    $merged_ids = array_merge( $query_ID_in, $pre_select );
    $args_final = array(
      'post_type' => 'insights',
      'post__in' => $merged_ids,
      'post__not_in' => array($query_ID_not_in),
      'orderby' => 'meta_value_num',
      'meta_key' => 'date',
      'order'	=> 'DESC',
      'posts_per_page' => -1,
      'fields' => 'ids',
    );
  } else {
    $args_final = $args;
  }

  $query_insights = new WP_Query($args_final);


if ($query_insights->have_posts()) :
?>
<div class="module-container container-fluid container-related mod_ID">
  <div class="container">
    <div class="row justify-content-center">
      <div class="col-12">
        <div class="mod-content">

          <div class="row">

            <?php while($query_insights->have_posts()) : $query_insights->the_post(); ?>

              <div class="col-12 col-sm-6 col-md-4 card-col">

                <?php get_template_part('tmp_prts/card'); ?>

              </div>

            <?php endwhile; ?>

          </div>

        </div>
      </div>
    </div>
  </div>
</div>
<?php endif;  wp_reset_postdata(); ?>

Вывод var-dump ($ author_IDs):

array (size=2)
  0 => int 53
  1 => int 272

Вывод var-dump ($ meta_query):

array (size=3)
  'relation' => string 'OR' (length=2)
  0 => 
    array (size=3)
      'key' => string 'author_IDs' (length=10)
      'value' => int 53
      'compare' => string 'LIKE' (length=4)
  1 => 
    array (size=3)
      'key' => string 'author_IDs' (length=10)
      'value' => int 272
      'compare' => string 'LIKE' (length=4)
...