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
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.
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
.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With