WP_Query возвращает только самое высокое число

У меня есть пользовательский тип сообщения с полями Exercise и Tempo . Вот пример того, как это может выглядеть:

Упражнение 1 – 100
Упражнение 2 – 104
Упражнение 3 – 96
Упражнение 1 – 104
Упражнение 2 – 110
Упражнение 3 – 100

Как я могу использовать WP_Query для возврата только самого высокого Tempo каждого Exercise ?

Желаемый результат:

Упражнение 1 – 104
Упражнение 2 – 110
Exercse 3 – 100

РЕДАКТИРОВАТЬ:

Я, наконец, получил его работу (см. Ниже) так, как предложил Рарст. Спасибо за помощь!

  function opl_user_practice_sheet_test($atts, $content = null){ if ( is_user_logged_in()) { global $current_user; wp_get_current_user(); echo 'User: ' . $current_user->user_login . "\n"; global $post; $atts = shortcode_atts( array( 'title' => 'User Practice Sheet', 'count' => -1 ), $atts); // query arguments $args = array( 'post_type' => 'opl_exercise', 'post_status' => 'publish', 'orderby' => 'created', 'order' => 'DESC', 'posts_per_page' => $atts['count'] ); // fetch practice sheet tempos $practice_sheet_exercises = new WP_Query($args); // check if tempos come back if($practice_sheet_exercises->have_posts()){ // init output $output = ''; // build output $output .= '<div class="user-practice-sheet"> <table> <thead> <tr> <td>Exercise</td> <td>Submitted Tempo</td> <td>Next Target Tempo</td> </tr> </thead> <tbody>'; while($practice_sheet_exercises->have_posts()){ $practice_sheet_exercises->the_post(); $exercise_type = get_post_meta($post->ID, 'opl_exercise_type', true); $exercise_number = get_post_meta($post->ID, 'opl_exercise_number', true); $tempo_query = new WP_Query( array( 'post_type' => 'opl_tempo_submission', 'order_by' => 'meta_value_num', 'meta_key' => 'opl_submission_tempo', 'order' => 'DESC', 'posts_per_page' => 1, 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'opl_submission_exercise_type', 'value' => $exercise_type, 'compare' => '=' ), array( 'key' => 'opl_submission_exercise_number', 'value' => $exercise_number, 'compare' => '=' ) ) ) ); if ( $tempo_query->have_posts() ) { while ( $tempo_query->have_posts() ) { $tempo_query->the_post(); $submission_tempo = get_post_meta($post->ID, 'opl_submission_tempo', true); $output .= '<tr>'; $output .= '<td>'.$exercise_type .' '. $exercise_number.'</td>'; $output .= '<td>'.$submission_tempo.'</td>'; $output .= '<td></td>'; $output .= '</tr>'; } } } $output .= '</tbody> </table> </div>'; // reset post data wp_reset_postdata(); return $output; } else { return '<p>No Practice Sheet Found</p>'; } } } в  function opl_user_practice_sheet_test($atts, $content = null){ if ( is_user_logged_in()) { global $current_user; wp_get_current_user(); echo 'User: ' . $current_user->user_login . "\n"; global $post; $atts = shortcode_atts( array( 'title' => 'User Practice Sheet', 'count' => -1 ), $atts); // query arguments $args = array( 'post_type' => 'opl_exercise', 'post_status' => 'publish', 'orderby' => 'created', 'order' => 'DESC', 'posts_per_page' => $atts['count'] ); // fetch practice sheet tempos $practice_sheet_exercises = new WP_Query($args); // check if tempos come back if($practice_sheet_exercises->have_posts()){ // init output $output = ''; // build output $output .= '<div class="user-practice-sheet"> <table> <thead> <tr> <td>Exercise</td> <td>Submitted Tempo</td> <td>Next Target Tempo</td> </tr> </thead> <tbody>'; while($practice_sheet_exercises->have_posts()){ $practice_sheet_exercises->the_post(); $exercise_type = get_post_meta($post->ID, 'opl_exercise_type', true); $exercise_number = get_post_meta($post->ID, 'opl_exercise_number', true); $tempo_query = new WP_Query( array( 'post_type' => 'opl_tempo_submission', 'order_by' => 'meta_value_num', 'meta_key' => 'opl_submission_tempo', 'order' => 'DESC', 'posts_per_page' => 1, 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'opl_submission_exercise_type', 'value' => $exercise_type, 'compare' => '=' ), array( 'key' => 'opl_submission_exercise_number', 'value' => $exercise_number, 'compare' => '=' ) ) ) ); if ( $tempo_query->have_posts() ) { while ( $tempo_query->have_posts() ) { $tempo_query->the_post(); $submission_tempo = get_post_meta($post->ID, 'opl_submission_tempo', true); $output .= '<tr>'; $output .= '<td>'.$exercise_type .' '. $exercise_number.'</td>'; $output .= '<td>'.$submission_tempo.'</td>'; $output .= '<td></td>'; $output .= '</tr>'; } } } $output .= '</tbody> </table> </div>'; // reset post data wp_reset_postdata(); return $output; } else { return '<p>No Practice Sheet Found</p>'; } } } 

Solutions Collecting From Web of "WP_Query возвращает только самое высокое число"

Если я получу это право, каждый из ваших сообщений имеет одно значение упражнений и одно значение темпа?

Я бы сделал следующее:

  1. Составьте список упражнений.
  2. Для каждого запроса запроса упражнений: 1 сообщение, упорядоченное по Tempo, по убыванию.

Это, вероятно, так же хорошо, как и в рамках WP API. Возможно, это не будет практично для высоких показателей упражнений, это все пользовательский SQL оттуда.

Сначала вам нужно создать запрос для своих сообщений, и внутри этого запроса вы получите все свои пользовательские поля и сравните их.

Вы можете использовать плагин, подобный CMB2, для создания групп сгруппированных групп, чтобы вы могли сгруппировать упражнения (все Excercises1, все Excercises2 и т. Д.), А также назначить каждому из них поле TEMPO, прикрепленное к этой группе. Тогда было бы проще запросить и сравнить их и получить более высокий.

 <?php $args = array( 'post_type' => POST_TYPE_NAME ); $the_query = new WP_Query( $args ); if ( $the_query->have_posts() ) { while ( $the_query->have_posts() ) { $the_query->the_post(); //Here you would query your grouped fields and then compare and return the higher TEMPO } } else { } wp_reset_postdata(); ?>