「WordPressで学ぶPHP(3)関数編」を発売しました。
本書は「WordPressで学ぶPHP(1)変数・制御構造編」「WordPressで学ぶPHP(2)データ構造(配列・オブジェクト)編」の続編にあたり、PHP組み込みの関数や、独自の関数を作る方法などを解説します。
Kindle本で、定価400円です。
ブログ記事詳細検索プラグイン(その14・複雑なOR検索)
SearchEntriesプラグインを若干バージョンアップして、複雑なOR検索を行う機能を追加しました。
1.ダウンロードとインストール
新しいバージョンは、以下からダウンロードすることができます。
ダウンロードしたZipファイルを解凍すると、「plugins」というフォルダができます。
このフォルダを、Movable Typeのインストール先にアップロードします。
2.セクション間のOR検索
最初のバージョンでは、検索条件のセクション(ブログ記事のフィールド/カテゴリ/タグ/カスタムフィールド)の間で、OR検索を行うことができませんでした。
例えば、「タイトルに『プラグイン』を含むか、または『CMS』というタグがついている」という検索を行いたいとします。
「タイトルに『プラグイン』を含む」という条件は、ブログ記事のフィールドのセクションで条件を指定します。
一方、「『CMS』というタグがついている」という条件は、カスタムフィールドのセクションで条件を指定します。
この検索は、異なるセクションの間のORになるので、行うことができませんでした。
3.手順
今回のバージョンでは、このような検索を行う機能を追加しました。
ただし、検索条件を指定する際には、やや頭を使う必要があります。
3-1.検索条件の分割
まず、ORでつなぎたい検索条件を、以下の各部分に分けます。
- (a)ブログ記事のフィールド以外の1つのセクションだけで表せる条件
- (b)ブログ記事のフィールドのセクションと、ブログ記事以外のセクションとのANDで表せる条件
- (c)ブログ記事のフィールド以外のセクションどうしのANDで表せる条件
- (d)ブログ記事のフィールドのセクションだけで表せる条件
3-2.各部分の検索
次に、(a)~(c)の各条件をMTSearchConditionsタグのブロックで表し、検索されたブログ記事のIDを、それぞれ変数に代入します。
それには、MTSearchConditionsタグに「entry_ids="変数名"」というモディファイアを指定します。
<mt:SearchConditions entry_ids="変数名"> 検索の条件を指定するテンプレートタグ </mt:SearchConditions>
3-3.ORによる結合
最後に、「ブログ記事のIDが、上の(a)~(c)の結果の変数の値になっている」という条件と、(d)の条件とのORを取ります。
そして、その条件を満たすブログ記事を読み込みます。
例えば、前述の(a)~(c)にあたる条件が3種類あり、それぞれの結果を、変数eid1~eid3に代入したとします。
この場合、以下のようにテンプレートを組みます。
<mt:SearchConditions> <$mt:SearchConditionValues field="id" values="$eid1"$> <$mt:SearchConditionUnion op="or"$> <$mt:SearchConditionValues field="id" values="$eid2"$> <$mt:SearchConditionUnion op="or"$> <$mt:SearchConditionValues field="id" values="$eid3"$> <$mt:SearchConditionUnion op="or"$> <mt:SearchConditionSection> (d)の条件を表すテンプレートタグ </mt:SearchConditionSection> </mt:SearchConditions>
なお、(d)で表せる条件がない場合は、上のリストのMTSearchConditionSectionタグのブロックと、その直前の<$mt:SearchConditionUnion op="or"$>のタグを省略します。
4.事例
例えば、以下のようなブログがあるとします。
- 1.記事にサブタイトルを付けるために、テキスト型のカスタムフィールドを追加しているとします。
- 2.1.のカスタムフィールドのベースネームは、「entry_subtitle」にしているとします。
- 3.タイトル/サブタイトルのどちらかに「Movable Type」を含むか、もしくは「Movable Type」のタグを付けているブログ記事を検索します。
まず、上記の条件を、前述の3-1.の手順に沿って、複数の条件に分解します。
実際に分解すると、3-1.の(a)~(d)のそれぞれに当てはまる条件は、以下の表のようになります。
パターン | 条件 |
---|---|
(a)ブログ記事のフィールド以外の1つのセクションだけで表せる条件 |
|
(a)ブログ記事のフィールドのセクションと、ブログ記事以外のセクションとのANDで表せる条件 | なし |
(c)ブログ記事のフィールド以外のセクションどうしのANDで表せる条件 | なし |
(d)ブログ記事のフィールドのセクションだけで表せる条件 | タイトルに「Movable Type」を含む |
まず、(a)の2つの条件を、それぞれMTSearchConditionsタグのブロックで表し、検索されたブログ記事のIDを、変数に代入します。
そして、それらのIDと、(d)の条件とのORを取ります。
(a)の2つの条件の結果を、それぞれ変数eid1/eid2に代入するとすれば、この検索条件は以下のようなテンプレートで表すことができます。
<mt:SearchConditions entry_ids="eid1"> <mt:SearchConditionCFSection field="entry_subtitle"> <$mt:SearchConditionCFLike values="Movable Type"$> </mt:SearchConditionCFSection> </mt:SearchConditions> <mt:SearchConditions entry_ids="eid2"> <mt:SearchConditionTagSection> <$mt:SearchConditionTag tag="Movable Type"$> </mt:SearchConditionTagSection> </mt:SearchConditions> <mt:SearchConditions> <$mt:SearchConditionValues field="id" values="$eid1"$> <$mt:SearchConditionUnion op="or"$> <$mt:SearchConditionValues field="id" values="$eid2"$> <$mt:SearchConditionUnion op="or"$> <mt:SearchConditionSection> <$mt:SearchConditionLike field="title" values="Movable Type"$> </mt:SearchConditionSection> </mt:SearchConditions>
1~5行目で、サブタイトルのカスタムフィールドに「Movable Type」を含むブログ記事を検索し、それらの記事のIDを、変数eid1に代入します。
次の6~10行目で、「Movable Type」のタグがついているブログ記事を検索し、それらの記事のIDを、変数eid2に代入します。
そして、残りの部分で、前述の2つの条件のどちらかを満たすブログ記事か、またはタイトルに「Movable Type」を含むブログ記事を検索します。
5.SearchEntriesプラグイン関係の記事の一覧
SearchEntriesプラグイン関係のその他の記事は、以下のリンクから参照できます。
- ブログ記事詳細検索プラグイン(その1・概要/インストール/ライセンス)
- ブログ記事詳細検索プラグイン(その2・「ブログ記事のフィールドの値が○○に等しい」場合の検索)
- ブログ記事詳細検索プラグイン(その3・「ブログ記事のフィールドの値に○○を含む」場合の検索)
- ブログ記事詳細検索プラグイン(その4・「ブログ記事のフィールドの値が○○以上」等の場合の検索)
- ブログ記事詳細検索プラグイン(その5・ブログ記事のフィールドどうしでのOR検索)
- ブログ記事詳細検索プラグイン(その6・カテゴリのOR検索)
- ブログ記事詳細検索プラグイン(その7・カテゴリのAND検索)
- ブログ記事詳細検索プラグイン(その8・タグの検索)
- ブログ記事詳細検索プラグイン(その9・カスタムフィールドでの検索の基本)
- ブログ記事詳細検索プラグイン(その10・カスタムフィールドでの検索の応用)
- ブログ記事詳細検索プラグイン(その11・各種の検索条件の指定)
- ブログ記事詳細検索プラグイン(その12・ブログ記事の並べ替え)
- ブログ記事詳細検索プラグイン(その13・検索結果の一部を読み込む)
- ブログ記事詳細検索プラグイン(その14・複雑なOR検索)
- ブログ記事詳細検索プラグイン(その15・検索結果の件数の出力)
- ブログ記事詳細検索プラグイン(その16・検索フォーム作成の基本)
- ブログ記事詳細検索プラグイン(その17・検索結果表示テンプレート作成の基本)
- ブログ記事詳細検索プラグイン(その18・検索を動作させるための設定)
- ブログ記事詳細検索プラグイン(その19・検索フォーム/検索結果表示の事例・1つの数値で検索)
- ブログ記事詳細検索プラグイン(その20・検索フォーム/検索結果表示の事例・数値の範囲で検索)
- ブログ記事詳細検索プラグイン(その21・検索フォーム/検索結果表示の事例・数値の範囲をselectで選択)
- ブログ記事詳細検索プラグイン(その22・検索フォーム/検索結果表示の事例・日付で検索)
- ブログ記事詳細検索プラグイン(その23・検索フォーム/検索結果表示の事例・期間で検索)
- ブログ記事詳細検索プラグイン(その24・検索フォーム/検索結果表示の事例・カテゴリのOR検索)
- ブログ記事詳細検索プラグイン(その25・検索フォーム/検索結果表示の事例・カテゴリのAND検索)
- ブログ記事詳細検索プラグイン(その26・検索フォーム/検索結果表示の事例・タグのOR検索)
- ブログ記事詳細検索プラグイン(その27・検索フォーム/検索結果表示の事例・タグのAND検索)
- ブログ記事詳細検索プラグイン(その28・検索フォーム/検索結果表示の事例・ドロップダウン/ラジオボタンのカスタムフィールドの検索)
- ブログ記事詳細検索プラグイン(その29・検索結果のページ分割/静的な検索の場合)
- ブログ記事詳細検索プラグイン(その30・検索結果のページ分割/動的な検索の場合)
- ブログ記事詳細検索プラグイン(その31・検索結果のページ分割/PHPによるキャッシュ)
- SearchEntriesプラグインでMore Custom FieldsプラグインのCheckbox Groupを検索する(静的編)
- SearchEntries プラグインでMore Custom FieldsプラグインのCheckbox Groupを検索する(動的編)
- SearchEntriesプラグイン不具合修正