如何创建筛选出多个作者的WordPress查询?

时间:2013-04-01 18:19:49

标签: php database wordpress join

我一直在尝试做一个WordPress查询,并遇到了一个很大的障碍。以下是我想查询帖子的方式:

<?php query_posts( 's=@' . $user_login . '&author=-4,-5,-6&posts_per_page=25&paged='. $paged ); ?>

从这段代码中可以看出,我试图排除ID为4,5和6的作者。但是,WordPress目前不允许使用此功能(与类别一样)。

有没有人有任何想法如何实现这一目标 - 也许是自定义查询/加入?任何帮助都会非常感激!

3 个答案:

答案 0 :(得分:0)

更改

<?php query_posts( 's=@' . $user_login . 'author=-4,-5,-6' '&posts_per_page=25' . '&paged='. $paged );

<?php query_posts( 's=' . $user_login . '&author=-4&author=-5&author=-6&posts_per_page=25&paged='. $paged );

消除多个作者呼叫

author = -4&amp; author = -6 .... so on

参考:http://www.yoursearchbuddy.com/wordpress-show-post-exclude-author

答案 1 :(得分:0)

WordPress目前不支持一次从查询中删除多个作者帖子。

但是我们可以使用另一个钩子posts_where来删除我们不需要的作者。但是如果我们使用这个钩子,它将影响WordPress中的所有位置。所以我们在挂钩这个过滤器时要小心。

如果您将其添加到functions.php文件中,它将在所有post_where挂钩的查询中运行。

在主题的functions.php中添加此功能。

function remove_author_posts ($where) {
    global $wpdb; 

    //add the author id's you need to remove
    $removed_authors   = array ('4', '5', '6');

    $where .= ' AND ' .  $wpdb->posts . '.post_author !=' . implode(' AND ' .  $wpdb->posts . '.post_author !=', $removed_authors);
    return $where;
}

现在将此过滤器添加到您调用query_posts

的位置
add_filter ('posts_where', 'remove_author_posts');

请勿在主题functions.php文件中添加此过滤器挂钩。只添加你需要的地方。

现在更改您的查询帖子,并在您需要的页面中添加过滤器,如下所示:

query_posts( 's=' . $user_login . '&posts_per_page=25&paged='. $paged );

所以完整的东西看起来像

add_filter ('posts_where', 'remove_author_posts');
query_posts( 's=' . $user_login . '&posts_per_page=25&paged='. $paged );

更新:

如果您需要动态更改作者ID,可以使用global变量。在添加过滤器之前添加新的global变量$remove_authors

global $removed_authors ;
//add the author id's you need to remove
$removed_authors   = array ('4', '5', '6');

add_filter ('posts_where', 'remove_author_posts');
query_posts( 's=' . $user_login . '&posts_per_page=25&paged='. $paged );

现在更改functions.php文件中的remove_author_posts

function remove_author_posts ($where) {

    global $wpdb, $removed_authors;

    if (empty ($removed_authors) || !is_array($removed_authors))
        return $where;

    $where .= ' AND ' .  $wpdb->posts . '.post_author !=' . implode(' AND ' .  $wpdb->posts . '.post_author !=', $removed_authors);

    return $where;
}

希望这可以帮助你:)

答案 2 :(得分:0)

我知道这是一篇旧帖子,但为了任何googlers的利益,现在可以使用WP_Query以更好的方式执行此操作,自WordPress v3.7开始:http://codex.wordpress.org/Class_Reference/WP_Query#Author_Parameters < / p>

您也可以通过这种方式排除多位作者:

$query = new WP_Query( array( 'author__not_in' => array( 4, 5, 6 ) ) );