0

I'm trying to display meta content from a custom post type in a shortcode. I'd like to simply provide a post_id and be able to display all the meta content.

[my_shortcode post_id=""]

I'm new to PHP and writing shortcodes, this seems as though it should be fairly simple... I know the following is wrong:

function promotion_function($atts) {
extract(shortcode_atts(array(
    'promo_id' => '',
), $atts));
global $post;
$meta_values = get_post_custom($promo_id, 'product_desc');

$output = $meta_values;
return $output;
}
add_shortcode('promotion', 'promotion_function');

The above code gives me the string "Array" in my page.

I can't find an example of how to do this, any help would be greatly appreciated.

1

You cannot print an array directly. The most basic return value you could use is var_export( $meta_values, TRUE );.

This will create a text representation of the value.

Probably better is a little walker like

$output = '';

foreach( $meta_values as $key => $value )
    $output .= "$key = " . esc_html( end( $value ) ) . '<br />';

return $output;
  • Ay, thank you. I had tried something similar with no luck. This certainly helps. Interesting; now I get an array for each key's value. I was expecting one value. I fear I may be asking some very basic questions... Is there a codex link I should be referencing for this? I've already reviewed the get_post_meta codex page.. Thanks again. – lauren Nov 11 '13 at 23:44
  • @lauren See this explanation: wordpress.stackexchange.com/a/100699/73 – fuxia Nov 12 '13 at 9:09
  • You rock. Thank you - I'll chew on that for a bit. – lauren Nov 12 '13 at 18:24
  • I'm still getting all of the keys displaying all of their values. I thought using 'true' would only display the first value. Here's my code: function promotion_function($atts) { extract(shortcode_atts(array( 'promo_id' => '', ), $atts)); $get_title = get_post_custom($promo_id, product_title', true); $title = esc_html( var_export( $get_title, TRUE ) ); return $title; } add_shortcode('promotion', 'promotion_function'); I apologise for my code block not being a code block; I'm finding the instructions for creating a code block in comments to be extremely unclear :/ – lauren Nov 12 '13 at 20:31
  • 1
    Alright, here is what worked: $meta_values = get_post_custom($promo_id, 'product_title', true); echo $meta_values['product_title'][0]; – lauren Nov 15 '13 at 2:00

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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