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