現在、Wordpressにて検索画面を作成しています。
その際、検索結果にタクソノミーによるソート切り替え機能を実装したいと思い、
多々調べながら、実装を試みていますが適用されずの為、ご相談させて頂きます。
こちらのページを参考に、
・おすすめ(pick_up)
・徒歩(walk_time)
・値段(max_price)
上記、3つのタクソノミーを作成し
※()内はタームです。
その後、functions.phpにて
// 並び替え条件パラメータを追加 function add_sort_query_vars( $public_query_vars ) { $public_query_vars[] = 'sort'; return $public_query_vars; } add_filter( 'query_vars', 'add_sort_query_vars' ); // 並び替え処理を設定 function change_posts_per_page( $query ){ if($query->is_search()){ if( !empty($_GET['sort']) ){ if( $_GET['sort'] == 'RENT_DESC' ){ $query->set( 'orderby', array( 'max_price' => 'DESC') ); }elseif( $_GET['sort'] == 'RENT_ASC' ){ $query->set( 'orderby', array( 'walk_time' => 'ASC' ) ); }else{ $query->set( 'orderby', array( 'pick_up' => 'DESC' ) ); } } } } add_action( 'pre_get_posts', 'change_posts_per_page' );
このように記述し、
search.phpには
<!-- 並び替え用のセレクトボックス --> <select id="sort" name="sort"> <option value="<?php echo add_query_arg('sort', false); ?>" <?php if($sort_val == ''): echo 'selected'; endif; ?>>オススメ順</option> <option value="<?php echo add_query_arg('sort', 'RENT_DESC'); ?>" <?php if($sort_val == 'RENT_DESC'): echo 'selected'; endif; ?>>値段が高い順</option> <option value="<?php echo add_query_arg('sort', 'RENT_ASC'); ?>" <?php if($sort_val == 'RENT_ASC'): echo 'selected'; endif; ?>>駅から近い順</option> </select> <!-- 並び替えの条件が変わった時の処理 --> <script> $("select[name='sort']").change(function() { var href = $(this).val(); if(href != ''){ location.href = href; } }); </script>
このように行ってみましたが、
並び替えが適用されない状態です。
この方法を行う上で『ここをこうすれば良い』
または、別の方法などでも結構ですので、ご教授頂ければ幸いです。
よろしくお願いします。
【追記1】
参考URLでは、カスタムフィールドで行っていたので、
・おすすめ(sort_pickup)
・徒歩(sort_walktime)
・値段(sort_maxprice)
このようにフィールドを作りfunctions.phpに
// 並び替え条件パラメータを追加 function add_sort_query_vars( $public_query_vars ) { $public_query_vars[] = 'sort'; return $public_query_vars; } add_filter( 'query_vars', 'add_sort_query_vars' ); // 並び替え処理を設定 function change_posts_per_page( $query ){ if($query->is_search()){ if( !empty($_GET['sort']) ){ if( $_GET['sort'] == 'RENT_DESC' ){ $query->set( 'orderby', array( 'sort_maxprice' => 'DESC') ); }elseif( $_GET['sort'] == 'RENT_ASC' ){ $query->set( 'orderby', array( 'sort_walktime' => 'ASC' ) ); }else{ $query->set( 'orderby', array( 'sort_pickup' => 'DESC' ) ); } } } } add_action( 'pre_get_posts', 'change_posts_per_page' );
こちらで試してみましが上手く行かずでしたので、
// 並び替え条件パラメータを追加 function add_sort_query_vars( $public_query_vars ) { $public_query_vars[] = 'sort'; return $public_query_vars; } add_filter( 'query_vars', 'add_sort_query_vars' ); // 並び替え処理を設定 function change_posts_per_page( $query ){ if($query->is_search()){ if( !empty($_GET['sort']) ){ if( $_GET['sort'] == 'RENT_DESC' ){ $query->set( 'orderby', array( get_field('sort_maxprice') => 'DESC') ); }elseif( $_GET['sort'] == 'RENT_ASC' ){ $query->set( 'orderby', array( 'get_field('sort_walktime') => 'ASC' ) ); }else{ $query->set( 'orderby', array( get_field('sort_pickup') => 'DESC' ) ); } } } } add_action( 'pre_get_posts', 'change_posts_per_page' );
このように、get_fieldでも検証してみましたが、
ソートの切り替えが反映されませんでした。
最終的にはタクソノミーでも、カスタムフィールドでも
ソートの切り替えができれば問題はないと思っておりますので、
お知恵貸して頂ければ幸いです。
よろしくお願いします。
【追記2】
頂いた参考サイトを元に、
試行錯誤しながら下記のようにしてみましたが
切り替え用のセレクトボックスでソートを切り替えを行った所、
一旦は並び替わるようになしましたが、再度他のソートにした所、
1回目に切り替えた並び順から変更されない状態になりました。
// おすすめ $walk_time = array( 'post_type' => 'post', 'tax_query' => array( array( 'taxonomy' => 'walk_time', 'field' => 'slug', ), ), ); $walk_time_query = new WP_Query( $walk_time ); // 徒歩 $walk_time = array( 'post_type' => 'post', 'tax_query' => array( array( 'taxonomy' => 'walk_time', 'field' => 'slug', ), ), ); $walk_time_query = new WP_Query( $walk_time ); // 値段 $max_price = array( 'post_type' => 'post', 'tax_query' => array( array( 'taxonomy' => 'max_price', 'field' => 'slug', ), ), ); $max_price_query = new WP_Query( $max_price );
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/23 09:11