おそらくSQLでつなげてつなげてavgで並び替えて取得という形になるかと思いますが
そういう部分は他の方に任せて…
私でしたら項目が3つ程度でしたら平均点のカスタムフィールドを作ってやって
直接入力してもらうか、こういうのが簡単にできるのがコンピューターじゃないのか!
と言われる場合にはjavascriptやアクションフックで自動で入るようにします
早速ご返答有難うございます☆
まだ初心者なので勉強も兼ねてやりたいと
思っております。
javascriptやアクションフックで自動で入る
どの様な事をおっしゃっているのかさっぱりです・・・
ご教授頂けたら幸いです。
functions.php に以下のコードを追加します。
add_filter( 'posts_fields', 'my_posts_fields', 10, 2 );
function my_posts_fields( $fields, $query ) {
if ( ! empty( $query->query_vars['ave'] ) ) {
global $wpdb;
$fields .= ",( {$wpdb->postmeta}.meta_value + mt1.meta_value + mt2.meta_value ) AS point";
}
return $fields;
}
add_filter( 'posts_orderby', 'my_posts_orderby', 10, 2 );
function my_posts_orderby( $orderby, $query ) {
if ( ! empty( $query->query_vars['ave'] ) ) {
global $wpdb;
$orderby = 'point DESC';
}
return $orderby;
}
TOP10を出力するところで以下のように書きます。
$top10 = get_posts( array(
'ave' => true,
'suppress_filters' => false,
'posts_per_page' => 10,
'meta_query' => array(
array(
'key' => 'aaa', // 効果のメタキー
'value' => 0,
'type' => 'NUMERIC',
'compare' => '>'
),
array(
'key' => 'bbb', // すっきり感のメタキー
'value' => 0,
'type' => 'NUMERIC',
'compare' => '>='
),
array(
'key' => 'ccc', // 落ちやすさのメタキー
'value' => 0,
'type' => 'NUMERIC',
'compare' => '>='
),
),
) );
foreach( $top10 as $post ) :
setup_postdata( $post );
echo '<p>' . get_the_title() . ' (' . sprintf( '%.1f', $post->point / 3 ) . ')</p>';
endforeach;
wp_reset_postdata();
ご回答いただき誠に有難うございます。
思っている形に出力する事が出来ました。
本当に有難う御座いました。
1点上手くいかないところがあるのですが
echo ‘<p>’ . get_the_title() . ‘ (‘ . sprintf( ‘%.1f’, $post->point / 3 ) . ‘)</p>’;
endforeach;
の部分にカスタムフィールドに入っている画像(写真)を一緒に出したいのですが
色々調べて試したのですが上手くいかないので大変恐縮ですが教えて頂けませんか?
カスタムフィールドに画像のURLが入っているなら
post_custom( 'カスタムフィールド名' )
get_post_meta( get_the_ID(), 'カスタムフィールド名', true )
$post->カスタムフィールド名
などを echo esc_url() します。
カスタムフィールドに画像のIDが入っているなら
上記の値を echo wp_get_attachment_image() します。
カスタムフィールドに入っている画像(写真)を一緒に出したい
このトピックとは別の話題になるので、わからない場合はトピックを新しく追加すると良いです。
早速アドバイス頂き誠に有難う御座いました。
無事完成する事ができました。
私ももっと勉強と経験を積んでアドバイスできる人を
目指して頑張っていきます。
本当に有難うございました。