ฉันได้คำตอบ 2 ข้อ
โซลูชันที่ 1 - foreach วนรอบและตรวจสอบผู้ใช้แต่ละคน
อันนี้มีพื้นฐานมาจากโซลูชันของ @ GhostToast แต่ด้วยฟังก์ชั่น WordPress ที่ได้รับการปรับปรุง
//new query with default args
$author_query = new WP_User_Query();
// Get the results
$authors = $author_query->get_results();
if( $authors ) {
foreach( $authors as $author ) {
if ( count_user_posts( $author->id ) >= 1 ) {
echo $author->display_name . '</br>';
}
}
} else {
echo "no users found";
}
โซลูชันที่ 2 - pre_user_query
การกระทำกางเกงแฟนซี
นี่คือสิ่งที่ฉันคิดเมื่อฉันโพสต์คำถามเมื่อพบการpre_user_query
กระทำในWP_User_Query
ชั้นเรียน หากคุณผ่านpost_count
เป็นorderby
พารามิเตอร์ของคุณแล้วบาง SQL แบบสอบถามแฟนซีที่ฉันจะไม่ได้คิดด้วยตัวเองเกิดขึ้นเพื่อเข้าร่วมตารางที่เหมาะสมด้วยกัน ดังนั้นสิ่งที่ฉันทำคือคัดลอกคำสั่งเข้าร่วมและเพิ่มลงในของฉันเอง นี่จะดีกว่าถ้าฉันสามารถตรวจสอบสถานะของมันก่อนที่จะเพิ่ม ... บางทีฉันอาจจะใช้การจับคู่สตริงในอนาคต แต่ตอนนี้เนื่องจากฉันเป็นผู้ตั้งค่าแบบสอบถามฉันรู้ว่ามันไม่ได้อยู่ที่นั่นและฉันก็ยังไม่ต้องกังวลเลย ดังนั้นรหัสกลายเป็นเช่นนั้น:
function authors_with_posts( $query ) {
if ( isset( $query->query_vars['query_id'] ) && 'authors_with_posts' == $query->query_vars['query_id'] ) {
$query->query_from = $query->query_from . ' LEFT OUTER JOIN (
SELECT post_author, COUNT(*) as post_count
FROM wp_posts
WHERE post_type = "post" AND (post_status = "publish" OR post_status = "private")
GROUP BY post_author
) p ON (wp_users.ID = p.post_author)';
$query->query_where = $query->query_where . ' AND post_count > 0 ';
}
}
add_action('pre_user_query','authors_with_posts');
แล้วใช้มัน
$args = ( array( 'query_id' => 'authors_with_posts' ) );
$author_query = new WP_User_Query( $args );
แนวคิดสำหรับquery_id
พารามิเตอร์มาจาก An Introduction to WP_User_Class
ซึ่งเป็นเพียงการอ้างอิงที่ดีมาก WP_User_Query
post_count
== 0