参考 http://ateitexe.com/wordpress-archive-sort-popular/
まずパーマーリンクを
投稿名にしなければならん
ポストタイプアーカイブ
http://www.d-format1.com/car/
のようにケツにスラッシュで終わらなかん
—
固定ページでは
is_main_くえり がポストタイプを指定できなかったな〜
カスタムポストでなく ポストならできるかも
—
URLに
?sort=newerのように
?自分できめた文字=自分で決めた文字
というURLをつけるように
ボタンをつくる。
簡単にコードをまとめたやつを書こう
<?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"]); $url_str ='http://'.$url[0].'/'.$url[1].'/'; $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>
<input type="hidden" name="sort" value="newer"/> <input type="submit" value="新着順" />
この部分が基本
あとは
ファンクションに
イズメインクエリを指定してやる
//こっから本番 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か?
こうした↓
デフォのアーカイブも新着がかれんとされるようにね
<?php //※1 2ページ目以降でボタンを押されても、1ページ目に飛ぶようにURLを指定 $url = explode('/', $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]); $url_str ='http://'.$url[0].'/'.$url[1].'/'; $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も書いとく
/*-----------------------並べ替えボタン*/ .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}