Php 停止WordPress在get_帖子中过滤客人的草稿帖子

Php 停止WordPress在get_帖子中过滤客人的草稿帖子,php,wordpress,Php,Wordpress,我在WordPress网站上有一个页面,该页面使用了一个模板,在该模板中,我使用get_posts获取我的CPT结果。在我的CPT中,一次只允许一篇文章具有publish状态,而其他文章处于draft模式。但是,我希望来宾用户(即无法访问我网站上帐户的网站访问者)能够访问该页面并查看处于草稿状态的帖子 我正在使用这些参数获取结果 $args = array( 'name' => $slug, 'post_type' => 'ca

我在WordPress网站上有一个
页面
,该页面使用了一个模板,在该模板中,我使用
get_posts
获取我的CPT结果。在我的CPT中,一次只允许一篇文章具有
publish
状态,而其他文章处于
draft
模式。但是,我希望来宾用户(即无法访问我网站上帐户的网站访问者)能够访问该页面并查看处于草稿状态的帖子

我正在使用这些参数获取结果

$args = array(
              'name' => $slug,
              'post_type' => 'catalog',
              'post_status' => array('draft', 'publish'),
              );
$catalogs = get_posts($args);
上面的代码对于已登录的用户来说效果很好,但当我注销时返回空代码。我肯定是一些WordPress过滤器造成的。我想不出怎么让它停下来


附加信息:我可以使用
$wpdb
获取所需的结果,但我希望这也可以通过一些自定义过滤器来实现。我做了研究,但没有发现任何有用的东西,WordPress Codex也没有包含任何有关这方面的信息。

好的,我想我明白你的意思了。请尝试下面的代码片段

/*
 * On drafts should be visible.
 */
function show_drafts( $query ) {
    $query->set( 'post_status', array( 'publish', 'draft' ) );
}

add_action( 'pre_get_posts', 'show_drafts' );

当您使用get_posts方法时,这应该允许草稿和发布对每个人都可见。

您放入的代码与正在发生的事情不符。这肯定不是你放在那里的代码造成的。导致它的原因可能是您网站中的一段代码,我们永远不会知道,因为在用户未登录时,没有任何过滤器或挂钩会导致您的代码段无法运行。我的建议是,禁用主题中的所有插件或动作挂钩,以确定发生了什么。我也检查了代码,但没有任何东西可以这样做。所有使用的插件都是我写的,没有一个能真正理解如何检索帖子。我确实在互联网上发现一些人说WordPress确实禁止访客访问草稿帖子,但仍然得不到任何草稿。我还尝试使用
$args['post_status']=array('any')但这也没用。