为什么在unctions.php和index.php中使用QUERY_POST时相同的代码得到不同的结果

时间:2013-06-24 作者:diligent

我正在使用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);
是的,有结果了,我不知道为什么?代码是一样的,但为什么我得到了不同的结果。

1 个回复
最合适的回答,由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\' );

结束

相关推荐

对外部PHP脚本中GET_POSTS返回的帖子进行计数

我使用外部PHP脚本中的WP,包括wp-load.php 文件到目前为止,所有功能和一切都按预期工作,除了一件事:我无法获得$wp_query->found_posts 在我用get_posts() 作用有什么提示我应该用什么来代替吗?谢谢