Reputation: 153
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
Upvotes: 15
Views: 30362
Reputation: 10132
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
Upvotes: 24
Reputation: 8481
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
.
Upvotes: 17