【问题标题】:Wordpress Get unique custom field values in a listWordpress 在列表中获取唯一的自定义字段值
【发布时间】:2013-12-16 02:08:43
【问题描述】:

我有一份完整的董事名单,但我只想显示他们的唯一姓名而不是重复姓名。看起来像的东西

导演A、导演B、导演C……

不是

导演A、导演A、导演B、导演C、导演C……

我尝试使用 array_unique 执行此操作,但它似乎没有将任何数据放入数组中。

我看到 foreach 循环显示了所有导演的姓名,但不知何故,数组 $alldirectors 保持为空。

这是我正在使用的代码。

<?php
$resume = get_posts(array(
          'post_type' =>'resume', 
          'numberposts'=>-1, 
          'meta_key' => 'director', 
          'meta_value' => '' 
));

$alldirectors = array();
foreach( $resume as $post ) {
      $director = get_post_meta( $post->ID, 'director', true );
 }

 $directors = array_unique($alldirectors);
 foreach ($directors as $director) {
  echo $directors;
 }
 ?>

我可能缺少一些简单的东西,但我是 php 和 wordpress 的新手,感谢您的帮助。

【问题讨论】:

    标签: php arrays wordpress custom-post-type array-unique


    【解决方案1】:

    您没有将董事姓名存储在$alldirectors,因此它是空的,试试这个

    $alldirectors = array();
    foreach( $resume as $post ) {
        $alldirectors[]=   get_post_meta( $post->ID, 'director', true );
     }
    

    然后使用你的循环

     $directors = array_unique($alldirectors);
     foreach ($directors as $director) {
      echo $directors;
     }
    

    【讨论】:

    • 我完全错过了 $alldirectors 后面的 []。一旦我把这一切都作为一种魅力。
    【解决方案2】:

    array_unique 会做你想做的事。但是查看您的代码,您尚未将任何数据分配给 $alldirectors 数组。试试这条线:

    $alldirectors = get_post_meta(blah blah); 
    

    而不是

    $director = get_post_meta(blah blah);
    

    【讨论】:

      【解决方案3】:

      尝试使用这样的标准查询

      global $wpdb; (this is required when are you inside the function)
      
      $values = $wpdb->get_results("SELECT DISTINCT meta_value FROM $wpdb->postmeta pm, $wpdb->post p WHERE meta_key  = 'director' and pm.post_id=p.ID  and p.post_type='resume' ",ARRAY_A);
      
      print_r($values);
      

      【讨论】:

      • 我会同意这种方法。只需按照您想要的方式直接从数据库中获取数据,而不是使用循环中的预定义函数进行一系列数据库查询(每个帖子一个)。您正在谈论使用这种方法进行单个数据库查询,而不是数百或数千,具体取决于您拥有的帖子数量。
      • 我同意迈克的说法。请在您的 cmets 或可见的地方记下这一点,以便维护您的设置的人会知道,因为 - 从理论上讲 - 数据库结构可能会发生变化(如果确实如此,很可能我们都会变得非常忙碌)。
      • 感谢您的回答。我会纠正一点:$wpdb-&gt;post 应该是$wpdb-&gt;posts
      • 注意:当 WordPress 查询 get_posts 时,它会抓取元数据并将其放入内存中,因此不应有单独的数据库请求 get_post_meta
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-06
      • 1970-01-01
      • 2013-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多