「WordPressで学ぶPHP(1)変数・制御構造編」が発売されました。
「WordPressで学ぶPHP」シリーズの第1巻で、WordPressを通してPHPを学んでいく本です。
この本では、PHPの基本となる変数と制御構造について解説します。
Kindle本で、定価500円です。
複数のブログの記事を複雑な条件で混在させて出力する(その2)
昨日の「ブログAの『ニュース』カテゴリの記事と、ブログBのすべての記事を混在して、その中から最新の5件だけを出力したい。」という話題を、拙作のSearchEntriesプラグインで実現する方法を紹介します。
1.考え方
SearchEntriesプラグインでは、カテゴリ/タグ/カスタムフィールドを組み合わせて、様々な条件でブログ記事を検索することができます。
ただ、ブログ記事そのもののフィールドと、カテゴリ/タグ/カスタムフィールドのいずれかの条件を組み合わせる場合は、1回の検索ではAND検索しか行うことができません。
今回の事例だと、以下の2つの条件をOR検索することが必要になります。
- ブログAに属し、かつ「ニュース」カテゴリに属する
- ブログBに属する
そこで、以下の手順で検索を行います。
- 上記の1つ目の条件でまず検索し、検索結果中の最新5件のブログ記事のIDを得る
- 「記事のIDが、上の検索結果ものになっているもの」と、「ブログBに属する」の条件のORで検索して、最新5件のブログ記事を得る
- 得られたブログ記事を出力する
2.テンプレートの書き方
上の考え方に基づいて、SearchEntriesプラグインを使ってテンプレートを書くと、以下のようになります。
<mt:SearchConditions include_blogs="ブログAのID" entry_ids="eids"> <mt:SearchConditionCategorySection> <$mt:SearchConditionCategory category="ニュース"$> </mt:SearchConditionCategorySection> <$mt:SearchSortOrder sort_by="authored_on" sort_order="desc"$> <$mt:SearchLimit limit="5"$> </mt:SearchConditions> <mt:SearchConditions> <$mt:SearchConditionValues field="id" values="$eids"$> <$mt:SearchConditionUnion op="or"$> <$mt:SearchConditionValues field="blog_id" values="ブログBのID"$> <$mt:SearchSortOrder sort_by="authored_on" sort_order="desc"$> <$mt:SearchLimit limit="5"$> </mt:SearchConditions> <mt:IfNonZero tag="SearchLoadedEntryCount"> <mt:Entries> 検索されたブログ記事の情報を出力するテンプレートタグやHTML </mt:Entries> </mt:IfNonZero>
1~7行目は、ブログAの「ニュース」カテゴリに属するブログ記事の中から、最新の5件を検索する処理です。
ただし、ブログ記事全体を読み込まずに、記事のIDだけを読み込んで、配列変数eidsに代入します。
8~14行目は、以下のどちらかの条件を満たすブログ記事の中から、最新の5件を検索する処理です。
- idフィールド(ブログ記事のID)の値が、配列変数eidsのどれかの値に等しい(=ブログAの「ニュース」カテゴリに属する)
- blog_idフィールド(ブログ記事が属するブログのID)の値が、ブログBのIDに等しい
そして、15~19行目で、検索されたブログ記事を出力します。