我正在使用WordPress 3.5,我的博客站点有许多注册用户。登录后,我希望他们只看到自己的帖子,而不是其他帖子。
所以我在我的functions.php
, 但我得到了一张空白页。
function only_login_user_post_on_homepage() {
$current_user = wp_get_current_user();
query_posts(\'author=\', $current_user -> ID);
}
add_action( \'pre_get_posts\', \'only_login_user_post_on_homepage\' );
因此,我对
add_action
, 然后转到
index.php
, 添加相同的代码:
$current_user = wp_get_current_user();
query_posts("author=".$current_user -> ID);
是的,有结果了,我不知道为什么?代码是一样的,但为什么我得到了不同的结果。
最合适的回答,由SO网友:TheDeadMedic 整理而成
在第一个代码示例中,您钩住pre_get_posts
操作,该操作在主查询期间激发。但不是操纵该查询,而是使用query_posts()
, 这会再次触发钩子,最终得到一个无限循环。
对于第二个代码示例,您只是在主查询发生后重写它。但是,虽然它可以工作,但最终您会遇到一个冗余、耗时的查询。
你就快到了,这是你努力的支柱,所以让我们一起来:
function wpse_103997_only_posts_by_current_user( $wp_query ) {
if ( is_user_logged_in() && $wp_query->is_main_query() && $wp_query->is_home() )
$wp_query->set( \'author\', get_current_user_id() );
}
add_action( \'pre_get_posts\', \'wpse_103997_only_posts_by_current_user\' );