Запрос на возврат максимум одной записи на автора

Мы представляем область «признакам автора» на нашем сайте и хотели бы отображать последние статьи избранной группы авторов. Тем не менее, мы хотим получить максимум одну публикацию для каждого автора. Таким образом, автор мог бы опубликовать 5 раз с момента публикации другого автора, но независимо от того, какой из них должен появиться. В настоящее время это код, который у меня есть:

<?php $args = array( 'showposts' => 5, 'author' => "6800,3845,1720,7045,4949" ); $the_query = new WP_Query( $args ); while ( $the_query->have_posts() ) : $the_query->the_post(); ?> // DISPLAYING STUFF <?php endwhile; wp_reset_query(); ?> 

Одно потенциальное решение, которое я рассмотрел, – это запрос к большему количеству сообщений и настройка массива, а затем проверка массива каждый раз, чтобы увидеть, есть ли в нем автор. Если они есть, это будет продолжаться до следующей строки. Но очевидная проблема с этим была бы в том, что я, возможно, в конечном итоге смогу отбросить 100 сообщений, если конкретный «признанный автор» не написал какое-то время.

Я до сих пор довольно новичок в PHP / MySQL, и решение, вероятно, в меня в лицо. Цените любую помощь.

Вам необходимо GROUP BY по идентификатору автора, для которого требуется фильтр на posts_groupby . Страница Codex для этого фильтра не существует, но работает как posts_join . Что-то вроде…

 function filter_authors($groupby) { global $wpdb; $groupby = " {$wpdb->posts}.post_author"; return $groupby; } add_filter('posts_groupby','filter_authors'); $args = array( 'showposts' => 3, 'author' => "1,2,3" ); $the_query = new WP_Query( $args ); while ( $the_query->have_posts() ) : $the_query->the_post(); echo $post->post_title.' :: '.$post->post_author."<br/>"; endwhile; 

Используйте свои собственные значения в $args конечно.

который будет выполнять любой другой запрос на странице, которая запускается после этого блока кода. Вы можете удалить фильтр после завершения.

 remove_filter('posts_groupby','filter_authors'); 

Другим подходом может быть использование функции, которая проходит через get_posts и выводит результат.

Проверьте этот вопрос: когда вы должны использовать WP_Query vs query_posts () и get_posts ()?

 // function located in the theme's functions.php function wpse_78117_print_authors_last_post() { $user_ids = array( '1', '2' ); foreach( $user_ids as $user ) { $args = array( 'post_type' => 'post', 'numberposts' => 1, 'author' => $user ); // as we are getting only 1 post, extract it from the returned array $user_post = array_shift( get_posts( $args ) ); // similar $nick = array_shift( get_user_meta( $user, 'nickname' ) ); // custom output, $user_post contains all the post normal data echo $user_post->post_title . ', by: ' . $nick; } } 

И затем используйте его в любом шаблоне темы:
<?php wpse_78117_print_authors_last_post(); ?> <?php wpse_78117_print_authors_last_post(); ?> .