published
,trashed
和pending
。我现在使用一个简单的查询,但它只返回已发布的帖子。$query = array(
'post_type' => 'my-post-type',
'post_author' => $current_user->ID
);
query_posts($query);
谁能帮忙?我还需要做什么?
#1 楼
您可以使用post_status参数:* 'publish' - a published post or page
* 'pending' - post is pending review
* 'draft' - a post in draft status
* 'auto-draft' - a newly created post, with no content
* 'future' - a post to publish in the future
* 'private' - not visible to users who are not logged in
* 'inherit' - a revision. see get_children.
* 'trash' - post is in trashbin. added with Version 2.9.
我不确定它是否接受“ any”,因此请使用具有所有所需状态的数组:
$args = array(
'post_type' => 'my-post-type',
'post_author' => $current_user->ID,
'post_status' => array('publish', 'pending', 'draft', 'auto-draft', 'future', 'private', 'inherit', 'trash')
);
$query = new WP_Query($args);
while ( $query->have_posts() ) : $query->the_post();
评论
您还可以使用get_post_stati()获取所有状态,包括自定义状态。
– fuxia♦
13年1月31日,11:52
浪费机会杀死query_posts呼叫...
– Tom J Nowell♦
13年4月16日在12:45
太糟糕了,我们不能做这样的事情'post_status'=> array('!inherit'); (指示除继承以外的任何post_status)
–aequalsb
17年1月3日,1:17
@aequalsb'post_status'=> array_diff(get_post_stati(),['inherit'])怎么样?
– Cheslab
18-10-29在13:05
题外话。实际上,“任何”都是真实的东西。文件:developer.wordpress.org/reference/classes/wp_query/…
– Kirillrocks
1月20日14:26
#2 楼
有一种简单的方法,如何获取所有状态为所有的帖子:$articles = get_posts(
array(
'numberposts' => -1,
'post_status' => 'any',
'post_type' => get_post_types('', 'names'),
)
);
现在您可以遍历所有帖子:
foreach ($articles as $article) {
echo $article->ID . PHP_EOL; //...
}
评论
$ posts和$ post与Wordpress自己的变量名冲突。如果您使用此代码将除主(主要内容)div之外的内容放入其他内容,这将覆盖main中显示的内容。如果您的目的确实是要完全替换原始查询结果,那么这当然是您想要的。但是重命名$ posts和$ post变量仍然是一个好主意。
–亨里克·埃兰森(Henrik Erlandsson)
2014年2月3日在7:54
@Henrik我根本不打算减少您的评论(您的逻辑是合理且安全的),但是我认为在函数内部使用$ post / $ posts是完全可以接受的,而无需访问全局$ post / $ posts变量-因为它有助于我在开发过程中保持逻辑。
–aequalsb
17年1月3日,1:14
#3 楼
WP_Query
类方法->query()
接受any
的post_status
参数。请参见wp_get_associated_nav_menu_items()
以获取证明。get_posts()
也是如此(它只是上述调用的包装器。)评论
从WP_Query文档中:'any'-从'exclude_from_search'设置为true的帖子类型中检索任何状态。 (那里有一个错字,它们实际上是指帖子状态,而不是帖子类型。)这意味着自动草稿和废纸status状态被排除。
– Tamlyn
13年4月15日在12:50
@Tamlyn Afaik,这不是错字。它从公开可用的帖子类型中检索任何状态。状态只是条款。他们自己没有公共或私有财产。您可以通过禁用query_var ...来禁用分类法,无论出于何种原因。旁注:职位状态的复数是...。
– kaiser
13年4月15日在14:30
如果您查找代码(通常比阅读文档更容易),您会发现WP_Query#get_posts()调用get_post_stati()会过滤$ wp_post_statuses以获取其中exclude_from_search为true的值,然后从查询中排除具有这些状态的帖子。当post_type设置为“ any”时,对于帖子类型也有类似的过程。
– Tamlyn
13年4月16日在11:15
@Tamlyn检查$ wp_post_statuses属性的内容后,我必须承认您是正确的:)
– kaiser
13年4月16日在12:07
不适用于垃圾箱状态。
– Maxwell s.c
18/12/10在20:56
#4 楼
在大多数情况下,您可以将get_posts()
与'any'
参数一起使用:$posts = get_posts(
array(
'numberposts' => -1,
'post_status' => 'any',
'post_type' => 'my-post-type',
)
);
但是这样一来,您将不会收到状态为
trash
和auto-draft
的帖子。您需要像下面这样明确地提供它们:$posts = get_posts(
array(
'numberposts' => -1,
'post_status' => 'any, trash, auto-draft',
'post_type' => 'my-post-type',
)
);
或者您可以使用get_post_stati()函数来显式提供所有现有状态:
$posts = get_posts(
array(
'numberposts' => -1,
'post_status' => get_post_stati(),
'post_type' => 'my-post-type',
)
);
#5 楼
即使将any
传递为post_status
,如果满足以下所有条件,您仍然不会获得结果的帖子:正在查询单个帖子。例如,可以通过
name
来查询,即slug。帖子的发布状态为非公开。
客户端没有活动的管理会话,即您当前尚未登录。
解决方案
显式查询每个状态。例如,要查询不是
trash
或auto-draft
的stati(您不太可能想要这些),您可以执行以下操作: $q = new WP_Query([
/* ... */
'post_status' => get_post_stati(['exclude_from_search' => false]),
]);
评论
您是否尝试过使用post_status参数,即。 'post_status'=>'任何'?我强烈建议使用WP_Query pre_get_posts或get_posts而不是query_posts。切勿使用query_posts
@TomJNowell:那是回溯了:)我现在最常使用WP_Query。.
@Sisir小心点,将WP_Query用作前端,并将get_posts用作管理员查询,因为wp_reset_postdata存在问题(请参阅有关此问题的说明和票证)。