WPカスタマイズカテゴリとタグのアーカイブページに日付順や閲覧数順の並び替えボタンを実装してあったのですが、検索ページにも追加したので方法をまとめてみました。検索ページにも並び替えボタン半年ほど前、このような記事を書いたのですが。WordPressのアーカイブページを人気順などで並び替えるボタンをつけるGET関数でどのボタンを押されたか判別してpre_get_posts()で並び替える(閲覧数はWP-PostViewsというプラグインを利用)、という。これが、アーカイブページならhttps://ateitexe.com/category/xxx/↓https://ateitexe.com/category/xxx/?sort=popularこのようにGET変数を付加して処理すればいけるな、という内容だったわけですが、検索ページだとhttps://ateitexe.com/?s=キーワードこのようにもう既にGET変数がついているので、検索ページを並び替えたい場合はhttps://ateitexe.com/?s=キーワード&sort=popularという形にするためにもうちょっとテコ入れしないとうまくいかないなーということに気がついて、せっかくだからやってみようかな、と思ったわけです。このように、検索ページにも並び替えボタンがつきました。前記事からの派生という形で書いて行きますので、基本的な説明などは前記事と合わせて見ていってください。);並び替える条件に、$query->is_search()も追加しただけ。?>このような形で書いたのですが、1行目で「アーカイブページのときに」という条件で括っているために、検索ページは10~12行目に別で書いています。ここにも並び替えボタンを実装したいので、この形では非効率ですよね。?>こういう形にしました。?>ベースの形に肉付けして、こんな感じ。ハイライト部分に書くボタンの記述を以下に説明していきます。CSSは同じですので前の記事を参照してください。並び替えボタンの実装htmlのイメージ例えば前回カテゴリアーカイブでは、このようなhtmlが出力されるようにPHPを書きました。/></form>検索されたキーワードの情報も一緒に持たせます。action=の遷移先をトップページにすることで、ボタンを押された時にhttps://ateitexe.com/?s=キーワード&sort=newerというURLに遷移することができます。この形を目指して、カテゴリ・タグアーカイブの場合はこっち、検索ページのときはこっち、という分岐をさせてhtmlを出し分けるように、PHPを書いていきます。/></form>「新しい順」に並び替えるボタンを例に、このように書いていました。2行目で取得したURLを$url_strという変数に入れ、6行目の遷移先action=に指定してるので(詳細は前回の記事をご参照ください)、ここを分岐してやらなきゃいけないですね。/></form>検索ページの時はトップページURLを、それ以外(カテゴリ・タグアーカイブ)の場合は従来どおり生成したURLを、変数$url_strに入れます。これで遷移先が変化します。後は11~13行目を追加で、検索ページのときだけ検索キーワードの情報を持たせます。検索文字列はthe_search_query()で表示することができます。この11~13行、これだけ見るぶんにはいいのですが、ボタンの数だけ同じことを書く羽目になるのでもうちょっと軽くしたいところ。/></form>検索ページだった場合のみ、4行目で予め文字列を入れておいて12行目で出力する、という形へ。出力コードの見た目を整えるためタブや改行も含めています。あと、さっきはthe_search_query()を使っていましたが、ここでは出力せずに取得するので、get_search_query()を使っています。テンプレートタグの出力と取得の違いについてはこちらWordPressのテンプレートタグ、the_*()とget_the_*()の違いエスケープ処理のご注意get_search_query:WordPress私的マニュアルこちらにあるとおり、get_search_query()は$escapedというパラメータがあり、カッコ内にtrueでエスケープ処理を行い、falseでエスケープ処理を行いません。空だと、デフォルトでtrueとされます。エスケープ処理とは特殊文字を無害化することですが、とても簡単に言うとこれを行わないと危険なのです。どのバージョンからget_search_query()にエスケープ処理がデフォルトで実装されたのか特定できなかったのですが、WordPressの過去のバージョンではこの関数にエスケープ処理がなされていなかった、という経緯があるようです。(2008年くらいまで...?)お使いのWPのバージョンにはくれぐれもお気をつけて、自己責任でお願いいたします。/></form>このような感じに。15行目は「日付が新しい順」をデフォルトとする、という意味で書いていますので、こちらも前回の記事をご参照ください。初心者でも、“デキる奴”と思わせるプレゼンテーションの基本とコツこれからExcelのマクロを勉強したいという方に!簡単な練習問題作りました。AM「WordPressのアーカイブページを人気順などで並び替えるボタンをつける」に続いてこちらの検索も参考にさせて頂きました。ありなし」の順序で表示されるだけになってしまいました。ありなし」ではない、WordPress初期の検索結果が出るようになったら、もっと素敵かなと思います。AMまきあややさん、コメントありがとうございます。functions.phpのソート部分をこのハイライト部のように直してもらえれば、検索結果の初期画面はWPデフォルトの並び順になるはずです。/>こちらに差し替えれば、検索ページでデフォルトの場合はカレントが外れるようになります。́Д`)このブログでは従来通り新しい日付順で並ぶようにしておりますが、用途によりますもんね。いうリンクを追加して使わして頂きました。PM*youさんはじめまして。tanakaと申します。現在wordpressの勉強をしており、絞り込み検索の実装をしております。http://kotori-blog.com/wordpress/refinement_search/のサイトを参考にカスタムフィールドで絞り込み検索を実装することはできたのですが、絞り込んだ検索結果をさらに価格の安い順・高い順などをこの記事のように並び替えボタンで並び替えたいと思っています。query_postsを削除しこちらの記事を参考に(全てコピペですが。笑)function.php(meta_valueはカスタムフィールドのキーに変更。)とsearch.phpを全くそのままの状態で書き加えたのですが、絞り込み検索はできてもさらに並び替えることができませんでした。すればカスタムフィールドで絞り込んだ検索結果をさらにカスタムフィールドの値で昇順降順のように並び替えることができるでしょうか?まだまだ知識不足ですので、何かアドバイスいただけると幸いです。PMtanakaさん、はじめまして。コメントありがとうございます。実際のコードと挙動を見てみないとなんとも言えないのですが、以下の形だと仮定して返信いたします。'絞込対象',));}}このような形にすれば良いんじゃないかなーと思います。検証したわけではないので確実性がなくて申し訳ないですが、ご参考になれば幸いです。始めてWordPressでのサイト構築をしておりいろいろと検索を重ねており、やりたかったことがやっと見つかり、とても感謝しています!!こちらで思うように並び替えることが実現できたのですが、ネットで拾ったページネーションでは並び替えとページ切り替えが上手くいっておらず...こちらのブログで使われているページネーションのfunctionなのかプラグインなのかを教えていただけないでしょうか?function.phpを公開している記事を見つけたのですが、ページネーションの部分は削除されているようで。こんなお願い大変失礼かと思いましたが、何卒よろしくお願いいたします。PMyamaさん、コメントありがとうございます。NxWorld現状、私のブログではこちらの記事を参考させていただいてfunctions.phpに書いて出力しております。お願いしますー!ちなみになんですが、いまテーマを新しくしようと作っておりまして、レスポンシブ対応のページネーションを実装したのを記事にしようかと思ってます。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。週間人気記事ExcelVBAでカレンダーコントロールを自作するExcelで1行・1列おきの合計を求めるSUM関数の書き方これからExcelのマクロを勉強したいという方に!簡単な練習問題作りました。-2019/09/27運営者*you非IT系の会社で社内業務アプリ開発したりWeb担してたり。ExcelとかAccessの本を書いてます。見るピックアップ新着記事リストボックスの選択行を、シート上の行数で取得するExcelVBAインターネットの表示がおかしいなー。