Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I am having a heck of a time getting wordpress to display all values of a certain meta key correctly. I wonder if I am going about this the wrong way?

My end goal is to run a check to see if there is more than one custom field value in a key. If there is, each value should be listed with a comma delimiter, but no comma on the last value. If there is not, no comma should be used. I have tried two methods unsuccessfully. The first is get_post_meta:

<?php if(get_post_meta($post->ID, 'band', true)): ?>
    <strong>Band:</strong> <?php echo get_post_meta($post->ID, 'band'); ?><br />
<?php endif; ?>

According to the codex, this should display all values of that key, but instead all it does is echo "array". If I change $Single to true, like so:

<?php if(get_post_meta($post->ID, 'band', true)): ?>
    <strong>Band:</strong> <?php echo get_post_meta($post->ID, 'band', true); ?><br />
<?php endif; ?>

it only returns the first value (but at least returns the value and not the word "array".

The second method I have tried that sorta worked was get_post_custom_values. This does the trick, but I can't work out how to a) run a check for multiple values or b) keep it from adding a comma to the last value.

<?php if(get_post_meta($post->ID, 'gear', true)): ?>
    <strong>Gear: </strong>
    <?php
      $mykey_values = get_post_custom_values('gear');
      foreach ( $mykey_values as $key => $value ) {
        echo "$value, "; 
      }
    ?>  
<?php endif; ?> 
share|improve this question

1 Answer 1

up vote 0 down vote accepted

use php's implode to join array elements with a string:

<?php
if( $bands = get_post_meta($post->ID, 'band') ):
    ?>
    <strong>Band:</strong> <?php echo implode( $bands, ', ' ); ?><br />
    <?php
endif;
?>

EDIT- another version of above, pluralizing the label depending on single or multiple meta values:

<?php
if( $bands = get_post_meta($post->ID, 'band') ):
    $label = count( $bands ) > 1 ? 'Bands' : 'Band';
    ?>
    <strong><?php echo $label; ?>:</strong> <?php echo implode( $bands, ', ' ); ?><br />
    <?php
endif;
?>
share|improve this answer
    
brilliant! thanks a bunch –  Kristina Childs Oct 12 '12 at 23:08

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.