WP_User_Queryに任意のPost Typeを連携させる。
WP_User_Query
戻り値($user_datas->results)に、post_authorとpost_countが追加される。
1.WP_User_Queryにサブクエリーを追加する。
WP_User_Query
追加パラメータ
post_type : JOINするポストタイプ ‘post’,’Page’やカスタムポストタイプなど
post_exist : 連携するpostの検索結果の表示方法
true : 連携する投稿があるものだけ表示する。
戻り値
$user_datas->resultsに、
post_author : post_author 無い場合は、nullがセットされる。
post_count : post_count 無い場合は、nullがセットされる。
function wp_user_query_join_post($query) { if(isset( $query->query_vars['post_type'] ) ) { $query->query_fields = $query->query_fields . ', post.*'; $query->query_from = $query->query_from . ' LEFT OUTER JOIN ( SELECT post_author, COUNT(*) as post_count FROM wp_posts WHERE post_type = "'.$query->query_vars['post_type'].'" AND (post_status = "publish" OR post_status = "private") GROUP BY post_author ) post ON (wp_users.ID = post.post_author)'; if ( isset( $query->query_vars['post_exist'] ) ) { if(false == ($query->query_vars['post_exist'] )) { $query->query_where = $query->query_where . ' AND post_count is null '; }elseif('all'===$query->query_vars['post_exist']){ $query->query_where = $query->query_where; }else{ $query->query_where = $query->query_where . ' AND post_count > 0 '; } }else{ $query->query_where = $query->query_where . ' AND post_count > 0 '; } } } add_action('pre_user_query', 'wp_user_query_join_post');
2.WP_User_Queryを呼び出す。
function user_join_post() { // Pageing $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $limit = 5; $offset = ($paged - 1) * $limit; // WP_User_Query $user_datas_args = array( 'role' => 'Author', 'number' => $limit, 'offset' => $offset, 'post_type' => 'Post', // 呼び出すPost Type 'post_exist' => 'all' // 検索対象 ); $user_datas = new WP_User_Query($user_datas_args); echo '<p>wp_users:'.$user_datas->total_users.'</p>'; // 以下は、任意で処理を行う。 $user_datas_results = $user_datas->results; foreach ($user_datas_results as $user_data) { // var_dump($user_data->data); // $user_data->post_count : 投稿件数、無い場合はnull } // wp_pageNavi if(function_exists('wp_pagenavi')) { ob_start(); wp_pagenavi(array('query'=>$user_datas,'type' => 'users')); $html .= ob_get_clean(); }
コメントを残す
コメントを投稿するにはログインしてください。