参考 http://ateitexe.com/wordpress-archive-sort-popular/
まずパーマーリンクを
投稿名にしなければならん
ポストタイプアーカイブ
http://www.d-format1.com/car/
のようにケツにスラッシュで終わらなかん
—
固定ページでは
is_main_くえり がポストタイプを指定できなかったな〜
カスタムポストでなく ポストならできるかも
—
URLに
?sort=newerのように
?自分できめた文字=自分で決めた文字
というURLをつけるように
ボタンをつくる。
簡単にコードをまとめたやつを書こう
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | <?php if ( is_archive() || is_search() ) { //アーカイブか検索ページだったら global $wp_query ; $total_results = $wp_query ->found_posts; //件数を取得しておく //※ソールドアウトの設定確認 } ?> </div></h2> <?php //※1 2ページ目以降でボタンを押されても、1ページ目に飛ぶようにURLを指定 $url = explode ( '/' , $_SERVER [ "HTTP_HOST" ] . $_SERVER [ "REQUEST_URI" ]); $sortset = (string)filter_input(INPUT_GET, 'sort' ); //信頼できないのでチェック ?> <div class = "change_bottan_arc" > 取り扱い車両:<?php echo $total_results ; ?>件<br /> 並び替え: <form method= "get" action= "<?php echo $url_str //※1?>" > <input type= "hidden" name= "sort" value= "newer" /> <input type= "submit" value= "新着順" /> </form> </form> <!--| <form method= "get" action= "<?php echo $url_str //※1?>" > <input type= "hidden" name= "sort" value= "older" /> <input type= "submit" value= "古い" /> </form>--> | <form method= "get" action= "<?php echo $url_str //※1?>" > <input type= "hidden" name= "sort" value= "car_price_low" /> <input type= "submit" value= "価格が安い" /> </form> | <form method= "get" action= "<?php echo $url_str //※1?>" > <input type= "hidden" name= "sort" value= "car_price_high" /> <input type= "submit" value= "価格が高い" /> </form> | <form method= "get" action= "<?php echo $url_str //※1?>" > <input type= "hidden" name= "sort" value= "car_km_low" /> <input type= "submit" value= "走行距離が短い" /> </form> | <form method= "get" action= "<?php echo $url_str //※1?>" > <input type= "hidden" name= "sort" value= "car_year_new" /> <input type= "submit" value= "年式が新しい" /> </form> | <form method= "get" action= "<?php echo $url_str //※1?>" > <input type= "hidden" name= "sort" value= "car_cc_big" /> <input type= "submit" value= "排気量大" /> </form> | <form method= "get" action= "<?php echo $url_str //※1?>" > <input type= "hidden" name= "sort" value= "car_cc_small" /> <input type= "submit" value= "排気量小" /> </form> </div> |
1 2 | <input type= "hidden" name= "sort" value= "newer" /> <input type= "submit" value= "新着順" /> |
この部分が基本
あとは
ファンクションに
イズメインクエリを指定してやる
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | //こっから本番 function SortArchive( $query ) { //管理画面スルー if ( is_admin() || ! $query ->is_main_query() ) return ; //こっから if ( $query ->is_category() || $query ->is_archive() ) { $sortset = (string)filter_input(INPUT_GET, 'sort' ); //if ( $sortset != 'older' && $sortset != 'car_price_high' && $sortset != 'car_price_low' ) { if ( $sortset == 'new' ) { $query ->set( 'orderby' , 'date' ); //新しい デフォ } elseif ( $sortset == 'older' ) { //記事古い $query ->set( 'orderby' , 'date' ); $query ->set( 'order' , 'ASC' ); } elseif ( $sortset == 'car_price_high' ) { //価格高い $query ->set( 'meta_key' , 'car_price' ); $query ->set( 'orderby' , 'meta_value_num' ); } elseif ( $sortset == 'car_price_low' ) { //安い $query ->set( 'meta_key' , 'car_price' ); $query ->set( 'orderby' , 'meta_value_num' ); $query ->set( 'order' , 'ASC' ); } elseif ( $sortset == 'car_km_low' ) { //走行距離が短い $query ->set( 'meta_key' , 'car_km' ); $query ->set( 'orderby' , 'meta_value_num' ); $query ->set( 'order' , 'ASC' ); } elseif ( $sortset == 'car_year_new' ) { //年式が新しい $query ->set( 'meta_key' , 'car_year' ); $query ->set( 'orderby' , 'meta_value_num' ); $query ->set( 'order' , 'DESC' ); } elseif ( $sortset == 'car_cc_big' ) { //排気量大 $query ->set( 'meta_key' , 'car_cc' ); $query ->set( 'orderby' , 'meta_value_num' ); $query ->set( 'order' , 'DESC' ); } elseif ( $sortset == 'car_cc_small' ) { //排気量小 $query ->set( 'meta_key' , 'car_cc' ); $query ->set( 'orderby' , 'meta_value_num' ); $query ->set( 'order' , 'ASC' ); } return ; } } add_action( 'pre_get_posts' , 'SortArchive' ); |
こうだ!
空のカスタムフィールどの場合の表示は無視してそのままでるからそこは
制御してない
あとは
カレントを設定するコードを書いたらOKか?
こうした↓
デフォのアーカイブも新着がかれんとされるようにね
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | <?php //※1 2ページ目以降でボタンを押されても、1ページ目に飛ぶようにURLを指定 $url = explode ( '/' , $_SERVER [ "HTTP_HOST" ] . $_SERVER [ "REQUEST_URI" ]); $sortset = (string)filter_input(INPUT_GET, 'sort' ); //信頼できないのでチェック ?> <div class = "change_bottan_arc" > 取り扱い車両:<?php echo $total_results ; ?>件<br /> 並び替え: <form method= "get" action= "<?php echo $url_str //※1?>" > <input type= "hidden" name= "sort" value= "newer" /> <?php if ( $sortset == 'newer' || $sortset == '' ): ?> <input type= "submit" class = "sort_current" value= "新着順" /> <?php else : ?> <input type= "submit" value= "新着順" /> <?php endif ; ?> </form> </form> <!--| <form method= "get" action= "<?php echo $url_str //※1?>" > <input type= "hidden" name= "sort" value= "older" /> <input type= "submit" value= "古い" /> </form>--> | <form method= "get" action= "<?php echo $url_str //※1?>" > <input type= "hidden" name= "sort" value= "car_price_low" /> <?php if ( $sortset == 'car_price_low' ): ?> <input type= "submit" value= "価格が安い" class = "sort_current" /> <?php else : ?> <input type= "submit" value= "価格が安い" /> <?php endif ; ?> </form> | <form method= "get" action= "<?php echo $url_str //※1?>" > <input type= "hidden" name= "sort" value= "car_price_high" /> <?php if ( $sortset == 'car_price_high' ): ?> <input type= "submit" value= "価格が高い" class = "sort_current" /> <?php else : ?> <input type= "submit" value= "価格が高い" /> <?php endif ; ?> </form> | <form method= "get" action= "<?php echo $url_str //※1?>" > <input type= "hidden" name= "sort" value= "car_km_low" /> <?php if ( $sortset == 'car_km_low' ): ?> <input type= "submit" value= "走行距離が短い" class = "sort_current" /> <?php else : ?> <input type= "submit" value= "走行距離が短い" /> <?php endif ; ?> </form> | <form method= "get" action= "<?php echo $url_str //※1?>" > <input type= "hidden" name= "sort" value= "car_year_new" /> <?php if ( $sortset == 'car_year_new' ): ?> <input type= "submit" value= "年式が新しい" class = "sort_current" /> <?php else : ?> <input type= "submit" value= "年式が新しい" /> <?php endif ; ?> </form> | <form method= "get" action= "<?php echo $url_str //※1?>" > <input type= "hidden" name= "sort" value= "car_cc_big" /> <?php if ( $sortset == 'car_cc_big' ): ?> <input type= "submit" value= "排気量大" class = "sort_current" /> <?php else : ?> <input type= "submit" value= "排気量大" /> <?php endif ; ?> </form> | <form method= "get" action= "<?php echo $url_str //※1?>" > <input type= "hidden" name= "sort" value= "car_cc_small" /> <?php if ( $sortset == 'car_cc_small' ): ?> <input type= "submit" value= "排気量小" class = "sort_current" /> <?php else : ?> <input type= "submit" value= "排気量小" /> <?php endif ; ?> </form> |
cssも書いとく
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /*-----------------------並べ替えボタン*/ .change_bottan_arc{ margin-top : 20px ; margin-bottom : 10px ; font-size : 80% ;} .change_bottan_arc form{ display : inline !important ;} .change_bottan_arc input[type= 'submit' ]{ color : #aa9a85 ; padding : 0 ; margin : 0 ; box-shadow : none !important ; background : none !important ; border : none !important ; font-size : 100% ; text-decoration : underline ; cursor : pointer ; } .change_bottan_arc .sort_current{ font-weight : normal !important ; text-decoration : none !important ; color : #e60012 !important } |