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

问题描述 投票:0回答:1

我只写下面的代码

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

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

我做错了什么?

php wordpress
1个回答
0
投票

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

Screenshot of properly indented and formatted code

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

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

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

pre_get_posts

只需将其放入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_front_page()以显示常规 [! is_admin()]的私人帖子>

© www.soinside.com 2019 - 2024. All rights reserved.