如果否则,WP is_user_logged_in不会显示正确的内容

时间:2019-12-30 19:29:13

标签: php wordpress

我只写以下代码

if ( is_user_logged_in() ) 
{
    $filter = array(
        'post_status' => 'private',
    );
} 
else 
{
    $filter = array(
        'post_status' => 'publish',
    );
}

我有带标头的标头,因此它应该可以工作。 但总是出现“发布”帖子

我做错了什么?

1 个答案:

答案 0 :(得分:0)

欢迎堆栈溢出!看来您遇到了一些问题。首先,请确保您的代码使用缩进/空格正确格式化。如果没有一致的格式结构,将很难快速阅读非常

Screenshot of properly indented and formatted code

话虽如此,看来您已经有一种方法可以继续理解WordPress编程的基础,并且/或者您没有包括所有代码。例如,$filter引用什么,何时/何处运行此代码?您可能在示例中缺少了周围的代码,或者只是将该代码放在了某个地方,没有任何东西可供参考和修改。

WordPress使用Template Hierarchy,并且可以通过Filter HooksAction Hooks进行扩展。您至少需要对这些以及"The Loop"有一个一般的了解,才能真正让WordPress做您想要的事情。

根据您提供的摘录,您似乎只想向登录的用户显示私人帖子,我假设在您的主查询中。您可以使用pre_get_posts钩子来修改WP Loop查询。这样的事情应该会让您入门:

add_action( 'pre_get_posts', 'modify_query_if_logged_in' );
function modify_query_if_logged_in( $query ){
    // Abort if we're in /wp-admin or this isn't the main query
    if( ! is_admin() && $query->is_main_query() ){
        // If user is logged in
        if( is_user_logged_in() ){
            // Only show private posts
            $query->set( 'post_status', 'private' );
        }
    }
}

只需将其放入您的functions.php文件中,它就可以工作。您还可以添加其他所需条件,例如is_front_page()仅使其在主页上运行(这使! is_admin()变得多余和不必要),或将$query调整为同时显示带有$query->set( 'post_status', array('private', 'publish') );

的常规私人帖子
相关问题