Wordpress Get unique custom field values in a list

7.9k views Asked by At

I have a whole list of directors but would like to display only their unique names not duplicates. Something that looks like

director A, Director B, Director C,...

NOT

director A, Director A, Director B, Director C, Director C,...

I try to do this with array_unique but it doesn't seem to put any data in the arrays.

I see that the foreach loop displays all the names of the directors but somehow the array $alldirectors stays empty.

Here is the code I'm using.

<?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;
 }
 ?>

It's probably something simple that I'm missing but I'm new to php and wordpress Thanks for all your help.

3

There are 3 answers

1
M Khalid Junaid On BEST ANSWER

You are not storing the directors name in $alldirectors therefore it is empty try this one

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

And then use your loop

 $directors = array_unique($alldirectors);
 foreach ($directors as $director) {
  echo $directors;
 }
0
James Jones On

array_unique will do what you want it to. However looking at your code you have not assigned any data to the $alldirectors array. Try this line:

$alldirectors = get_post_meta(blah blah); 

instead of

$director = get_post_meta(blah blah);
4
Sumit On

Try to use standard query like this

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);