まず最初からそういう設定でなかったため
ランキングはランキングのコードを書いた
後からコードを追加したり メタキーを持たせたやり方。
【最初からランキング用のコードを全ての投稿に合わせるやり方】
これはランキングのタクソノミーを作らずに
一覧表示・分岐をすべてメタバリューにて行う方法
問題点としては一覧表示した時、同じランキングがあると複数表示される。
管理画面一覧にて順位が表示されない。
一覧で必ずランキングの順位が優先される つまりランキングの途中に他のツアーを表示できず
単調似なる可能性がある。
今回タマツアーでは後からの指示であったのと
元々メニューオーダーで順位を操作する予定だったため
メニューオーダーをやめて
あらたにソート用の数値boxを作った
0が最も前で デフォルトが100
ランキングに合わせて 123と変えていく。
方法
クイック編集にて調整したかったため今回はカスタムフィールドテンプレートをあえて使用
テンプレートタイトル:
一覧順位用 数字が小さい方が前に大きい方が後ろにきます。例)ランキングの数値に合わせる・一覧での表示で一番前にこさせたい・表示順を最後にしたいなど。
カスタムポストタイプ (カンマ区切り):
bali-tours,bali-optional-tours,bali-information
テンプレートコンテンツ:
[sort_numb]
type = text
label = 並び順
size = 3
default = 100
クイック編集時余分な所を非表示css
カスタムアドミンcss
1 2 3 | .inline-edit-group #custom_field_template_select, .inline-edit-group .button{ display : none } #cftdiv .ui-sortable-handle{ font-weight : normal } |
メインクエリにてメタバリューナンバーを使い
さらに投稿日にてソート
複数条件ソート
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | add_action( 'pre_get_posts' , 'foo_modify_query_post_order' ); function foo_modify_query_post_order( $query ) { //管理画面スルー if ( is_admin() || ! $query ->is_main_query() ) return ; //アーカイブページ数 ココ本番 ナンバー若い順 投稿新しい順 if ( $query -> is_tax() && $query ->is_main_query() ) { $query ->set( 'posts_per_page' , 12 ); $query ->set( 'meta_key' , 'sort_numb' ); //メタキーセット $query -> set( 'orderby' , array ( 'meta_value_num' => 'ASC' , 'date' => 'ASC' ) ); // 指定順を降順に } } |
クエリポストで表示してるやつの時
ここ
1 2 | 'meta_key' => 'sort_numb' , 'orderby' => array ( 'meta_value_num' => 'ASC' , 'date' => 'ASC' ), |
使用例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?php $args = array ( 'posts_per_page' => 3, 'post_type' => 'bali-tours' , //カスタム投稿名 'meta_key' => 'sort_numb' , 'orderby' => array ( 'meta_value_num' => 'ASC' , 'date' => 'ASC' ), 'tax_query' => array ( 'relation' => 'AND' , array ( 'taxonomy' => 'bali-tours-cat' , 'field' => 'slug' , 'terms' => array ( 'おすすめ厳選ツアー' , '予備' ), //'operator'=>'NOT IN' ), ), ); query_posts( $args ); if ( have_posts () ) : while ( have_posts() ) : the_post(); ?> |