我只写以下代码
if ( is_user_logged_in() )
{
$filter = array(
'post_status' => 'private',
);
}
else
{
$filter = array(
'post_status' => 'publish',
);
}
我有带标头的标头,因此它应该可以工作。 但总是出现“发布”帖子
我做错了什么?
答案 0 :(得分:0)
欢迎堆栈溢出!看来您遇到了一些问题。首先,请确保您的代码使用缩进/空格正确格式化。如果没有一致的格式结构,将很难快速阅读非常:
话虽如此,看来您已经有一种方法可以继续理解WordPress编程的基础,并且/或者您没有包括所有代码。例如,$filter
引用什么,何时/何处运行此代码?您可能在示例中缺少了周围的代码,或者只是将该代码放在了某个地方,没有任何东西可供参考和修改。
WordPress使用Template Hierarchy,并且可以通过Filter Hooks和Action 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') );