「WordPressで学ぶPHP(3)関数編」を発売しました。
本書は「WordPressで学ぶPHP(1)変数・制御構造編」「WordPressで学ぶPHP(2)データ構造(配列・オブジェクト)編」の続編にあたり、PHP組み込みの関数や、独自の関数を作る方法などを解説します。
Kindle本で、定価400円です。
ブログ記事詳細検索プラグイン(その10・カスタムフィールドでの検索の応用)
SearchEntriesプラグインでは、複数のカスタムフィールドを組み合わせた検索や、ブログ記事標準のフィールド/カテゴリ/タグを組み合わせた検索も可能です。
1.複数のカスタムフィールドを組み合わせた検索
複数のカスタムフィールドを組み合わせて検索するには、カスタムフィールドの数だけ、MTSearchConditionCFSectionタグを繰り返し書きます。
例えば、以下のようにカスタムフィールドを定義しているとします。
カスタムフィールド | カスタムフィールドの種類 | ベースネーム | テンプレートタグ |
---|---|---|---|
値段 | 整数 | entry_price | MTEntryPrice |
サイズ | テキスト | entry_size | MTEntrySize |
おすすめ | チェックボックス | entry_recommend | MTEntryRecommend |
この状況で、以下のすべての条件を満たすブログ記事を検索したいとします。
- 「おすすめ」のチェックボックスがオンになっている(entry_recommendカスタムフィールドの値が1)
- SかMのサイズがある(entry_sizeカスタムフィールドの値にSかMを含む)
- 1,000円以上2,000円未満(entry_priceカスタムフィールドの値が1,000以上)2,000未満
この場合、3つのカスタムフィールドそれぞれに対して、MTSearchConditionCFSectionタグのブロックを作り、以下のようにテンプレートタグを組みます。
<mt:SearchConditions> <mt:SearchConditionCFSection field="entry_recommend"> <$mt:SearchConditionCFNotValues values="1"$> </mt:SearchConditionCFSection> <mt:SearchConditionCFSection field="entry_size"> <$mt:SearchConditionCFLike values="S,M"$> </mt:SearchConditionCFSection> <mt:SearchConditionCFSection field="entry_price"> <$mt:SearchConditionCFCompare ge="1000" lt="2000"$> </mt:SearchConditionCFSection> </mt:SearchConditions> <mt:IfNonZero tag="SearchLoadedEntryCount"> <ul> <mt:Entries> <li><$mt:EntryTitle$>(<$mt:EntryRecommend$>)(<$mt:EntrySize$>)(<$mt:EntryPrice$>)</li> </mt:Entries> </ul> </mt:IfNonZero>
2.ブログ記事標準のフィールド/カテゴリ/タグを組み合わせた検索
MTSearchConditionタグのブロックの中に、ブログ記事のフィールド/カテゴリ/タグ/カスタムフィールドの条件を続けて書くことで、それら全ての条件を満たすブログ記事を検索することができます。
例えば、前述の例に、さらに以下の条件を追加するとします。
- タイトルに「Tシャツ」を含む
- カテゴリが「シャツ」
- 「Vネック」のタグが付いている
この場合、以下のようにテンプレートを組みます。
<mt:SearchConditions> <$mt:SearchConditionLike field="title" values="Tシャツ"$> <mt:SearchConditionCategorySection> <$mt:SearchConditionCategory category="シャツ"$> </mt:SearchConditionCategorySection> <mt:SearchConditionTagSection> <$mt:SearchConditionTag tag="Vネック"$> </mt:SearchConditionTagSection> <mt:SearchConditionCFSection field="entry_recommend"> <$mt:SearchConditionCFNotValues values="1"$> </mt:SearchConditionCFSection> <mt:SearchConditionCFSection field="entry_size"> <$mt:SearchConditionCFLike values="S,M"$> </mt:SearchConditionCFSection> <mt:SearchConditionCFSection field="entry_price"> <$mt:SearchConditionCFCompare ge="1000" lt="2000"$> </mt:SearchConditionCFSection> </mt:SearchConditions> <mt:IfNonZero tag="SearchLoadedEntryCount"> <ul> <mt:Entries> <li> <$mt:EntryTitle$> (<mt:EntryCategories glue=","><$mt:CategoryLabel$></mt:EntryCategories>) (<mt:EntryTags glue=","><$mt:TagName$></mt:EntryTags>) (<$mt:EntryRecommend$>) (<$mt:EntryIntData$>) (<$mt:EntrySize$>) </li> </mt:Entries> </ul> </mt:IfNonZero>
3.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プラグイン不具合修正
Movable Typeのプラグイン集「MT Cloud Starter Kit」をぜひご利用ください
ST
MTOSテクニックを購入させていただき、
現在、ポータルサイトを構築中です。
カスタムフィールドで複数条件(AND)検索で出力しようとしてますが、
検索結果が0件になってしまい、うまくいきません。
以下の複数条件のどこがおかしいのでしょうか?
よろしくお願いいたします。
<mt:SearchConditions>
<mt:SearchConditionCFSection field=”sex”>
<$mt:SearchConditionCFValues field=”sex” values=”$qp_sex”$>
</mt:SearchConditionCFSection>
<mt:SearchConditionCFSection field=”age”>
<$mt:SearchConditionCFValues values=”$qp_age”$>
</mt:SearchConditionCFSection>
<mt:SearchConditionCFSection field=”height”>
<$mt:SearchConditionCFValues values=”$qp_height”$>
</mt:SearchConditionCFSection>
<mt:SearchConditionCFSection field=”job”>
<$mt:SearchConditionCFValues values=”$qp_job”$>
</mt:SearchConditionCFSection>
</mt:SearchConditions>
※故意に全角にしています。
壱
>STさん
こんにちは。
「MTOSテクニックを購入させていただき、」とのことですが、MTOSでSearchEntriesプラグインをお使いの状況でしょうか。
MTOS活用テクニックのカスタムフィールド風の手法は、MT標準のカスタムフィールドとはデータの管理方法が異なります。
そのため、MT標準のカスタムフィールドを検索する方法(MTSearchConditionCFSection等)は使えません。
MTOS活用テクニックの5-2節に沿って、検索条件のタグを書いてください。
葛
「おすすめ」のチェックボックスがオンになっている(entry_recommendカスタムフィールドの値が1)
の場合だと
mt:SearchConditionCFNotValues values="1"
ではなく
mt:SearchConditionCFValues values="1"
ではないでしょうか??
よしみ
素晴らしいプラグインでありがたくつかわせて頂いています。
最近、mt5.03で動いていたサイトとブログをテンプレートとして保存し、
mt5.07のサイトに再構築しました。
上手くできたかのように見えましたが、検索結果が0件となってしまいます。
ヴァージョンの違いによるものなのでしょうか?
それともそもそものやり方に間違いがあるのでしょうか?
ちなみに、検索結果で分岐している場所をなくすと表示されます。
ご教授よろしくお願いします。
壱からよしみへの返信
>よしみさん
こんにちは。
「サイトとブログをテンプレートとして保存」とのことですが、ウェブサイトとブログをテーマとしてエクスポートしたということでしょうか。
だとすると、MTのテーマの仕様上、テーマには記事はエクスポートされないので、インポート先には記事がまったくない状態になり、検索結果も0件になります。
5.03の環境を残しつつ、5.03から5.07にアップグレードしたいのであれば、phpMyAdmin等で5.03のデータベースを丸ごとコピーして、コピー後のデータベースを使って5.07をインストールしてください。
よしみからよしみへの返信
壱さま、お忙しいところありがとうございました。
検索結果をカスタムフィールドで並べ変えをしていました
その時に書き換えなければならないDBIファイルの書き換えを忘れていたのが、
検索が出来なかった理由だとおもいます。
でも壱さまのページにあったとおりに書き換えたら
検索ボタンをおした後にGo err ....のエラー表示されてしまいました。
とりあえず、カスタムフィールドでの検索をやめ、DBIファイルを元に戻しました。
宜しければ、5.07での書き方を教えていただけませんでしょうか?
壱からよしみへの返信
>よしみさん
こんにちは。お返事が遅くなりました。
こちらでMT5.07で試してみましたが、書き換え方は以前の記事に書いたとおりです。
ただし、MT5.07ではDBI.pmの525行目~550行目付近になっていました。
takeshi
素晴らしいプラグインのご提供、ありがとうございます。
MT 5.14とSearchEntriesプラグインを使用して、同一テンプレート内で「検索条件→検索結果」のペアを複数回表示させようと思っております。
2つのカスタムフィールドの値を評価してのAND検索でして、具体的には下記のような条件です。
<テンプレート上部>
カスタムフィールド1の値がA、かつ、
カスタムフィールド2の値がAの記事リストを表示したい
<テンプレート下部>
カスタムフィールド1の値がA、かつ、
カスタムフィールド3の値がAの記事リストを表示したい
また、テンプレートを下記のような形式で記述してみましたが、結果1も結果2もどちらも最初の検索条件による結果となってしまいます。
---------- 意図した動作とならなかったソース ---------
<mt:SearchConditions>
<mt:SearchConditionCFSection field="カスタムフィールドのベースネーム1">
カスタムフィールドの検索条件を指定するタグ1
</mt:SearchConditionCFSection>
<mt:SearchConditionCFSection field="カスタムフィールドのベースネーム2">
カスタムフィールドの検索条件を指定するタグ2
</mt:SearchConditionCFSection>
</mt:SearchConditions>
<mt:IfNonZero tag="SearchLoadedEntryCount">
<mt:Entries>
結果1
</mt:Entries>
</mt:IfNonZero>
<mt:SearchConditions>
<mt:SearchConditionCFSection field="カスタムフィールドのベースネーム1">
カスタムフィールドの検索条件を指定するタグ1
</mt:SearchConditionCFSection>
<mt:SearchConditionCFSection field="カスタムフィールドのベースネーム3">
カスタムフィールドの検索条件を指定するタグ3
</mt:SearchConditionCFSection>
</mt:SearchConditions>
<mt:IfNonZero tag="SearchLoadedEntryCount">
<mt:Entries>
結果2
</mt:Entries>
</mt:IfNonZero>
---------- /意図した動作とならなかったソース ---------
また、<mt:Entries>のfield:モディファイアと組み合わせて結果を出すことも試みたのですが、<mt:SearchConditions>とのOR条件で結果が出てきてしまいます。
もし、解決方法があればご教示願えませんでしょうか。
お忙しいところ大変恐縮ですが、よろしくお願いいたします。
壱からtakeshiへの返信
>takeshiさん
こんにちは。
ご質問の件ですが、こちらでテストした限りでは、1つのテンプレート内でMTSearchConditionsタグを2回使っても、それぞれ正しい検索結果を得ることができています。
申し訳ありませんが、そちらの環境で動作を見てみないと原因は不明です。
takeshiからtakeshiへの返信
>ご質問の件ですが、こちらでテストした限りでは、1つのテンプレート内でMTSearchConditionsタグを2回使っても、それぞれ正しい検索結果を得ることができています。
大変申し訳ございません。
ソースを精査したところ、2つめの検索条件指定にミスがありました...
再度テストを行ったところ、それぞれ正しい検索結果となりました。
貴重なお時間をいただき、わざわざテストしていただきありがとうございました。
お騒がせいたしました。
kinoshita
Fujimotoさん
はじめまして。
Fujimotoさんのブログには、いつもお世話になっています。
素晴らしいプラグインの提供、大変感謝しております。
当方、MT5.07を使って業務ツールを作成しようとしています。
そこでカスタムフィールド複数(5つくらい)を使って記事の絞り込みをかけられるようにしたいと思っています。
全てのカスタムフィールドはフォームselectを使って選択方式。
試しに2つのカスタムフィールドに対してコードを組んで見たところ、2つとも選択した時には成功しますが、1つだけしか選択しなかった場合は失敗してしまいます。結果が0件になります。できれば、この状況で選択した一つの項目に対しての検索結果が出てほしいです。
以下が検索結果テンプレートに記載しているタグです。
2つの<mt:SearchConditionCFSection>部分を
<mt:IfNonEmpty tag="qp_***">~</mt:IfNonEmpty>
で囲ってみたのですが、成功しません。
<$mt:GetQueryParamsToVars$>
<mt:SearchConditions>
<mt:SearchConditionCFSection field="caseowner">
<$mt:SearchConditionCFValues values="$qp_caseowner"$>
</mt:SearchConditionCFSection>
<mt:SearchConditionCFSection field="desktopname">
<$mt:SearchConditionCFValues values="$qp_desktopname"$>
</mt:SearchConditionCFSection>
</mt:SearchConditions>
ちなみに<mt:If name="qp_***">~</mt:If>でも囲ってみたのですが、やはり結果は同じでした。
初歩的な質問かもしれませんが、当方、HTMLも初心者のレベルです。
既に他のページに解説がありましたらすみません。
一応探してみたのですが、見つけることができませんでした。
お手数ですが、ご教授よろしくお願い致します。
壱
>kinoshitaさん
こんにちは。
検索フォーム側で、それぞれのselect要素の中に以下のようなoption要素を入れて、「↓選択してください」が選択されたときには、サーバーに空文字列を送信するようにしてください。
その上で、それぞれのカスタムフィールドに対する検索条件を、<mt:IfNonEmpty tag="qp_***">~</mt:IfNonEmpty>で囲んでください。
kura
こんにちは。いつも使わせて頂いております。この度、1点質問がございます。
ブログ記事でカスタムフィールドで条件絞込をかけおりまして、以下のコードを試してみましたが、意図して通りにならず、ご教示頂きたく思う所です。
●出力したい内容
「XXX市」というページに「カスタムフィールドAに"XXX市"だけが入力されている記事。」OR「カスタムフィールドAの値に"XXX市"かつ"区"か"郡"が含まれている記事。」を出力したいと考えております。
※備考:投稿されている記事には、東XXX市、西XXX市がありますが、これらは出力に含めません。
●試したコード
<mt:SearchConditions include_blogs="35">
<mt:SearchConditionCFSection field="entry_data_application_questionnaire_city">
<$mt:SearchConditionCFValues values="$entry_data_area_city"$>
</mt:SearchConditionCFSection>
<mt:SearchConditionCFSection field="entry_data_application_questionnaire_city">
<$mt:SearchConditionCFValues values="$entry_data_area_city"$>
<$mt:SearchConditionCFLike values="区,郡"$>
</mt:SearchConditionCFSection>
</mt:SearchConditions>
以上になります。
大変お手数ですが、ご教示頂ければ幸いです。
壱
>kuraさん
こんにちは。
以下で検索できるはずです。
なお、考え方は以下の記事を参照してください。
http://www.h-fj.com/blog/archives/2010/04/23-170326.php