エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


ショートコードで簡単解決!カスタムフィールドでソート、抽出条件設定方法

      2017/03/12

WordPressの記事の一覧を作成(ソート、抽出条件付)

 

カテゴリ一覧についての説明

 
ショートコードで簡単解決!WordPress固定ページにカテゴリ一覧を編集する方法」で、ショートコードを利用して固定ページにカテゴリ一覧を編集する方法を解説しました。
 
 
いざ実装する段階になった時に、表示される投稿の記事の順番を指定したいなぁと思ってしまいました。
そんなわけで、この記事では投稿一覧を取得して並べる際に、任意のキーでソートさせる方法を解説します。
 
ショートコードで簡単解決!WordPress固定ページにカテゴリ一覧を編集する方法」の続きの記事ですので、ショートコードでカテゴリ一覧を作る方法の解説は前の記事を読んでみてください。
 
ちなみに、「WordPress投稿にPHPを記述するショートコードの使い方add_shortcode」の記事を読んでもらうと分かりますが、ショートコードで処理を作っておけば、記事に貼ることもできますし、テンプレートにもウィジェットにもショートコードを貼るだけで編集できますので便利ですね。
 
また、「functions.phpって何?」っていう方には「WordPressの functions.phpがある場所」という記事を書いていますので、こちらも読んでみてください。
 
 

ソート条件付のサンプルソースコード

 

サンプルソースコード

 
さっそく記事タイトルと投稿日付でソートするショートコードのサンプルソースです。
 

 
 

サンプルソースコードの解説

 
12行目、13行目を追加します。
「orderby」でソートするキーを指定して、「order」でソート順を指定します。
複数指定したい場合は、サンプルの様にスペースで区切ることで複数の項目を指定できます。
 
ソートキーとして指定できるものは以下のものです。
 ID  post id 順
 author  投稿者順
 title  タイトル順
 date  投稿日付順
 modified  最終更新日順
 parent  親記事のID順
 rand  ランダムにする
 comment_count  コメント数で並べ替え
 menu_order  記事のメニューオーダー順
 
ソート順は、ASC、DESCを指定します。
ソートキーは複数指定できますが、ソート順は複数の設定はできません。
 ASC:昇順。1、2、3…の様に小さなものから大きなものの順番。
 DESC:降順。昇順の逆。
 
 
また、ソートキーにカスタムフィールドの値を指定したい場合は、少し指定の仕方が変わって下記の様になります。
 

 
「meta_key」にはソートキーを指定します。
ここでは、カスタムフィールドに「順番」として「SortNumber」という項目を追加して、その項目に入っている数値でソートをする想定です。
 
「orderby」には「meta_value」「meta_value_num」が指定できます。
  「meta_value」は、ソートキーを文字列として扱います。
  「meta_value_num」は、ソートキーを数値として扱います。
  ※「100」と「50」は、数値では「100」の方が大きいですが、文字列としては「50」の方が大きいテキストとして扱われます。
 
「order」は、変わらず ASC、DESCを指定します。
 
 

ソート条件+抽出条件付のサンプルソースコード

 

サンプルソースコード

 
また、ソート条件だけではなく詳細な抽出条件、検索条件を設定したい場合は、下記の通り「meta_query」項目を追加することで対応できます。
 

 

サンプルソースコードの解説

 
例えば、カスタムフィールドに「発売開始日」として「Start_Day」という項目があり、その項目で「2015.01.01~2015.03.31」の間の商品だけを一覧表示したい、という場合は上記のようになります。
 
追加された項目は、9行目~21行目が追加された箇所で、それぞれ下記を設定します。
 
 key:検索対象となるキー項目を指定
 value:検索条件となる値を指定
 compare:検索条件を指定。「=」「<=」「>=」「<」「>」など
       「like」もOK。「%」は付けなくても自動的に付与される。
       「in」もOK。その場合は「value」に配列で値を設定する。
 type:項目の型を指定。DATEのほか、BINARY、CHAR、NUMERICなど。
 relation:複数項目を設定する場合「AND」「OR」を指定
 
それぞれの項目で設定できる内容は、下記のレファレンスを参照してください。(「カスタムフィールドパラメータ」のところにあります。)
 http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/WP_Query
 
 


 

サンプルソースコード全体

 

functions.phpに編集する内容

 
ショートコード全体としては、以下のように使う感じでしょうか。
全体、と言っても「extract」で「day_from」「day_to」のデフォルト値を設定しているくらいの違いですが。
 

 
 

投稿の記事内、固定ページに記述する内容

 
ショートコードを呼び出し、引数でカテゴリの条件、抽出条件などを記述する方法は以下の通りです。
 

 
 
また、「posts_per_page」は、抽出する件数を指定する箇所ですが、「posts_per_page => -1」のように「-1」を指定すると、1ページの表示制限をなくすことができます(全件表示になります)。
 
 

カスタムフィールドの関連記事 2015.11.21 追記

 
カスタムフィールドは WordPressのデフォルトの機能でも使えますが、使いにくい部分もありますので、より便利に使うためには Custom Field Templateや Advanced Custom Fieldsなどのプラグインを使うことをオススメします。
 超簡単!Custom Field Templateでカスタムフィールドをフル活用
 カスタムフィールド決定版!Advanced Custom Fields全項目完全解説・管理画面編
 Advanced Custom Fieldsの全項目解説・公開側表示編集編
 
また、WordPressにはカスタムフィールドの他に、カスタム投稿、カスタムタクソノミーというカスタム機能があります。
これも使いこなせるようになると WordPressの可能性がぐっと広がります。
 WordPressのカスタムフィールド、カスタム投稿、カスタムタクソノミーとは?

 - WordPress

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

WordPress 画面が真っ白になる不具合があった場合の対応の一つ

WordPressで画面が真っ白になる不具合があった場合の対応方法の説明です。PHPでエラーが起こっている場合がほとんどですがその対処方法です。

Comment Rating FieldでWordPressのコメントに口コミサイト機能を追加

口コミサイトを構築するためのプラグイン。評価点を投票する仕組みをコメント投稿機能に追加する方法で実現。口コミサイトを構築するには十分な機能を提供。

SMTP Mailerでスパム判定回避。WP Mail SMTPで発生する送信エラーも対応
SMTP Mailerでスパム判定回避。WP Mail SMTPで発生する送信エラーも対応

WordPressからのメールをスパム判定されずに送信する「SMTP Mailer」の解説。SMTP MailerはPHP 5.6、7.0になってもSMTP接続でエラーにならない設定を搭載しているのが特徴。

Theme My Loginの日本語翻訳ファイル Ver.6.4.5対応

Theme My Loginの日本語翻訳ファイルのダウンロードページ。WordPressの翻訳ファイルの設置方法、注意点、翻訳ファイルの作成方法なども解説。

WordPressのアップグレードの英語版と日本語版の公開のタイムラグは?

WordPressのアップグレードの英語版と日本語版の公開のタイムラグについて説明しています。

WordPressの一般設定 投稿設定 表示設定 ディスカッション メディア

基本的な設定を行う「設定」の解説です。ブログサイトを構築する際に必要な設定内容を一般設定、投稿設定、表示設定などの各項目を説明しながら設定内容を提示しています。

AdminerはWordPressのデータベース管理プラグインの決定版!

データベース管理プラグインはAdminerがあれば他に必要ありません。なぜならDB管理ツールAdminerと同じものをプラグインとして提供しているからです。

MW WP Formの使い方詳細解説・WordPressの確認画面付フォーム

WordPressの確認画面付お問い合わせフォームプラグイン「MW WP Form」の詳細解説をしています。

XAMPPのWordPressの更新でFatal error: Maximum execution time of 30 seconds exceededのエラーが発生して失敗する場合の対処方法

XAMPP環境のWordPressアップデート時に「Maximum execution time of 30 seconds exceeded」のエラーが出る。「max_execution_time」を変更して解決する方法の解説。

Captchaを使って WordPressのコメントスパム対策をする

コメントスパム対策として入力させない対策の一つとしてCAPTCHAという方法がありそれを簡単に実装できるプラグインCaptchaの解説です。