Есть произвольный тип записи "Посты"
Есть таксономия "авторы"
У постов есть произвольное метаполе с ID автора
У автора есть произвольное метаполе "город"
Фильтр выборки записей по городам фильтрует так:
1) Берем id авторов у которых совпадает город
2) По id авторов получаем посты
И это работает без вопросов, но если пост изменить и сохранить или открыть для редактирования и сохранить без изменений, то пост начинает "подходить" под критериям выборки когда город не совпадает, но только в том случае, если под выбранный город постов нет в базе данных. Если посты есть по городу, то редактируемый пост фильтр отсеивает.
В чем фишка?
// аргументы для параметра метода get_terms (выборка произвольных полей)
$meta_query = [
[
'key' => 'vk_account_active', // ключ произвольного метаполя
'value' => '4', // значение произвольного метаполя
'compare_key' => 'LIKE', // по моему без compare_key лайка тянуть не будет
],
[
'key' => 'vk_account_location', // ключ произвольного метаполя
'value' => $current_loc , // значение произвольного метаполя
'compare_key' => 'LIKE', // по моему без compare_key лайка тянуть не будет
],
];
$sources_args = [
'taxonomy' => 'acc', // название таксономии
'hide_empty' => false,
'meta_query' => $meta_query, // переменная с параметрами запроса
];
$terms = get_terms($sources_args);
foreach ($terms as $term_meta) {
$term_meta_result = get_term_meta($term_meta->term_id);
$acc_arr[$term_meta->name] = array(
'vk_account_name' => $term_meta_result['vk_account_name'][0], // название аккаунта
'vk_account_avatar' => $term_meta_result['vk_account_avatar'][0], // ссылка на аватар аккаунта
'vk_account_link' => $term_meta_result['vk_account_link'][0], // ссылка на источник (на сайт vk)
'vk_account_site_link' => $term_meta->slug, // ссылка на источник на текущем сайте
);
$accs_id[] = $term_meta->name; // собираем отдельный массив с id аккаунтов
}
//echo '<pre>'; print_r($terms); echo '</pre>';
// условия для определения номера страницы (разных типов страниц)
if ( get_query_var('paged') ) {$paged = get_query_var('paged');}
elseif ( get_query_var('page') ) { // на статической главной странице используется 'page' вместо 'paged'
$paged = get_query_var('page'); } else {$paged = 1;}
// делаем запрос к постам с соответствующими данными в произвольных полях
$meta_query = [
'relation' => 'AND',
[
'key' => 'post_signer_id',
'value' => $accs_id, // массив с id аккаунтов
'compare_key' => 'LIKE', // по моему без compare_key лайка тянуть не будет
],
[
'key' => 'aktivnost', // активность поста
'value' => 1, // значение флага (активно или нет. 2 -показывать на главной 1- не показывать)
'compare_key' => 'LIKE', // по моему без compare_key лайка тянуть не будет
],
];
$post_args = [
'post_type' => 'pst', // тип произвольной записи
'posts_per_page' => 15, // количество постов на странице
'paged' => $paged, // устанавливаем номер текущей страницы пагинации
'meta_query' => $meta_query, // переменная с параметрами запроса
// 'source' => $acc_arr, // крепим сюда массив с выборкой массива с информацией об источниках
];
$wp_query = new WP_Query( $post_args );
// выборка постов по заданным условиям готова!
// подключаем файл с выводом постов. данная конструкция передает переменные в файл подключаемого шаблона
include(locate_template('ext_templates/ajax_posts.php'));