我一直在尝试做一个WordPress查询,并遇到了一个很大的障碍。以下是我想查询帖子的方式:
<?php query_posts( 's=@' . $user_login . '&author=-4,-5,-6&posts_per_page=25&paged='. $paged ); ?>
从这段代码中可以看出,我试图排除ID为4,5和6的作者。但是,WordPress目前不允许使用此功能(与类别一样)。
有没有人有任何想法如何实现这一目标 - 也许是自定义查询/加入?任何帮助都会非常感激!
答案 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 ) ) );