実現したいこと
WordPressで検索結果をカスタムフィールドの値順に並べ替えたい
前提
レシピ検索のWebページを制作しています。
レシピ記事にはカスタムフィールドで塩分量(salt)を設定しています。
検索結果画面で「塩分量の少ない順」のボタンを押したら塩分量の少ない順でソートをかけられるようにしたいのですが、検索結果0件となってしまいます。
該当のソースコード
function.php
1//並べ替え条件パラメータを追加 2function add_sort_query_vars($public_query_vars) 3{ 4 $public_query_vars[] = 'sort'; 5 return $public_query_vars; 6} 7add_filter('query_vars', 'add_sort_query_vars'); 8 9// 並べ替え処理を設定 10function change_sort($query) 11{ 12 if ($query->is_search()) { 13 $sort_condition = $_GET['sort']; 14 if ($sort_condition === 'SALT_ASC') { 15 $query->set('orderby', 'meta_value_num'); 16 $query->set('order', 'ASC'); 17 $query->set('meta_key', 'salt'); 18 } 19 } 20} 21add_action('pre_get_posts', 'change_sort');
search.php
1<?php $sort_val = $_GET['sort']; ?> 2 <ul style="display: flex; align-items: center; justify-content: center; gap: 5vw; margin-top: 2vw;"> 3 <li style="list-style: none;"> 4 <a href="<?php echo esc_url(add_query_arg('sort', 'SALT_ASC')); ?>">塩分が少ない順</a> 5 </li> 6 </ul>
aタグがクリックされたらadd_query_arg()で’sort ’=== 'SALT_ASC'とし、$query->setで検索条件をセットしています。
試したこと
特にエラーは表示されていません。
どこに手を付けたらよいかわからず、途方に暮れています。
お力をお貸し頂ければと思います。
追記
posts_orderbyフィルターフックを使い、sqlにどのようなorderby がかかっているかを調べたところ、
"wp_postmeta.meta_value+0 ASC"
と表示されました。
meta_value+0という文言について調べたところnullという意味だそうなのですが、これは存在しないカスタムフィールドを指定しているからということなのでしょうか。
回答2件
あなたの回答
tips
プレビュー