0

我一直在尝试进行 WordPress 查询,但遇到了很大的障碍。这是我要查询帖子的方式:

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

正如您从这段代码中看到的那样,我试图排除 id 为 4、5 和 6 的作者。但是,WordPress 目前不允许此功能(与类别一样)。

有没有人知道如何实现这个目标——也许是自定义查询/加入?任何帮助将不胜感激!

4

3 回答 3

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 );

消除多个作者调用为

作者=-4&author=-6 .... 依此类推

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

于 2013-04-01T18:44:42.627 回答
0

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

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

如果将它添加到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 );

更新 :

global如果您需要动态更改作者 ID,则可以使用变量。在添加过滤器之前添加一个新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;
}

希望这可以帮助你:)

于 2013-04-01T19:01:34.850 回答
0

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

您还可以通过这种方式排除多个作者:

$query = new WP_Query( array( 'author__not_in' => array( 4, 5, 6 ) ) );
于 2014-12-18T23:30:24.250 回答