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

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


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

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

#1 楼

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

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

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


,您将获得发布内容的遍历the_content上的所有过滤器(默认情况下包括wpautop())。

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

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


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

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

评论


我认为此最终解决方案不正确。来自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
17年9月1日11:00

#2 楼

找到了解决方案:

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


#3 楼

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

echo wpautop( $post->post_content );