如何检查公告状态是设置为草稿还是待定?

时间:2018-02-28 作者:Neelam Khan

我想检查一篇帖子的状态,特别是我想知道一篇帖子是被设置为草稿还是被私下发布。

我有以下代码:

   if (\'draft\' !=  get_post_status() || is_user_logged_in()) {
        $this->render();
    }
    else {
        wp_redirect( site_url(\'404\') );
        exit;
    }
它检查帖子状态是否未设置为草稿,或者检查帖子是否已登录,然后呈现帖子或重定向到404页面。

出于某种原因,非登录用户可以看到私人发布的帖子,我正在尝试解决这个问题。

2 个回复
最合适的回答,由SO网友:Christine Cooper 整理而成

使用post状态检查postprivate, 您可以运行以下操作:

if (get_post_status() == \'private\' && is_user_logged_in()) {
     // it\'s private and user is logged in, do stuff
} elseif (get_post_status() == \'draft\') {
     // it\'s draft, do stuff
} else {
      // it\'s something else, do stuff
}
或者,在当前设置中,您只需通过以下方式显示已发布的帖子:

if (get_post_status() == \'publish\') {
     // it\'s published, do stuff
     $this->render();
}
您可以通过codex page.

SO网友:CodeMascot

我想问题出在你的逻辑上。|| 意味着如果满足任何条件,它将渲染,特别是如果满足第一个条件,它将不再检查第二个条件。因此,您的代码如下所示-

if( !is_user_logged_in() ) {
    return; // or do whatever you want to do if the user isn\'t logged in.

    // Or these below things 

    // wp_redirect( site_url(\'404\') );
    // exit;
}

if ( \'private\' === get_post_status()) {
    // Only render private posts.
    $this->render();
} else {
    wp_redirect( site_url(\'404\') );
    exit;
}
因此,我们在上面所做的是,首先检查用户是否登录。如果没有登录,我们将从那里返回它。无法达到下一个if条件。这样,您可以防止未登录用户看到此帖子。在您的代码中,如何满足第一个条件,以及if 未检查下一个条件。因此,未登录的用户可以看到您的帖子。现在是秒if 阻止我们正在检查post状态。如果岗位有private 只有状态才会呈现。另一方面,它将被重定向。

总之,一些小建议,使用!== 而不是!==== 而不是==. 这些检查类型也会严格检查。看我的代码,我用了这些。

希望以上内容有所帮助。

结束

相关推荐

修改WooCommerce Storefront子主题Single.php“Related Posts”时遇到问题

我想显示过去一周发布的某个类别的帖子。我使用query_posts() 但我已经读到了这是一个多么糟糕的主意。因此,我尝试创建一个可以修改并放入functions.php 然后直接调用或通过single.php “我的孩子”主题的单个博客帖子模板。我的功能从未起过作用,希望能得到一些帮助,找出我做错了什么。function new_function() { //Arguments $args = array( \'post_t