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 have products with a list of custom field values which are loaded via CSV, but not all products have a value for every custom field as the field is not relevant to that product. I want to be able to call up every relevant custom field name and its value on the page for each product.

I am using this which does display the custom field value (only) on the page:

<?php echo get_post_meta( get_the_ID(), 'current_promotions', true ); ?>

However I would like to display the field name and value for each product where appropriate.

Can anyone help?

share|improve this question
add comment

1 Answer

You can use <?php the_meta(); ?> to do this (id you want to print them inside the Loop).

From Codex:

This is a simple built-in function for displaying custom fields for the current post, known as the "post-meta" (stored in the wp_postmeta table). It formats the data into an unordered list (see output below).

It must be used from within The Loop or in a theme file that handles data from a single post (e.g. single.php). the_meta() will ignore meta_keys (i.e. field names) that begin with an underscore.

So this:

<p>Meta information for this post:</p>
<?php the_meta(); ?>

Will output this:

<ul class='post-meta'>
    <li><span class='post-meta-key'>your_key:</span> your_value</li>
    ... other fields
</ul>

Of course you can also do something like this (it's much easier to customize this code):

if ( $keys = get_post_custom_keys($post_id) ) {  // $post_id is ID of your post
    echo "<ul class='post-meta'>\n";
    foreach ( (array) $keys as $key ) {
        $keyt = trim($key);
        if ( is_protected_meta( $keyt, 'post' ) )
            continue;
        $values = array_map('trim', get_post_custom_values($key));
        foreach ( $values as $k=>$value ) {
            if ( $value == '' ) {  // or whatever is your way to find if value is irrelevant
                unset($values[$k]);
            }
        }
        $value = implode($values,', ');
        echo apply_filters('the_meta_key', "<li><span class='post-meta-key'>$key:</span> $value</li>\n", $key, $value);
    }
    echo "</ul>\n";
}
share|improve this answer
    
Thank you for your help, but I'm afraid it has not answered my question. I'm looking for some code which will include all the custom fields but will only apply a field value to the relevant products. So for example if a product has a particular field value of 0 the custom field name will not be listed on the item's page - it will effectively be ignored. Can anyone help please? –  Ajj Aug 1 '13 at 13:28
    
Well, there are 2 solutions then. 1. You shouldn't add custom fields which won't apply to this product (You don't have to add all custom fields to all product - you can delete some custom fields from given product). 2. Just add an if to my second code (see updated answer). –  Krzysiek Dróżdż Aug 1 '13 at 13:42
    
Thanks for your help. –  Ajj Aug 1 '13 at 14:03
    
No problem. You can mark this answer as correct, if it helped you solve your problem. –  Krzysiek Dróżdż Aug 1 '13 at 18:11
add comment

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.