WP_QUERY不能排除多个作者吗?

时间:2012-09-25 作者:dev-jim

wp\\u查询似乎存在一个问题,即它在author参数中不接受超过1个负值。例如:

$args = array(\'author=-2,-3,-4\'); 
$newquery = WP_Query($args); 
这就抓住了其他一切。根本不起作用。

我找到了这个trac, 但似乎仍然没有官方补丁。

有什么建议吗?

4 个回复
SO网友:Ralf912

您是对的,不可能通过传递具有作者ID的数组来排除它们。原因在于wp-includes/query.phpline 2294 - 2298

if ( strpos($q[\'author\'], \'-\') !== false ) {
  $eq = \'!=\';
  $andor = \'AND\';
  $q[\'author\'] = explode(\'-\', $q[\'author\']);
  $q[\'author\'] = (string)absint($q[\'author\'][1]); // this line select the first ID and only this ID
} else {
  $eq = \'=\';
  $andor = \'OR\';
  }
您必须获得所有作者ID,然后排除不需要的作者,并向其余作者请求帖子

// array for user IDs
$users   = array();

// roles to include
$roles   = array( \'author\', \'editor\', \'contributor\', \'administrator\', \'superadmin\' );

// user IDs to exclude
$exclude = array( 2,3,5 );

// get all users
$_users = get_users();

foreach ( $_users as $user ) {

    // do not add the user ID if the users role does not match or the users ID is excluded
    if ( in_array( $user->ID, $exclude ) || ! in_array( $user->roles[0], $roles ) )
        continue;

    // add user
    array_push( $users, $user->ID );

}

$args = array(\'author=\' . implode( \',\', $users ); 
$newquery = WP_Query( $args );

SO网友:Pikamander2

截至年月日WordPress version 3.7 (2013年10月发布),您现在可以使用author__inauthor__not_in 传递作者ID数组。请注意,它们都在“author”一词后使用了两个下划线。

下面是排除作者ID 2、3和4的方法:

$query = new WP_Query( array( \'author__not_in\' => array( 2, 3, 4 ) ) );

Here\'s a link to the codex.

Here\'s a link to the developer docs.

SO网友:Ben HartLenn

我之前没有意识到这一点,但似乎您目前无法使用WP\\u Query排除多个作者的帖子,我已经更新了Codex以减少误导。

以下是一种使用$wpdb类从多个作者处排除帖子的方法:

<?php

   $results = $wpdb->get_results(
   "Select * FROM $wpdb->posts
   WHERE post_type = \'post\'
   AND post_status = \'publish\'
   AND post_author <> 2
   AND post_author <> 3", 
   OBJECT
   );// gets posts, that are published, and exclude posts written by authors 2 and 3

   foreach($results as $result)
   {
   echo "<h2>".$result->post_title."</h2>";
   }
?>

SO网友:Jamie

“未经测试”,但你能这样做吗?

 function filter_pre_get_posts( $query ) {

// If this is the blog posts index,
// and if this is the main query,

if ( $query->is_home() && $query->is_main_query() ) {
    $query->set( \'author\', -2,-3,4);
    }
 }
 add_action( \'pre_get_posts\', \'filter_pre_get_posts\' );
这是我在这里学习的排除类别的函数。不确定是否可以由作者使用它来排除,但如果它可以工作,它比编写自定义查询要好得多

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post