WordPress запрос сообщений от ACF - PullRequest
0 голосов
/ 02 мая 2018

ОБНОВЛЕНИЕ - РЕШЕНО

Хорошо, у меня есть три пользовательских типа записей «курсы», «модули» и «результаты». Эти типы записей настраиваются с помощью нескольких 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/

1 Ответ

0 голосов
/ 14 мая 2018

ОБНОВЛЕНИЕ - решено:

Хорошо, так что удалось выяснить это. Произошло из-за того, что поле отношения '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/

...