アーカイブページ等の記事の並び替え方法

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