拙著「WordPress Web開発逆引きレシピ」が発売されました。
WordPressの様々なカスタマイズについて、逆引きの形式で取り上げています。
PHP 7.0での動作確認も行っています。
ブログ記事詳細検索プラグイン(その11・各種の検索条件の指定)
SearchEntriesプラグインでは、前回までに紹介した以外にも、いくつかの検索条件を指定することができます。
1.「値が○○ではない」などの検索
ブログ記事のフィールドと、カスタムフィールドの検索では、「値が○○ではない」などの条件で検索するテンプレートタグもあります。
モディファイアの指定方法は、「値が○○である」等のテンプレートタグと同じです。
検索条件 | ブログ記事のフィールド用の テンプレートタグ | カスタムフィールド用の テンプレートタグ |
---|---|---|
値が○○でない | MTSearchConditionNotValues | MTSearchConditionCFNotValues |
値に○○を含まない | MTSearchConditionNotLike | MTSearchConditionCFNotLike |
例えば、タイトルに『Movable Type』を含まないブログ記事を検索して、その一覧を出力する場合は、MTSearchConditionNotLikeタグを使って、以下のようにテンプレートを組みます。
<mt:SearchConditions> <$mt:SearchConditionNotLike field="title" values="Movable Type"$> </mt:SearchConditions> <mt:IfNonZero tag="SearchLoadedEntryCount"> <ul> <mt:Entries> <li><$mt:EntryTitle$></li> </mt:Entries> </ul> </mt:IfNonZero>
2.公開状態での検索
通常の検索では、公開されているブログ記事だけが検索対象になります。
しかし、下書き等のブログ記事も検索したい場合もあります。
ブログ記事の公開状態(公開や下書きなど)で検索するには、「MTSearchConditionStatus」というテンプレートタグを使います。
このテンプレートタグは、MTSearchConditionsタグのブロック内に書きます。
また、他の条件指定のタグと組み合わせることもできます。
statusモディファイアで、公開状態の条件を指定します。
statusモディファイアに指定する値は、以下の通りです。
公開状態 | 値 |
---|---|
下書き | draft |
公開 | publish |
承認待ち | review |
日時指定 | future |
例えば、タイトルに「Movable Type」を含み、かつ下書き状態になっているブログ記事を検索するには、以下のようにテンプレートタグを組みます。
<mt:SearchConditions> <$mt:SearchConditionStatus status="draft"$> <$mt:SearchConditionLike field="title" values="Movable Type"$> </mt:SearchConditions> <mt:IfNonZero tag="SearchLoadedEntryCount"> <ul> <mt:Entries> <li><$mt:EntryTitle$></li> </mt:Entries> </ul> </mt:IfNonZero>
なお、「status="future","review"」のように、複数の公開状態をコンマで区切って指定することもできます。
その場合は、複数の公開状態のどれかに該当するブログ記事が検索対象になります。
また、「status="all"」とすると、公開状態に関係なく、全てのブログ記事を検索対象にすることができます。
3.複数のブログにまたがる検索
複数のブログにまたがる検索を行うこともできます。
その場合は、MTSearchConditionsタグにinclude_blogsモディファイアを指定します。
include_blogsモディファイアの書き方は、MT標準の複数ブログ対応のテンプレートタグと同じです。
例えば、IDが2番と3番のブログから、タイトルに「Movable Type」を含むブログ記事を検索するには、以下のようにテンプレートを組みます。
<mt:SearchConditions include_blogs="2,3"> <$mt:SearchConditionLike field="title" values="Movable Type"$> </mt:SearchConditions> <mt:IfNonZero tag="SearchLoadedEntryCount"> <ul> <mt:Entries> <li><$mt:EntryTitle$>(<$mt:BlogName$>)</li> </mt:Entries> </ul> </mt:IfNonZero>
なお、通常の検索では、テンプレートが属するブログ(またはウェブサイト)が検索対象になります。
4.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」をぜひご利用ください
木村
複数のブログにまたがる検索で、SearchLoadedEntryCountで検索結果の件数が取得できますが、各ブログごとの件数も取得したいのですが、方法はありますでしょうか。
例えば、IDが2番と3番のブログから、タイトルに「Movable Type」を含むブログ記事が30件見つかったとして、そのうちIDが2番のブログでは10件、IDが3番のブログでは20件というように各ブログごとの件数も表示したいです。どうぞよろしくお願いいたします。
壱から木村への返信
>木村さん
こんにちは。
申し訳ありませんが、1回の検索でブログ毎等にカウントを分ける機能はありません。
ただし、以下の記事の方法を活用して、ブログ毎に検索を行って、結果の件数だけ別途求めることなら可能です。
http://www.h-fj.com/blog/archives/2010/04/24-125858.php
木村から木村への返信
回答ありがとうございます。
>ブログ毎に検索を行って、結果の件数だけ別途求めることなら可能です。
思い通りのものが作れそうです。ありがとうございました。
鈴木
当記事にあります、MTSearchConditionsタグのinclude_blogsですが、
加えても対象のブログを検索結果に反映しません。
Movable Type 5 実践テクニックと当ブログに習って構築しています。
MT5で、必要なプラグインはすべてインストール済み。
余分なソースが含まれない形で実行してもうまくいきません。
考えられる原因はありますでしょうか。
ご確認、よろしくお願いいたします。
壱から鈴木への返信
>鈴木さん
こんにちは。
ご質問の件ですが、MTSearchConditionsタグのブロックをどのように組んでいるか、見せていただくことはできないでしょうか。
鈴木から鈴木への返信
早速の返信、ありがとうございます。
MTSearchConditionsタグは下記の通りです。
--
<mt:SearchConditions include_blogs="2,3">
<mt:SearchConditionLike field="title" values="○○○">
</mt:SearchConditions>
壱
>鈴木さん
こんにちは。
いただいたタグでこちらでテストしてみましたが、問題なく結果が表示されました。
ちなみに、こちらでは以下のようにタグを組んで結果を表示するようにしました。
壱から壱への返信
>鈴木さん
こんにちは。
検索フォームを通して検索しているなら、MTSearchConditionsタグのブロックの前に、MTGetQueryParamsToVarsタグを忘れていないかどうかを確認してください。
MTGetQueryParamsToVarsタグがないと、フォームで入力された値が変数に代入されないので、検索が正しく動作しません。
鈴木
検証ありがとうございました。
プラグインとは別の要因なのでしょうか…。
もう少し検証してみます。
ちなみにこちらの環境ですと、include_blogsの値に関係なく、
検索結果テンプレートのあるブログ内の記事が検索結果に反映されてしまいました。
鈴木
表題の、昨日の件ですが正常な動作が確認できました。
プラグインのバージョンが0.90になっていました。
こちらの確認漏れです。
申し訳ありませんでした。
原田
いつもいろいろなプラグインを使用させていただいており
大変お世話になっております。
すみません、質問させていただきます。
MTOS 5.2.10を使用。Search Entries1.05を使用させていただいております。
コアの書き換え方は、以下の記事の通りに書き換えております。
http://www.h-fj.com/blog/archives/2012/07/26-113003.php
タグはこちらのコメントのNo.9で藤本さまが書かれているように組んでおりますが、
検索結果テンプレートのあるブログ内の記事のみが表示されます。
何か考えられる原因はございますでしょうか。
お忙しいところ恐れ入りますご回答いただければ幸いです。
壱から原田への返信
>原田さん
こんにちは。
以下の記事の状況ではないでしょうか。
http://www.h-fj.com/blog/archives/2012/12/19-162148.php