Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Wordpress: shortcode doesn't work when getting post content using function get_post_field()

I want to get the post content by id outside the loop, so i am using following code:

    echo get_post_field('post_content', $postid);

It works fine, however, if the post contains any shortcodes, the shortcodes don't work properly. It only echoes the shortcode as plain text.

Example: I'm using following code in editor to display image and caption text inder the image:

    [caption id="attachment_23" align="alignnone" width="300"]<img class="size-medium wp-image-23 " alt="" src="http://localhost/wordpress/wp-content/uploads/2014/03/Desert-300x225.jpg" width="300" height="225" /> this is caption[/caption]

But when i get this post content using function get_post_field(), Instead of displaying caption text, it displays:

    [caption id="attachment_23" align="alignnone" width="300"]this is caption[/caption] 

Any solution?

N.B: I am using ajax to get the contents

like image 515
user3396122 Avatar asked Mar 08 '14 13:03

user3396122


People also ask

Why is my WordPress shortcode not working?

Check whether the plugin providing the shortcode is active or not. If it is not active, then the shortcode won't work. 2. Your theme is outputting the post content without applying the needed filters to it.


2 Answers

You need to filter your content before displaying it, so try the following code:

echo apply_filters( 'the_content', get_post_field('post_content', $postid) );

Update: You can't output shortcodes using ajax calls hooked into wp_ajax. WP Ajax runs both public as well as closed calls via admin.php. This means that you don't have access to the whole wp environment, such as do_shortcode(), which is inside /wp-includes/shortcodes.php.

like image 122
andreivictor Avatar answered Oct 19 '22 16:10

andreivictor


This will work:

echo do_shortcode(get_post_field('post_content', $postid));

Edit

If you want to forcefully output shortcode within Ajax, please see running shortcode inside AJAX request

like image 25
Rahil Wazir Avatar answered Oct 19 '22 15:10

Rahil Wazir