コンテンツフィールド
基本形①:tag="ContentFieldValue" をそのまま使う
例:カスタムフィールド「表示フラグ」が「非表示」のものを 除外 したい
<mt:Contents content_type="コンテンツタイプ名">
<!-- 表示フラグが「非表示」ではないときだけ出力 -->
<mt:Unless tag="ContentFieldValue" field="表示フラグ" eq="非表示">
<div class="item">
<h3><mt:ContentLabel></h3>
<p>表示フラグ:<mt:ContentFieldValue field="表示フラグ"></p>
</div>
</mt:Unless>
</mt:Contents>
-
tag="ContentFieldValue" field="表示フラグ"
→ 現在ループ中のコンテンツの「表示フラグ」フィールドの値を条件に使う -
eq="非表示"を<mt:Unless>に書いているので
→ 値が「非表示」でないものだけ 中身が出力される = 「非表示」のデータは一覧から除外される
基本形②:いったん変数に入れてから name="" で判定
複数回使いたい時や、ちょっと加工してから条件に使いたい時はこうします。
例:フィールド「料金」が空のものを除外(空じゃないものだけ出す)
<mt:Contents content_type="コンテンツタイプ名">
<!-- まず料金フィールドを変数に入れる -->
<mt:SetVarBlock name="price">
<mt:ContentFieldValue field="料金">
</mt:SetVarBlock>
<!-- price が空と等しくないとき(= 何か入っているとき)だけ表示 -->
<mt:Unless name="price" eq="">
<div class="item">
<h3><mt:ContentLabel></h3>
<p>料金:<mt:Var name="price" numify="1">円</p>
</div>
</mt:Unless>
</mt:Contents>
ポイント:
-
SetVarBlockでpriceという変数に値を入れる -
<mt:Unless name="price" eq="">
→ price が空文字と等しくない(≠ "")ときに中身を出す
→ 結果的に「料金が空のデータは一覧から除外」
よく使うパターンのまとめ
1. フィールドが空じゃないものだけ出したい
<mt:Unless tag="ContentFieldValue" field="料金" eq="">
<!-- 料金が入っているコンテンツだけ表示 -->
</mt:Unless>
2. フィールドが特定の値のときだけ除外したい
<mt:Unless tag="ContentFieldValue" field="ステータス" eq="非公開">
<!-- ステータスが「非公開」以外のデータだけ表示 -->
</mt:Unless>
3. フラグフィールドで「1 のものだけ除外」したい
<mt:SetVarBlock name="hide_flag">
<mt:ContentFieldValue field="非表示フラグ">
</mt:SetVarBlock>
<mt:Unless name="hide_flag" eq="1">
<!-- 非表示フラグが 1 ではないデータだけ表示 -->
</mt:Unless>
ざっくり整理すると
-
ContentFieldValue を直接条件に使うとき
tag="ContentFieldValue" field="フィールド名" ...
-
一度変数に入れてから使うとき
<mt:SetVarBlock name="xxx"><mt:ContentFieldValue field="フィールド名"></mt:SetVarBlock>- その後
<mt:Unless name="xxx" eq="...">
どちらも正解で、「処理を使い回すかどうか」で選ぶ感じです。
ページ一覧
「ウェブページ一覧をフォルダ別に出す」書き方は、ざっくりこの3パターンを押さえておけばOKです。
パターンA:「今いるフォルダ」のページ一覧
- フォルダアーカイブテンプレート
- または「ページ個別テンプレート」で「同じフォルダの兄弟ページ一覧」を出したいとき
<mt:PageFolder> <!-- 今のページが属するフォルダにコンテキストを切り替え -->
<h2><mt:FolderLabel></h2>
<ul>
<mt:Pages sort_by="authored_on" sort_order="asc">
<li>
<a href="<mt:PagePermalink>"><mt:PageTitle></a>
</li>
</mt:Pages>
</ul>
</mt:PageFolder>
-
<mt:PageFolder>の中で<mt:Pages>を回すと、
そのフォルダ配下のウェブページ一覧になります。 - 「今のページと同じフォルダのページ一覧」を出したい時に定番です。
※ここに前の話の <mt:Unless> / <mt:If> を入れると
「同じフォルダの中で、自分自身だけ除外」「特定IDだけ除外」などもできます。
パターンB:特定フォルダ名を指定して一覧
「このテンプレートで、フォルダAのページだけ一覧にしたい」という場合。
<mt:Pages folder="フォルダ名" sort_by="authored_on" sort_order="asc">
<li>
<a href="<mt:PagePermalink>"><mt:PageTitle></a>
</li>
</mt:Pages>
-
folder="フォルダ名"で、特定フォルダに属するページのみを対象にできます。 - サブフォルダもまとめて取りたい場合は、
include_subfolders="1"を付けます:
<mt:Pages folder="お知らせ" include_subfolders="1" sort_by="authored_on" sort_order="asc">
...
</mt:Pages>
パターンC:フォルダごとにまとめて一覧(グルーピング)
「フォルダ見出し → そのフォルダのページ一覧」という構造を
上から順にずらっと出したいとき。
<mt:TopLevelFolders> <!-- まず最上位フォルダを1つずつ -->
<h2><mt:FolderLabel></h2>
<ul>
<mt:Pages include_subfolders="1" sort_by="authored_on" sort_order="asc">
<li>
<a href="<mt:PagePermalink>"><mt:PageTitle></a>
</li>
</mt:Pages>
</ul>
<!-- 必要ならサブフォルダもネスト -->
<mt:SubFolders>
<h3><mt:FolderLabel></h3>
<ul>
<mt:Pages include_subfolders="1" sort_by="authored_on" sort_order="asc">
<li><a href="<mt:PagePermalink>"><mt:PageTitle></a></li>
</mt:Pages>
</ul>
</mt:SubFolders>
</mt:TopLevelFolders>
- フォルダ単位でページをまとめて表示したい「サイトマップ」的なページに向いてます。
「フォルダ別+特定データ除外」を組み合わせる例
例えば、
「同じフォルダのページ一覧を出したいが、
今のページだけは除外したい」
なら、パターンAに <mt:Unless> を足してこうなります👇
<mt:SetVarBlock name="current_page_id"><mt:PageID></mt:SetVarBlock>
<mt:PageFolder>
<h2><mt:FolderLabel></h2>
<ul>
<mt:Pages sort_by="authored_on" sort_order="asc">
<mt:Unless tag="PageID" eq="$current_page_id">
<li>
<a href="<mt:PagePermalink>"><mt:PageTitle></a>
</li>
</mt:Unless>
</mt:Pages>
</ul>
</mt:PageFolder>
「今いるフォルダ」の子フォルダー内ページ一覧
いいテーマです!
「今いるフォルダの “子フォルダ内” ページ一覧」なら、基本は
今いるフォルダ →
<mt:PageFolder>
その子フォルダ →<mt:SubFolders>
子フォルダのページ →<mt:Pages>
という三段構成で書きます 👍
① 子フォルダごとに見出し+ページ一覧(いちばん素直な形)
- 今のページが入っているフォルダを「親フォルダ」として、
- その 子フォルダごと にページ一覧を出すパターンです。
<mt:PageFolder> <!-- 今いるページのフォルダにコンテキストを切り替え -->
<!-- このフォルダの「直下の子フォルダ」を1つずつ -->
<mt:SubFolders>
<h3><mt:FolderLabel></h3>
<ul>
<!-- その子フォルダに属するウェブページ一覧 -->
<mt:Pages sort_by="authored_on" sort_order="asc">
<li>
<a href="<mt:PagePermalink>"><mt:PageTitle></a>
</li>
</mt:Pages>
</ul>
</mt:SubFolders>
</mt:PageFolder>
-
使う場所の例
- ウェブページ個別テンプレート(
about/index.htmlなど) - フォルダアーカイブテンプレート
- ウェブページ個別テンプレート(
-
出力イメージ
[親フォルダ]
├─ 子フォルダA
│ ├─ ページA-1
│ └─ ページA-2
└─ 子フォルダB
└─ ページB-1
という感じで、
- 「子フォルダ名(
<mt:FolderLabel>)」を見出しにして - その配下のウェブページを
<mt:Pages>で一覧
になります。
② 子フォルダ内のページだけを“フラット”に一覧
フォルダ名の見出しはいらない、
「今いるフォルダの子フォルダにあるページだけを、全部まとめてリスト」
という形にしたい場合は、見出しを外してこんな書き方もできます。
<mt:PageFolder>
<ul>
<!-- 子フォルダを順番にまわしながら、その中のページを全部出していく -->
<mt:SubFolders>
<mt:Pages sort_by="authored_on" sort_order="asc">
<li>
<a href="<mt:PagePermalink>"><mt:PageTitle></a>
</li>
</mt:Pages>
</mt:SubFolders>
</ul>
</mt:PageFolder>
- 表示上はフォルダ見出しを出していないだけで、
ロジックとしては「子フォルダ → そのページ」を全部つなげて出しています。 - 同じ親フォルダ配下のすべての子フォルダに入っているページが並びます。
③ 親フォルダ自身のページは含めず、「子フォルダだけ」のポイント
上の2パターンはどちらも、
- 親フォルダ:
<mt:PageFolder> - 子フォルダ:
<mt:SubFolders>の中の<mt:Pages>
という形になっているので、
親フォルダ直下のページはそもそも
Pagesの対象になっていない
(子フォルダ内ページだけが対象)
という動きになっています。
「親フォルダ直下のページも一緒に出したい」なら、逆に <mt:Pages> を <mt:PageFolder> 直下にも書き足す感じです。
このあと「特定ページだけ除外」も組み合わせられる
さっきまで話していた Unless ももちろん組み合わせられます。
例:
「今見ているページと同じ子フォルダ内のページ一覧を出したいが、自分自身は除外したい」なども、
<mt:SetVarBlock name="current_page_id"><mt:PageID></mt:SetVarBlock>
<mt:PageFolder>
<mt:SubFolders>
<h3><mt:FolderLabel></h3>
<ul>
<mt:Pages sort_by="authored_on" sort_order="asc">
<mt:Unless tag="PageID" eq="$current_page_id">
<li><a href="<mt:PagePermalink>"><mt:PageTitle></a></li>
</mt:Unless>
</mt:Pages>
</ul>
</mt:SubFolders>
</mt:PageFolder>
みたいに書けます。
「今いるものだけ除外」は、ページでもコンテンツデータでも 基本パターンは同じ です。
- まず「今いるID」を変数に入れる
- 一覧ループの中で、そのIDと一致したら出力しない
これをそれぞれ
- ウェブページ一覧(
<mt:Pages>) - コンテンツデータ一覧(
<mt:Contents>)
で書いてみます。
① ウェブページ一覧で「今いるページだけ除外」
A. 同じフォルダ内の他ページ一覧(兄弟ページ)から除外する例
想定:
ウェブページ個別テンプレート(ウェブページのアーカイブテンプレート)で
「同じフォルダ内の他のページ一覧」を出したいが、
今見ているページだけは出したくない 場合。
<mt:SetVarBlock name="current_page_id"><mt:PageID></mt:SetVarBlock>
<mt:PageFolder> <!-- 今のページが属しているフォルダ -->
<h2><mt:FolderLabel></h2>
<ul>
<mt:Pages sort_by="authored_on" sort_order="asc">
<!-- 今いるページ(current_page_id)と同じIDなら表示しない -->
<mt:Unless tag="PageID" eq="$current_page_id">
<li>
<a href="<mt:PagePermalink>"><mt:PageTitle></a>
</li>
</mt:Unless>
</mt:Pages>
</ul>
</mt:PageFolder>
ポイント:
-
PageID… 今ループ中のページのID -
current_page_id… 今開いているページのID(最初に変数に保存) -
<mt:Unless tag="PageID" eq="$current_page_id">で
「IDが同じなら出さない」=今いるページだけ一覧から除外 になります。
同じことを If で書くとこうなります:
<mt:If tag="PageID" ne="$current_page_id">
...表示部分...
</mt:If>
中身は同じで、好みの問題です。
B. 「今いるフォルダ」の子フォルダ内ページ一覧から除外する例
さっき話していた「今いるフォルダの子フォルダ内ページ一覧」に
“今いるページだけ除外” を足したバージョンです。
<mt:SetVarBlock name="current_page_id"><mt:PageID></mt:SetVarBlock>
<mt:PageFolder>
<mt:SubFolders>
<h3><mt:FolderLabel></h3>
<ul>
<mt:Pages sort_by="authored_on" sort_order="asc">
<mt:Unless tag="PageID" eq="$current_page_id">
<li>
<a href="<mt:PagePermalink>"><mt:PageTitle></a>
</li>
</mt:Unless>
</mt:Pages>
</ul>
</mt:SubFolders>
</mt:PageFolder>
② コンテンツタイプアーカイブで「今いるコンテンツデータだけ除外」
想定:
コンテンツタイプアーカイブテンプレート(コンテンツデータ個別)で
- 「同じコンテンツタイプの他のデータ一覧(関連記事)」を出したい
- でも 今見ているコンテンツデータは除外 したい
というパターン。
<mt:SetVarBlock name="current_cd_id"><mt:ContentID></mt:SetVarBlock>
<h2>同じコンテンツタイプの他のデータ</h2>
<ul>
<mt:Contents
content_type="コンテンツタイプ名"
sort_by="content_field"
sort_order="asc">
<!-- 今いるコンテンツデータとIDが同じなら表示しない -->
<mt:Unless tag="ContentID" eq="$current_cd_id">
<li>
<a href="<mt:ContentPermalink>"><mt:ContentLabel></a>
</li>
</mt:Unless>
</mt:Contents>
</ul>
これで、
- コンテンツタイプ「コンテンツタイプ名」の一覧を出しつつ
- 今表示しているコンテンツ(
ContentIDがcurrent_cd_idと同じ)はスキップ
という動きになります。
Ifで書く場合はこう:
<mt:If tag="ContentID" ne="$current_cd_id">
...表示...
</mt:If>
③ さらに条件を足したいときのヒント
例えば:
- 同じカテゴリ(分類セット)に属しているデータだけに絞る
- 特定のカスタムフィールドが空じゃないものだけ表示
- 「自分以外+公開日が未来じゃないものだけ」など
も同じパターンで組み合わせられます。
例:
「自分以外、かつ フィールド公開フラグが1 のデータだけ」
<mt:SetVarBlock name="current_cd_id"><mt:ContentID></mt:SetVarBlock>
<mt:Contents content_type="コンテンツタイプ名">
<!-- まず公開フラグを変数に -->
<mt:SetVarBlock name="publish_flag">
<mt:ContentFieldValue field="公開フラグ">
</mt:SetVarBlock>
<mt:If tag="ContentID" ne="$current_cd_id" and name="publish_flag" eq="1">
...表示...
</mt:If>
</mt:Contents>
まとめ(覚え方)
-
ページ版
-
PageIDをcurrent_page_idに保存 -
<mt:Pages>の中でID == current_page_idをスキップ
-
-
コンテンツデータ版
-
ContentIDをcurrent_cd_idに保存 -
<mt:Contents>の中でID == current_cd_idをスキップ
-
という 同じパターン です。