如何在不剥离<p>标签的情况下获取“ post_content”?


20

我正在尝试检索特定帖子的帖子内容:

$post = get_post(/* id */);
$content = $post->post_content;

但是,这将检索没有换行符的内容,并省略所有<p>标签。

在不剥离<p>标签的情况下检索帖子内容的正确方法是什么(如帖子页面或帖子编辑器的“ 文本 ”选项卡所示)?

Answers:


30

到目前为止,这两个答案都是正确的,但似乎需要更彻底的答案。

如果使用此:

$content = wpautop( $post->post_content );

您正在应用一个将段落标记添加到帖子内容的功能。wpautop()是挂接到的众多函数(有时包括插件函数)之一the_content,因此,如果您这样做:

$content = apply_filters('the_content', $post->post_content);

您将通过所有默认情况下the_content包含wpautop()的过滤器来运行帖子内容。

最后,如果您处于循环中,则可以执行以下操作:

$content = apply_filters( 'the_content', get_the_content() );

实际上,这是第二个代码段的包装,但当然看起来更好。更新2018年9月1日:根据评论进行了修订。道具@timmb。

通常,我会说,这样做的首选“正确方法”是从头到尾,因为使用核心WP函数应该可以实现更多的向后兼容性(至少在理论上是如此)。唯一要做的其他决定就是您是否要允许WordPress和插件也修改帖子内容。如果是这种情况,请绝对使用第二或第三选项。


1
我认为此最终解决方案不正确。来自codex.wordpress.org/Function_Reference/get_the_content:“与the_content()的重要区别是get_the_content()不会通过'the_content'过滤器传递内容。” 这不是建议正确的方法$content = apply_filters('the_content', get_the_content);吗?
Tim MB


4

使用p标签获取帖子内容的第二种方法是

echo wpautop( $post->post_content );
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.