@Mishaermolaev

Фильтрация произвольных типов записей в вордпресс?

Есть произвольный тип записи "Посты"
Есть таксономия "авторы"

У постов есть произвольное метаполе с 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'));
  • Вопрос задан
  • 178 просмотров
Пригласить эксперта
Ответы на вопрос 1
OtshelnikFm
@OtshelnikFm Куратор тега WordPress
Обо мне расскажет yawncato.com
Значит ошибка в фильтре. Или ошибка у тебя в предоставленной инфе и что-то всё таки меняется при сохранении.
Шаманский шар помутнел - большего и не сказать
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы