2017-08-08 83 views
0

我有用户ID的数组:如何从WordPress中的用户ID数组中获取帖子?

$users_id_array = array('1','23','4','7') 

我需要显示该阵列的所有帖子。

我已经尝试了几个代码,但它不起作用。

首先我得到使用递归查询的MySQL用户ID的数组,然后我申请一个过滤器上get_posts

add_filter('get_posts', 'posts_filter_by_id'); 
function posts_filter_by_id($query) { 
    global $wpdb; 
    $usuarios_visibles= array(); 
    // This is a recursive search for get user's id. 
    $busca_usuarios_visibles = $wpdb->get_results( 
     $wpdb->prepare("   
      SELECT * FROM wpbc_lists_father WHERE id_padre = %d 
     UNION SELECT * FROM wpbc_lists_father WHERE id_padre IN 
      (SELECT id_hijo FROM wpbc_lists_father 
      WHERE id_padre = %d)", 
      get_current_user_id(), get_current_user_id() 
      ) 
    ); 
    foreach ($busca_usuarios_visibles as $uv){array_push($usuarios_visibles, $uv->id_hijo);} 
    array_push($usuarios_visibles, get_current_user_id()); 

$args = array(
    'posts_per_page' => 5, 
    'offset'   => 0, 
    'category'   => '', 
    'category_name' => '', 
    'orderby'   => 'date', 
    'order'   => 'DESC', 
    'include'   => '', 
    'exclude'   => '', 
    'meta_key'   => '', 
    'meta_value'  => '', 
    'post_type'  => 'post', 
    'post_mime_type' => '', 
    'post_parent'  => '', 
    'author'  => $usuarios_visibles, 
    'author_name'  => '', 
    'post_status'  => 'publish', 
    'suppress_filters' => true 
); 
$query = get_posts($args); 
    //$query->set('posts_per_page', 3); 
    //$query->set('author', $busca_usuarios_visibles); 
    //$query->set('author', get_current_user_id());  
    return $query; 
} 
+1

按照SO指引,你应该表现出你的代码/努力你都试过了。 – Nipun

+0

我试过了几个代码,但没有任何结果......最后一个代码: –

+0

[编辑]你的问题包括迄今为止尝试过的一个例子。 –

回答

2

WordPress的这个功能提供了已经。

使用阵列作为一个起点,我们需要把它传递给WP_Query对象之前将它转换成一个逗号分隔列表。

$users_id_array = array('1','23','4','7'); 

// Convert to comma separated list 
$user_ids = implode(',', $users_id_array); 

// Get all posts by these authors 
$query = new WP_Query(array( 
    'post_type' => 'post', 
    'author' => $user_ids 
)); 

从这里,您可以遍历$query对象来显示帖子。

或者,你可以使用author__in代替(它不需要为implode()得到一个逗号分隔字符串):

$users_id_array = array('1','23','4','7'); 

$query = new WP_Query(array( 
    'post_type' => 'post', 
    'author__in' => $users_id_array 
)); 
0

现在这项工作,非常感谢!你的代码简单而优雅!

这是代码:

add_filter('pre_get_posts', 'posts_filter_by_id'); 
function posts_filter_by_id($query) { 
/* Comment this real code 
    global $wpdb; 
    $usuarios_visibles= array(); 
    $busca_usuarios_visibles = $wpdb->get_results( 
     $wpdb->prepare("   
      SELECT * FROM wpbc_lists_father WHERE id_padre = %d 
     UNION SELECT * FROM wpbc_lists_father WHERE id_padre IN 
      (SELECT id_hijo FROM wpbc_lists_father 
      WHERE id_padre = %d)", 
      get_current_user_id(), get_current_user_id() 
      ) 
    ); 
    foreach ($busca_usuarios_visibles as $uv){array_push($usuarios_visibles, $uv->id_hijo);} 
    array_push($usuarios_visibles, get_current_user_id()); */ 
    $users_id_array = array('1','23','4','7'); 
    $user_ids = implode(',', $users_id_array); 
    $query->set('author', $user_ids); 
    $query->set('posts_per_page', 5); 
    return $query; 
相关问题