我正在尝试使用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)