簡體   English   中英

PHP,Wordpress查詢,將匹配結果合並為1

[英]PHP, Wordpress Query, Combine Matched Results in 1

我在Wordpress中運行查詢以獲取自定義帖子類型的發言人列表。 即使說話者可能多次顯示為自定義帖子類型的元數據,我也只需要返回每個發言者的一個實例。

例如,如果我查詢並獲得這樣的列表:Bob,Bob,Bob,John,Sally,Bob,Bob,John,Bob

我希望它是:Bob,John,Sally

我不知道如何用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();

任何幫助表示贊賞!

根據您的描述,我假設您沒有正確創建SQL查詢。 方法get_posts($args); 可能不會返回不同的結果,這可能是您的重復值的問題。 我希望它有所幫助。

我想到了。 這可能不是最好的方法,但它可以工作,不需要對查詢進行任何更改:我發現了一個名為array_unique的PHP數組函數

首先,我必須在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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM