WP查询大大降低了两个以上的元查询

时间:2019-03-06 14:33:24

标签: php wordpress advanced-custom-fields acfpro meta-query

我正在尝试使用wp-query和wordpress中的一些自定义字段(acf)过滤帖子。

只要在$ query_filter_author中存储的数组中使用少于两个ID,代码就可以正常工作。当其中包含三个或更多ID时,页面加载会非常长,并且将使用大量的硬件功能...

有人知道如何解决这个问题,并使其与数组中的两个以上ID一起使用吗?

我认为最好在元查询中使用compare => 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)

0 个答案:

没有答案