PHP, Wordpress Query, объединить согласованные результаты в 1 - PullRequest
0 голосов
/ 20 марта 2019

Я выполняю запрос в Wordpress, чтобы получить список ораторов с пользовательским типом записи. Мне нужен только один экземпляр каждого спикера, хотя спикер может появляться несколько раз в качестве мета для пользовательских типов постов.

Так, например, если я сделаю запрос и получу список обратно так: Боб, Боб, Боб, Джон, Салли, Боб, Боб, Джон, Боб

Я бы хотел, чтобы это было: Боб, Джон, Салли

Я не уверен, как сгруппировать все сопоставленные результаты с помощью PHP.

Вот мой запрос:

global $post;
  $args = array (
    'post_type' = 'event',
    'posts_per_page' = -1,
    'post_status' => 'publish',
    'fields' => 'ids',
    'meta_query' => array (
      'relation' => 'AND'
      array (
        'key' => 'pt_eventSpeakerType',
        'value' => 'Lead Speaker',
        'compare' => '=',
      ),
    ),
  );
$posts = get_posts($args);
if($posts) :
  foreach($posts as $post):setup_postdata($post);
    echo get_post_meta($post->ID, 'pt_eventSpeaker' true).'<br>';
  endforeach;
endif;
wp_reset_postdata();

Любая помощь приветствуется!

Ответы [ 2 ]

0 голосов
/ 20 марта 2019

Я понял это. Возможно, это не лучший способ, но он работает и не требует каких-либо изменений в запросе: я нашел функцию массива PHP с именем array_unique

Сначала я должен вернуть все имена динамиков в цикле foreach, а затем преобразовать их в собственный массив. Он избавляется от всех других объектов, возвращаемых WP_Query.

Затем используйте функцию array_unique, чтобы отсортировать их в массив отдельных записей для каждого имени оратора.

Наконец, используйте другой foreach для циклического перебора этих имен и вывода их.

global $post;
  $args = array (
    'post_type' = 'event',
    'posts_per_page' = -1,
    'post_status' => 'publish',
    'fields' => 'ids',
    'meta_query' => array (
      'relation' => 'AND'
      array (
        'key' => 'pt_eventSpeakerType',
        'value' => 'Lead Speaker',
        'compare' => '=',
      ),
    ),
  );
$posts = get_posts($args);
if($posts) :
  foreach($posts as $post):setup_postdata($post);
    $speakerName = get_post_meta($post->ID, 'pt_eventSpeaker', true);
    $speakers[]= $speakerName;
  endforeach;
  $names = array_unique($speakers);
  foreach($names as $name) :
    echo $name.'<br>';
  endforeach;
else :
  echo 'No Posts Found.';
endif;
wp_reset_postdata();
0 голосов
/ 20 марта 2019

из того, что вы описали, я предполагаю, что вы неправильно создаете SQL-запрос.Метод get_posts($args);, вероятно, не возвращает отличные результаты, что может быть проблемой с вашими дублированными значениями.Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...