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

参考 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"]);
$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>
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"]);
$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も書いとく

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}