ショートコードで簡単解決!カスタムフィールドでソート、抽出条件設定方法
2015/12/27
WordPressの記事の一覧を作成(ソート、抽出条件付)
カテゴリ一覧についての説明
「ショートコードで簡単解決!WordPress固定ページにカテゴリ一覧を編集する方法」で、ショートコードを利用して固定ページにカテゴリ一覧を編集する方法を解説しました。
いざ実装する段階になった時に、表示される投稿の記事の順番を指定したいなぁと思ってしまいました。
そんなわけで、この記事では投稿一覧を取得して並べる際に、任意のキーでソートさせる方法を解説します。
「ショートコードで簡単解決!WordPress固定ページにカテゴリ一覧を編集する方法」の続きの記事ですので、ショートコードでカテゴリ一覧を作る方法の解説は前の記事を読んでみてください。
ちなみに、「WordPress投稿にPHPを記述するショートコードの使い方add_shortcode」の記事を読んでもらうと分かりますが、ショートコードで処理を作っておけば、記事に貼ることもできますし、テンプレートにもウィジェットにもショートコードを貼るだけで編集できますので便利ですね。
また、「functions.phpって何?」っていう方には「WordPressの functions.phpがある場所」という記事を書いていますので、こちらも読んでみてください。
ソート条件付のサンプルソースコード
サンプルソースコード
さっそく記事タイトルと投稿日付でソートするショートコードのサンプルソースです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
// ショートコードで呼び出す関数 function Category_List ( $arg = array () ) { extract ( shortcode_atts ( array ( 'category' => '1', 'posts_per_page' => '5' ), $arg ) ); $blog_posts = get_posts ( array ( 'posts_per_page' => $posts_per_page, 'category' => $category, 'orderby' => 'title date', 'order' => 'DESC', )); $html = Create_Html($blog_posts); return $html; } add_shortcode('categorylist', 'Category_List'); // HTMLを生成する関数 function Create_Html ( $blog_posts ) { $html = '<div>'; foreach ( $blog_posts as $post ) { $html .= '<p>' . get_post_time('Y.m.d') . '</p>'; $html .= '<p><a href="' . get_permalink($post->ID) . '">' . $post->post_title . '</a></p>'; } $html .= '</div>'; return $html; } |
サンプルソースコードの解説
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:降順。昇順の逆。
また、ソートキーにカスタムフィールドの値を指定したい場合は、少し指定の仕方が変わって下記の様になります。
1 2 3 |
'meta_key' => 'SortNumber', 'orderby' => 'meta_value_num', 'order' => 'DESC', |
「meta_key」にはソートキーを指定します。
ここでは、カスタムフィールドに「順番」として「SortNumber」という項目を追加して、その項目に入っている数値でソートをする想定です。
「orderby」には「meta_value」「meta_value_num」が指定できます。
「meta_value」は、ソートキーを文字列として扱います。
「meta_value_num」は、ソートキーを数値として扱います。
※「100」と「50」は、数値では「100」の方が大きいですが、文字列としては「50」の方が大きいテキストとして扱われます。
「order」は、変わらず ASC、DESCを指定します。
ソート条件+抽出条件付のサンプルソースコード
サンプルソースコード
また、ソート条件だけではなく詳細な抽出条件、検索条件を設定したい場合は、下記の通り「meta_query」項目を追加することで対応できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
$blog_posts = get_posts ( array ( 'posts_per_page' => $posts_per_page, 'category' => $category, 'meta_key' => 'Plan SortNumber', 'orderby' => 'meta_value_num', 'order' => 'DESC', 'meta_query' => array( array( 'key' => 'Start_Day', 'value' => '2015-01-01', 'compare' => '>=', 'type' => 'date', ), array( 'key' => 'Start_Day', 'value' => '2015-03-31', 'compare' => '<=', 'type' => 'date', ), 'relation'=>'AND' ) )); |
サンプルソースコードの解説
例えば、カスタムフィールドに「発売開始日」として「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」のデフォルト値を設定しているくらいの違いですが。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
// ショートコードで呼び出す関数 function Category_List ( $arg = array () ) { extract ( shortcode_atts ( array ( 'category' => '1', 'posts_per_page' => '5', 'day_from' => '2015-01-01', 'day_to' => '2015-03-31' ), $arg ) ); $blog_posts = get_posts ( array ( 'posts_per_page' => $posts_per_page, 'category' => $category, 'meta_key' => 'Plan SortNumber', 'orderby' => 'meta_value_num', 'order' => 'DESC', 'meta_query' => array( array( 'key' => 'Start_Day', 'value' => $day_from, 'compare' => '>=', 'type' => 'date', ), array( 'key' => 'Start_Day', 'value' => $day_to, 'compare' => '<=', 'type' => 'date', ), 'relation' => ' AND' ) )); $html = Create_Html($blog_posts); return $html; } add_shortcode('categorylist', 'Category_List'); // HTMLを生成する関数 function Create_Html ( $blog_posts ) { $html = '<div>'; foreach ( $blog_posts as $post ) { $html .= '<p>' . get_post_time('Y.m.d') . '</p>'; $html .= '<p><a href="' . get_permalink($post->ID) . '">' . $post->post_title . '</a></p>'; } $html .= '</div>'; return $html; } |
投稿の記事内、固定ページに記述する内容
ショートコードを呼び出し、引数でカテゴリの条件、抽出条件などを記述する方法は以下の通りです。
1 |
[categorylist category='5' posts_per_page='3' day_from="2015-02-01" day_from="2015-02-10"] |
また、「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のカスタムフィールド、カスタム投稿、カスタムタクソノミーとは?
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
ショートコード+ウィジェットでサイドバーに人気記事を表示させる方法
WordPressのサイドナビゲーションに人気記事を編集する方法です。プラグインを使わずウィジェットにショートコードで任意のPostIDを指定することで編集する方法です。
-
WordPressプラグイン開発・ショートコード内でincludeするときにはob_start、ob_get_contents
WordPressのプラグインやショートコードの関数作成でテンプレートをincludeする際に利用するob_start関数、ob_get_contents関数を紹介。
-
自サイト内のリンクをショートコードで指定する・アンカーリンク対応版
自サイト内の記事にショートコードで自動リンクを設定する関数のソースコードを提供。Post ID、slugで指定でき、アンカーリンクを設定する場合も対応。
-
WordPressのメールフォームはwp_mail()関数でメール送信。スパム対策も
WordPressでメール送信フォームを作成するための関数「wp_mail()」の使い方の解説。CC、BCC、添付ファイルも HTMLメールも設定可能。
-
タクソノミーの一覧をショートコードで編集・ソート機能付き・wp_list_categories
カスタムタクソノミーのターム一覧をショートコードで編集する方法の解説です。Category Order and Taxonomy Terms Orderを利用してソート機能を追加したバージョンです。
-
カスタムタクソノミーのターム一覧をウィジェットにショートコードで編集
カスタムタクソノミーに属するターム(カテゴリ)の一覧を wp_list_categories()関数+ショートコードでウィジェットに編集するサンプルプログラムです。
-
WordPressで ¥円マークが \バックスラッシュになる原因と対処方法
円マークがバックスラッシュに変換される。その原因と対処方法を解説します。原因はCSSでのフォント指定に欧文フォントも含まれるため欧文フォントで表示されること。
-
WordPressの記事編集で文字が自動変換される要注意な文字列
記事を編集する際、入力した文字とは違う表示のされ方をする文字、アポストロフィ、ダブルクォート、円マーク、三点リーダ(…)など、その解説と対応方法です。
-
get_categories、get_termsでカテゴリとタクソノミーのターム一覧の編集方法
get_categories()関数やget_terms()関数を使ってタクソノミーのタームを取得し検索処理の部品を作るプログラム作りその解説をしています。
-
WordPressでダブルクォートなどの文字が自動変換?原因と対処方法
ダブルクォート、シングルクォート、HTMLタグなどが自動変換関数によって入力と違う形で表示されます。原因を2つの関数ごとに説明し、対応方法を3パターン提示します。