WordPress:使用函数get_post_field()获取文章内容时,短代码不起作用。

15

我想要在循环外通过文章ID获取文章内容,因此我使用以下代码:

    echo get_post_field('post_content', $postid);

它的工作正常,但是如果文章包含任何短代码,则短代码不会正常工作。 它只会将短代码作为纯文本回显。

例如: 我在编辑器中使用以下代码来显示图像和图像下方的说明文字:

    [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]

但是,当我使用函数 get_post_field() 获取此帖子的内容时,它显示的不是标题文本,而是:

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

有什么解决方案吗?

注:我正在使用ajax获取内容。

2个回答

24

这将有效:

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

编辑

如果您希望在Ajax中强制输出短代码,请参阅在AJAX请求中运行短代码


这个可以工作,但是我正在尝试使用ajax请求获取内容。在那种情况下它不起作用 :( - user3396122
3
使用ajax无法输出短代码。因为在进行ajax请求时,“admin-ajax.php”不知道“shortcodes.php”文件。使用ajax请求时无法访问整个wp环境。 - Rahil Wazir
1
对于未来的读者:如果您想在Ajax中强制输出短代码,请参见:https://wordpress.org/support/topic/running-shortcode-inside-ajax-request?replies=9#post-5324569 - Rahil Wazir

17

在显示内容之前,您需要对其进行过滤,因此请尝试以下代码:

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

更新: 您不能使用钩入wp_ajax的Ajax调用输出短代码。 WP Ajax通过admin.php运行公共和私有呼叫。这意味着您无法访问整个wp环境,例如在/wp-includes/shortcodes.php内部的do_shortcode()


这个可以运行,但是我正在尝试使用ajax请求来获取内容。在这种情况下它不起作用 :( - user3396122
这个工作是正确的,因为 do_shortcode 错误地转换了新行。 - fdrv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接