WP_QUERY仅返回最高数字

时间:2016-05-20 作者:AHinson

我有一个带有字段的自定义帖子类型ExerciseTempo. 下面是一个可能的示例:

练习1-100
练习2-104
练习3-96
练习1-104
练习2-110
练习3-100

如何使用WP\\u Query仅返回最高Tempo 各的Exercise?

期望的结果是:

练习1-104练习2-110练习3-100

编辑:

我终于按照Rarst的建议让它工作了(见下文)。谢谢你的帮助!

 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>\';
}

}
}

2 个回复
最合适的回答,由SO网友:Rarst 整理而成

如果我没弄错的话,你的每个帖子都有一个锻炼值和一个节奏值?

我可能会做以下工作:

建立练习列表这可能与保持在WP API领域内一样好。对于大量练习来说可能不太实用,这都是来自那里的自定义SQL。

SO网友:alexandrucarjan

您首先必须为您的帖子构建一个查询,在该查询中,您将获得所有自定义字段并进行比较。

您可以使用诸如CMB2之类的插件来构建可重复的分组字段,这样您就可以对练习进行分组(所有练习1、所有练习2等),还可以将每个练习分配到一个附加到该组的节奏字段。这样就更容易查询和比较它们,并得到更高的值。

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

?>