微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

对于任何帖子类型,对于post_status = all等,WordPress的get_posts始终返回null

如何解决对于任何帖子类型,对于post_status = all等,WordPress的get_posts始终返回null

曾经在这里扯过我的头发,无法通过简单的查询返回任何帖子:

get_posts();

get_posts([
    'post_type' => 'meetings','post_status' => 'any'
]);

$posts = get_posts([
    'post_type'        => 'meetings','post_status'      => 'any','ping_status'      => 'any','suppress_filters' => true,'post_parent'      => null
]);

当我创建新的“会议”帖子类型时,我可以确认它是使用以下状态创建的:

{
   "ID":100,"post_author":"1","post_date":"2020-08-12 16:26:45","post_date_gmt":"2020-08-12 16:26:45","post_content":"","post_title":"Test","post_excerpt":"","post_status":"publish","comment_status":"closed","ping_status":"closed","post_password":"","post_name":"test-2","to_ping":"","pinged":"","post_modified":"2020-08-12 16:43:43","post_modified_gmt":"2020-08-12 16:43:43","post_content_filtered":"","post_parent":0,"guid":"http:\\/\\/esh.localhost\\/?post_type=meetings&p=100","menu_order":0,"post_type":"meetings","post_mime_type":"","comment_count":"0","filter":"raw"
}

这是注册自定义post_type的代码

register_post_type( 'meetings',[
    'show_ui' => true,'labels'  => array(
        'name' => 'Meetings','singular_name' => 'Meeting','add_new' => 'New Meeting','all_items' => 'All Meetings','add_new_item' => 'New Meeting','edit_item' => 'Edit Meeting','new_item' => 'New Meeting','view_item' => 'View Meeting','search_items' => 'Search Meetings','not_found' =>  'No meetings found','not_found_in_trash' => 'No Meetings found in trash','parent_item_colon' => 'Parent Meeting:',// 'parent' => 'eSupport',// 'menu_name' => 'eSupport'
    ),'show_in_graphql' => true,'hierarchical' => true,'graphql_single_name' => 'meeting','graphql_plural_name' => 'meetings','show_in_menu' => 'esh-sections'
]);

因此,有了这些帖子的详细信息,任何人都可以看到为什么get_posts可能始终返回空集吗?即使对于常规帖子(“ post_type” =>“全部”),它仍然为空。

如果有帮助,这里是确切的代码输出

$posts = get_posts([
    'post_type'        => 'meetings','posts_per_page'   => -1
]);

dlog("Post type exists?",post_type_exists( 'meetings' ) );
dlog("posts",json_encode($posts));

输出

[Wed Aug 12 13:09:49.732013 2020] [PHP7:notice] [pid 4371] [client ::1:60535] \nPost type exists?,referer: http://localhost:3000/dashboard
[Wed Aug 12 13:09:49.732072 2020] [PHP7:notice] [pid 4371] [client ::1:60535] \n1,referer: http://localhost:3000/dashboard
[Wed Aug 12 13:09:49.732105 2020] [PHP7:notice] [pid 4371] [client ::1:60535] \nposts,referer: http://localhost:3000/dashboard
[Wed Aug 12 13:09:49.732119 2020] [PHP7:notice] [pid 4371] [client ::1:60535] \n[],referer: http://localhost:3000/dashboard

解决方法

您应该使用post_status => any

$posts = get_posts([
    'post_type' => 'meetings','post_status' => 'any','posts_per_page' => -1
]);

var_dump($posts);
,

抱歉,我有一个动作正在过滤返回值:

add_action('pre_get_posts','ESH\Meetings::get_meetings_by_owner' );

禁用这些功能可以让我看到这些帖子。抱歉造成混乱!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。