ОБНОВЛЕНИЕ - РЕШЕНО
Хорошо, у меня есть три пользовательских типа записей «курсы», «модули» и «результаты».
Эти типы записей настраиваются с помощью нескольких ACF (расширенных настраиваемых полей).
Я пытаюсь запросить CPT «результаты» на основе их ACF, используя «meta_query».
Два поля ACF, к которым я пытаюсь выполнить запрос, это 'module' и 'user'.
- 'module' - настроить как тип поля 'Relationship', фильтруя
Пользовательский тип поста 'module'.
- 'user' - Установить в качестве (реляционного) типа поля 'User'.
Кажется, я возвращаю только пустой массив. Я посмотрел примеры на https://www.advancedcustomfields.com/resources/query-posts-custom-fields/#custom-field%20parameters, но безуспешно.
function check_results_for_user( $module_id, $user_id ){
$posts = get_posts(array(
'numberposts' => -1,
'post_type' => 'results',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'module',
'value' => $module_id,
'compare' => '=',
),
array(
'key' => 'user',
'value' => $user_id,
'compare' => '=',
),
),
));
return $posts;
}
Функция вызова:
print_r(check_results_for_user($post->ID, $currentUserID ));
Результат:
Array ( )
ОБНОВЛЕНИЕ - решено:
Хорошо, так что удалось выяснить это. Произошло из-за того, что поле отношения 'module' сохранило данные в виде сериализованного массива: a:1:{i:0;s:1:"9";}
Таким образом, вы должны изменить сравнение на «LIKE» и обернуть значение в «
function check_results_for_user( $module_id, $user_id ){
$posts = get_posts(array(
'numberposts' => -1,
'post_type' => 'results',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'module',
'value' => '"'.$module_id.'"',
'compare' => 'LIKE',
),
array(
'key' => 'user',
'value' => $user_id,
'compare' => '=',
),
),
));
return $posts;
}
См. Конец этой страницы: https://www.advancedcustomfields.com/resources/querying-relationship-fields/