参考 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}