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();
}

コメントを残す
コメントを投稿するにはログインしてください。