読者です 読者をやめる 読者になる 読者になる

毎日がひとりオフ

ネットの話題とITと音楽。

変数をカテゴリに指定する際のフィルタリング方法

 mt:entriesのcategoryにおけるフィルタリング、たとえばAという商品のカテゴリと、プレスリリースのカテゴリ両方に属するエントリーを抽出したい場合、通常は

<mt:entries category="A AND プレスリリース">

といった形でフィルタリングを行う。上記であれば、Aカテゴリとプレスリリースの両方に属するエントリーのみが出力の対象となる。


ただし、商品が複数あって、A・B・Cの商品カテゴリそれぞれのエントリーページでプレスリリースを取得したい場合、変数を用いて商品名を指定することになるわけだが、以下の条件でカテゴリーを指定しても、なぜか正しく抽出してくれなかった。

<mt:setVar name="strProductName" value="ねこ" />
<mt:entries category="$strProductName AND プレスリリース">
<p><mt:entryTitle /></p>
</mt:entries>

 この条件式だと、何故かstrProductNameとプレスリリース両方に属するエントリーが抽出されてしまった。すなわち、条件式的には

<mt:entries category="ねこ OR プレスリリース">
<p><mt:entryTitle /></p>
</mt:entries>

と同義になってしまっている。

 なんとかカテゴリを変数で指定し、かつANDでフィルタリングしたいと思って色々試して見たところ、条件式までを直接変数に代入することで、理想の動作をしてくれるようになった。以下がそのコード。

<mt:setVarBlock name="strCategoryFilter"><mt:var name="strProductName"> AND プレスリリース</mt:setVarBlock>
<mt:entries category="$strCategoryFilter">
<p><mt:entryTitle /></p>
</mt:entries>

 MT使い的には常識なのかもしれないけれど、ある程度調べても出てこなかったのと、自分にとって落とし穴になったこともあって、参考になればと思い明記しておく。
 しかしこれ動作的にはどうなんだろうねぇ。