2015-09-30 39 views
0

我的WordPress网站上有一个page,它使用了模板,并且在该模板中,我使用get_posts来获取我的CPT的结果。在我的CPT中,只允许一个职位同时拥有publish的身份,而其他职位则保持在draft模式。但是,我希望访客用户(即无法访问我网站上的帐户的网站访问者)能够访问该网页并查看处于其草稿状态的帖子。阻止WordPress过滤掉get_posts中的客人的草稿帖子

我使用这些参数传递给取结果

$args = array(
       'name' => $slug, 
       'post_type' => 'catalog', 
       'post_status' => array('draft', 'publish'), 
      ); 
$catalogs = get_posts($args); 

上面的代码工作正常登录的用户,但是当我退出它返回空。我敢肯定,一些WordPress过滤器是负责这一点。我无法弄清楚如何让它停止。

附加信息:我可以使用$wpdb获取想要的结果,但我希望这也可以通过一些自定义过滤器来完成。我做了我的研究,但找不到任何有用的东西,WordPress Codex不包含任何有关这方面的信息。

+0

您放入的代码并不会添加到正在发生的事件中。这绝对不是你放置在那里的代码造成的。是什么导致它可能是您的网站中的代码,我们永远不会知道,因为没有过滤器或挂钩可能导致您的代码段在用户未登录时无法运行。我的建议是,禁用所有插件或操作挂钩主题来确定发生了什么。 – cylua2

+0

我也检查了代码,但没有什么可以做到这一点的。所有使用的插件都是由我编写的,它们都没有真正涉及到如何检索帖子。我确实在网上找到一些人说WordPress可以禁止客人访问草稿文档 –

回答

0

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

/* 
* 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方法时对所有人都可见。

+0

仍然没有任何草稿。我也试过使用'$ args ['post_status'] = array('any');'但这也没有帮助。 –