WordPressで検索結果の順番を並び替える方法(カスタムフィールドでも並び替えできる)

 ショップのサイトなどを見ているとたまに検索結果を並び替えできるサイトがあります。

 今回はWordpressの検索結果で並び替え機能を実装してみたいと思います。

 

フォームを用意

 まずは並び替えるためのフォームを設置しましょう。今回は6パターン用意してあります。

 6つのパターンはそれぞれ「sort1」〜「sort6」という値をvalueに入れて分岐させます。

 セレクトはドロップダウンメニューで選べて、値を変えると同時に自動で更新されて、値はPOSTで送られます。

 <div id="sort_menu">
 <form name="irekae" method="post" id="sort_form3" class="sort_form3">
 <select name='narabi' onChange="document.forms['irekae'].submit()" >
 <option value="sort1"<?php if(!isset($_REQUEST['narabi']) || $_REQUEST['narabi'] == 'sort1') echo ' selected="selected"';?>>価格の安い順</option>
 <option value="sort2"<?php if(isset($_REQUEST['narabi']) && $_REQUEST['narabi'] == 'sort2') echo ' selected="selected"';?>>価格の高い順</option>
 <option value="sort3"<?php if(isset($_REQUEST['narabi']) && $_REQUEST['narabi'] == 'sort3') echo ' selected="selected"';?>>投稿日時が新しい順</option>
 <option value="sort4"<?php if(isset($_REQUEST['narabi']) && $_REQUEST['narabi'] == 'sort4') echo ' selected="selected"';?>>投稿日時が古い順</option>
 <option value="sort5"<?php if(isset($_REQUEST['narabi']) && $_REQUEST['narabi'] == 'sort5') echo ' selected="selected"';?>>おすすめ順</option>
 <option value="sort6"<?php if(isset($_REQUEST['narabi']) && $_REQUEST['narabi'] == 'sort6') echo ' selected="selected"';?>>おすすめではない順</option>
 </select>
 </form>
</div>

POSTからの値を受け取って並び替える

 まずPOSTからの値を変数に代入しています。

 ここでは「$order」に降順か昇順かの情報を、「$orderby」にはメタ情報を利用するという意味のmeta_valueを、「$meta_key」には並び替えに使用するカスタムフィールドのメタキーを代入しておきます。

  • $order・・・ASC(昇順)、またはDESC(降順)を指定する。
  • $orderby・・・meta_value(メタキー)を使って並び替えることを指定する。
  • $meta_key・・・並び替えに使用するカスタムフィールドを指定する。
  • meta_value_numを使用することで桁数の違う数値を並び替えできる。
<?php
$sortset = $_POST['narabi']; //POSTからの値を代入


/**********************/
 //並び替えのルール
/**********************/
if($sortset == '') { //値のない場合
 $order = 'ASC';
 $orderby = 'meta_value_num';
 $meta_key = '価格';

}elseif($sortset == 'sort1'){ //価格が安い順
 $order = 'ASC';
 $orderby = 'meta_value_num';
 $meta_key = '価格';

}elseif($sortset == 'sort2'){ //価格が高い順
 $order = 'DESC';
 $orderby = 'meta_value_num';
 $meta_key = '価格';

}elseif($sortset == 'sort3'){ //投稿日時が新しい順
 $order = 'DESC';
 $orderby = '';
 $meta_key = '';

}elseif($sortset == 'sort4'){ //投稿日時が古い順
 $order = 'ASC';
 $orderby = '';
 $meta_key = '';

}elseif($sortset == 'sort5'){ //おすすめの降順
 $order = 'DESC';
 $orderby = 'meta_value';
 $meta_key = 'おすすめ度';

}elseif($sortset == 'sort6'){ //おすすめの昇順
 $order = 'ASC';
 $orderby = 'meta_value';
 $meta_key = 'おすすめ度';
}

?>

データーベースから検索する

 先程変数に代入した値を元にデータベースから検索をして並び替えるという作業まで一気にやってしまいましょう。

<?php
/****************************************/
/*条件でDBを検索&並び替え*/
/****************************************/
query_posts( array(
 //'meta_query' => $metaquerysp, //メタキーで絞り込み検索する場合
 //'tax_query' => $taxquerysp, //タクソノミで絞り込み検索する場合
 's' => $s,
 'posts_per_page'=> '-1&', //表示する件数
 'orderby' => $orderby, //メタキーの値を元に並び替えることを指定
 'meta_key' => $meta_key, //使用するカスタムポストのメタキーを指定
 'order' => $order,//ASCまたはDESCの指定
 )
);
?>

完成

 これで投稿日時や価格順、おすすめ順などカスタム投稿タイプの値を元に自由に並び替えることができるようになりました。

フォローする