2017-08-08 13 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ガイドラインを1として、あなたがしようとしているものをあなたのコード/努力を示すべきです。 – 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オブジェクトをループすることができます。

また、あなたは(カンマ区切り文字列を取得するimplode()の必要性を除去する)代わりにauthor__inを使用することができます。

$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; 
関連する問題