手动设置带有ID的全局$POST变量,以便使用模板标记

时间:2011-10-10 作者:Mild Fuzz

我有一个函数,可以通过非常特定的方式检索帖子的ID。

我需要能够设置global $post 为了使用以下函数the_content(), 它不允许ID作为参数。

我怎样才能做到这一点?

4 个回复
SO网友:Chris_O

完成循环时,请添加以下内容:

global $post; 
$post = get_post( $ID, OBJECT );
setup_postdata( $post );

//Do something

wp_reset_postdata();

SO网友:wdalhaj

要使用POST输出循环,请尝试使用:

get_post(post_id)

要从循环中获取具有特定ID的帖子,执行此操作时,全局对象$post将保留您刚刚选择的帖子。现在,您可以使用以下方式获取内容:

$post->post_content .

检查get_post documentation on Wordpress Codex

SO网友:Enrique Muñoz López

对我有效的解决方案是:

  1. global $post; 循环前setup_postdata($post); 回路内部wp_reset_postdata(); 循环后,请考虑变量名称必须为$post

SO网友:Mat Lipe

可以使用单行线重置全局post对象。

setup_postdata( $GLOBALS[\'post\'] =& $custom_post_object );
完成模板或循环后,请确保重置全局帖子,这样就不会进一步分解堆栈中的其他模板。

wp_reset_postdata();
注:PHPCS WordPress标准会抱怨覆盖了全球帖子,因此,如果您使用WordPress标准,则需要对以下行禁用它:

setup_postdata( $GLOBALS[\'post\'] =& $post ); //phpcs:ignore

结束

相关推荐

output custom Posts on a Page

我正在尝试编写一个函数,该函数将在页面上输出一组帖子。因为我想显示的不仅仅是帖子标题,wp_get_archives() (我想)不行。添加帖子列表的函数解析页面元,以找出应该输出什么类型的列表。然后,它对这些帖子类型运行查询,并使用中使用的相同模板片段输出它们archive-{posttype}.php. 至少应该是这样的。这是我的functions.php 文件:function ASH_archive(){ global $posts; $postholder=pos