Я пытаюсь фильтровать сообщения с помощью 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)