仕事でMovableType5を使うことがあり、調べたことがあったのでメモします。
カテゴリ分けされたブログ記事自体のページは残したまま、ブログ記事一覧の表示/非表示の切り替えをカスタムフィールドで実装をしたいと思いました。理由は、今まで一覧表示させたくない記事は非公開にして運用していましたが(一覧表示の体裁のため)、そうするとページがリンク切れになり、クロールエラーが多々発生していました。
MTEntriesでは、カスタムフィールドの値によってデータを取得するかどうかの設定が可能なようです。
field:*customfieldbasename*=”foo”
しかし、サイトのカテゴリ一覧に表示する処理を見ると、MTEntries ではなく、SuperSortプラグインによって使用可能になるMTSortedEntriesをつかっていました。
MTSortedEntriesでは、カスタムフィールドによるフィルタリングは対応していないとのことでした。
Q. MTSortedEntriesには、MTEntriesにあるカスタムフィールドの値を指定する
field:customfieldbasename=”foo” を指定することは出来ませんか。またはバージョンアップで実装の予定はありますでしょうか。A.申し訳ありませんがカスタムフィールドへの対応は予定していません。
それで、対策として記事にチェックボックスのカスタムフィールド(noListDisp=1で非表示)を設置し、その値を見て一覧の表示/非表示を切り替えるように実装することで対応しました。ループのカウンタは、奇数・偶数行によって色を変える、clearfixの設定などのために、非表示の場合にカウントアップされると困るので変数を使って対応しています。
<MTsetVar name="count" value="0"> <MTsortedEntries sort_order="descend" lastn="all"> <MTIf tag="notListDisp"> <MTIgnore>一覧表示しない記事が通るパス</MTIgnore> <MTElse> <MTIgnore>一覧表示する記事が通るパス</MTIgnore> <MTSetVar name="count" value="1" op="+"> <ここに表示処理> </MTIf>
これまでは、一覧表示させたくない記事は非公開にしていましたが、この対応でカスタムフィールドの値の切り替えで一覧から表示されなくなります。SNSに投降したリンク切れも回避できます。簡単な実装ですが、記事のリンク切れを回避できてSEOの対策にもなります。
これでクロールエラーが減っていくことを期待します。