お知らせ

WordPress関数リファレンスガイド2010年11月18日

WordPress関数リファレンスガイド」が発売されました。
WordPressでテンプレートをカスタマイズしたり、テーマを作ったりしたい方に向けた、テンプレート内で使う各種の関数のリファレンス本です。
WordPress 3.0に対応しています。

他にも多数書籍を執筆しています。
こちらもぜひご覧ください。

アーカイブの制御(その7・複数アーカイブページ利用時のリンク系タグ)

| コメント(11) | トラックバック(0)

「アーカイブの制御」のシリーズで、前回の記事の最後に、以下のようなことを書きました。

PC用のブログ記事アーカイブページがすでにある状況で、追加でiPhone用のブログ記事アーカイブページも出力するようにしたとします。
その場合、MTEntryPermalinkタグの指すアドレスは、PC用のブログ記事アーカイブページのアドレスになります。
ここで、「iPhone用のブログ記事アーカイブページのアドレスを、どうやって表せば良いか」という疑問が出てきます。

今日はこのことについて解説します。

1.アーカイブマッピングの「優先」

前回解説したように、1種類のアーカイブタイプに複数のアーカイブマッピングを行うことができます。
例えば、「PC用」と「iPhone用」の2つのブログ記事アーカイブテンプレートを作り、両方を「ブログ記事」にアーカイブマッピングすることで、PC用/iPhone用それぞれのブログ記事アーカイブページを出力することができます。

ただし、この例のようにする場合は、MTEntryPermalinkなど、アーカイブページのアドレスを表すタグの出力は、「優先」に設定されているアーカイブページのアドレスになります。
上の例だと、「PC用」と「iPhone用」のアーカイブマッピングのうち、「PC用」が優先に設定されていると、MTEntryPermalinkタグの出力は、PC用のブログ記事アーカイブページのアドレスになります。

1つのタイプのアーカイブに複数のアーカイブマッピングを割り当てると、テンプレートの編集のページで、そのアーカイブマッピングの種類名の右に、チェックボックスが表示されるようになります。
チェックをオンにしたアーカイブマッピングが優先されます。
また、同じタイプのアーカイブの複数のアーカイブマッピングのうち、優先にできるのは1つだけです。

上で述べたような例だと、PC用/iPhone用のテンプレートのアーカイブマッピングの部分にチェックボックスが表示され、PC用のチェックがオンになり、iPhone用はオフになります。

PC用のアーカイブマッピングが優先されている

iPhone用のアーカイブマッピングは優先されていない

2.優先以外のアーカイブページのアドレスを出力する

優先に設定されていないアーカイブページのアドレスは、1つのテンプレートタグで直接的に出力することはできません。
アーカイブのパスの設定に応じて、テンプレートタグを組み合わせて出力する必要があります。

例えば、ここまでであげたような例だと、PC用のブログ記事アーカイブページのアドレスはMTEntryPermalinkタグで出力できます。
しかし、iPhone用のブログ記事アーカイブページは、アーカイブのパスの設定に応じて、テンプレートタグを組み合わせて出力します。

アーカイブのパスを設定する方法には、MTがデフォルトで用意している選択肢から選ぶ方法と、カスタムのパスを設定する方法がありました。
これらのパスの設定をテンプレートタグで表すには、「MTFileTemplate」というタグを使います。

2-1.MT標準の選択肢を使う場合

MT標準の選択肢を使う場合、それを「%y」などのカスタムのパスの書き方に置き換えてから、MTFileTemplateタグで以下のように表します。

<$mt:FileTemplate format="カスタムのパスの書き方">

例えば、ブログ記事アーカイブのパスの設定を、MT標準の選択肢の「yyyy/mm/entry-basename.html」に設定したとします。
yyyyなどは、それぞれ以下のように置き換えることができます。

置き換える元対応するカスタムのパスの書き方
yyyy%y
mm%m
entry-basename.html%-f

ただし、MTFileTemplateタグは、ページのアドレスのうち、アーカイブURLから後の部分しか出力しません。
アーカイブURLは、MTBlogArchiveURLタグで別途出力します。

ここまでの話から、「yyyy/mm/entry-basename.html」に対応する各ページのアドレスは、以下のタグで出力することができます。

<$mt:BlogArchiveURL$><$mt:FileTemplate format="%y/%m/%-f"$>

また、ページのタイトルを出力し、そのページにリンクするようにするなら、以下のようにタグを書きます。

<a href="<$mt:BlogArchiveURL$><$mt:FileTemplate format="%y/%m/%-f"$>"><$mt:EntryTitle$></a>

2-2.カスタムのパスを使う場合

アーカイブのパスとして、カスタムのパスを使うように設定した場合、「%y」等の記号の部分はMTFileTemplateタグで置き換えます。
また、カスタムのパスの中に、一般的なテンプレートタグを使った場合は、そのタグをそのまま使います。

例えば、iPhone用のブログ記事アーカイブを作り、パスを「i/%y/%m/%-f」に設定したとします。
この場合、iPhone用の各ブログ記事のページのアドレスは、以下のように表すことができます。

<$mt:BlogArchiveURL$>i/<$mt:FileTemplate format="%y/%m/%-f"$>

また、ページのタイトルを出力し、そのページにリンクするようにするなら、以下のようにタグを書きます。

<a href="<$mt:BlogArchiveURL$>i/<$mt:FileTemplate format="%y/%m/%-f"$>"><$mt:EntryTitle$></a>

Facebook連携

当記事について「いいね」や「送信」を行っていただけると幸いです。


この記事についてウォールに投稿

トラックバック(0)

トラックバックURL: http://www.h-fj.com/mt/mt-tb.cgi/1771.

コメント(スレッド5件,コメント11件)

コメントはスレッド表示になっています。
また、スレッドの先頭のコメントに対する返信には、先頭に矢印を表示しています。

No.1 阿部 : 複数アーカイブページ利用時のリンク系タグ

リアルタイムで悩んでおりましたので
非常に参考になりました。

リンクURLにアーカイブのパスが使えることが解り、
早速使ってみると、イメージ通りの動作ができました。

ありがとうございました。

No.2 TAK : (無題)

とあるカテゴリだけ、保存先を通常のアーカイブとは変えておきたく、こちらの「アーカイブの制御」記事を参考にさせていただきました。
しかしながら、優先ではない方のブログ記事へのリンクにあたり(優先ではない方のブロク記事へのリンクが必要な)インデックスを再構築するとMTFileTemplateタグのエラーが出てしまいました。

こちらの記事を参考に、修正した箇所と関連するアーカイブマッピングは以下のとおりです。

インデックス(カスタムインデックスにて、Aカテゴリのみリストアップしたもの)記載のブログ記事のURL:
<a href="<$mt:BlogURL$>lvrp/<$mt:FileTemplate format="%y/%m%d"$>.php">リンク</a>
※BlogArchiveURLは特別設定してません

ブログ記事のアーカイブマッピング:
lvrp/%y/%m%d.php

エラー内容:
タグでエラーがありました: タグでエラーがありました: MTArchiveDateを日付コンテキストの外部で利用しようとしました。

MTArchiveDateタグは使用していないのですが…日付別のページには、この方法でリンクをすることができないのでしょうか?
(こちらの方法でアーカイブマッピングを変更する前は、マッピングの指定部分でMTArchiveDateタグを使用し、ファイル名を指定していました)

あまり説明が上手くなく、伝わるか心配なのですが、あちこち検索をかけてみても対処方法が見つけられなかったため、コメントをさせていただきました。
お忙しいところ、申し訳ありませんがアドバイス等、ご教授いただければと思います。

No.3  : (無題)

>TAKさん
こんにちは。

MTFileTemplateタグの「%y」「%m」「%d」は、MT内部でMTArchiveDateタグに変換されます。
MTArchiveDateタグは、MTArchiveListタグのブロック内か、日付系またはブログ記事のアーカイブページのテンプレートでないと使うことができません。

「カスタムインデックスにて、Aカテゴリのみリストアップしたもの」ということなので、おそらくMTArchiveListタグではなく、他のタグでブログ記事をリストアップされているのだと思います。
そうであれば、MTFileTemplateタグではなく、MTEntryDateタグを使って記事の日付を出力するようにする必要があります。

No.4 TAK : (無題)

壱さま

アドバイスいただき、ありがとうございました。
MTArchiveDateタグは、アーカイブページでないと使えないんですね。
今まで、デフォルトに近いブログ記事、カテゴリーアーカイブ、月別アーカイブでしか使ってこなかったので、気づきませんでした…。

MTEntryDateタグを使用して出力ということで、早速試してみたのですが、使用しているカスタムインデックスでは、MTEntriesタグを使用していないため、こちらもエラーとなってしまいました。

カスタムインデックスでのリストアップが、MTでやるには特殊なのかもしれません(今までは、全ての記事を同じルールで保存していたため、MTLinkタグでentry_idを指定していました)

カスタムインデックスが、「コンサートや演劇の公演日別リスト」でそこに「該当の公演のレポート記事をリンク」という内容なのですが、この公演日リストが、レポート記事ない場合もあるので(ようは、私の参加記録なのです)公演タイトルや公演日は普通にテキスト作成し、記事へのリンク部分だけMTタグを使うという形で作っております。

こう云った場合は、entry_id以外でのリンク指定は難しいのでしょうか…。
参考までに、アーカイブマッピングで優先設定にしている(優先にしないと記事が表示されないので)カスタムインデックスをリンクさせていただきます。

もし何か、アドバイス等ございましたらいただけますと幸いです。

せっかく、やりたかったことができる!と思ったので、もうしばらく、あちこち検索およびMTタグを調べてみようと思います。

No.5 TAK : (無題)

壱さま

先日は、アドバイスいただきありがとうございました。
1日時間をおいてみたところ、解決策にたどり着きましたのでご報告させていただきます。

ずっと、通常とは別にしたいアーカイブへのリンク方法を考えていたのですが、このカテゴリ以外はMTEntriesタグを使用してのリストアップ(MTの一般的な使い方)をしていたので、アーカイブマッピングの優先を逆にし、MTEntriesタグを使用してリストアップをしていた記事のリンクをMTEntryDateタグを使って指定するようにしたところ、無事に動作いたしました。

逆の発想に行き着くまでに1日かかってしまったのですが、上記アドバイスをいただいたことにより、訪問者からみた動作は意図したいものにできました。

ありがとうございました。
これからもいろいろなカスタマイズの紹介、楽しみにしております。

No.6 pavion : ブログ記事リストはどの様に書きますか?

こんにちは。ブログ記事リストのアーカイブマッピングはどの様に書くか、又テンプレートにはEntryPermalinkの代わりにどの様に書くか教えてください。よろしくお願いします。

No.7  : Re:ブログ記事リストはどの様に書きますか?

>pavionさん
こんにちは。

ブログ記事リストの場合も、ブログ記事と同じような考え方で、アーカイブマッピングや、テンプレート内でのリンク先を作ることができます。
ただし、ブログ記事系の記号(%bなど)は使えません。
カテゴリアーカイブならカテゴリ系の記号(%cなど)を使い、日付系アーカイブならアーカイブ系の記号(%mなど)を使います。
記号の書き方は、以下のページを参照してください。

http://www.movabletype.jp/documentation/appendices/archive-file-path-specifiers.html

例えば、カテゴリアーカイブのパスを、「サブカテゴリまでのパス/インデックスページのファイル名」のような形にしたいとします。
この場合、アーカイブマッピングを、「%c/%i」にします。
また、テンプレート内でカテゴリアーカイブページにリンクする際には、「<$mt:BlogArchiveURL$><$mt:FileTemplate format="%c/%i"$>」と書きます。

No.8 pavion : Re:ブログ記事リストはどの様に書きますか?

>壱さん
こんにちは。

では、ブログ記事リストのテンプレートに

<MTEntries>
<a href="<$MTEntryPermalink$>"><$mt:EntryTitle$></a>
</MTEntries>

の代わりに

<MTEntries>
<a href="<$mt:BlogArchiveURL$><$mt:FileTemplate format="%y/%m/%-f"$>"><$mt:EntryTitle$></a>
</MTEntries>

ということでいいのでしょうか。(^^;)

もう1つ教えてください。
あとこのページに書かれているようにブログ記事のアーカイブパスに
次のように書くことができるのでしょうか。
ブログ記事リストの方のアーカイブパスにも同じように書けるのでしょうか。

>また、ページのタイトルを出力し、そのページにリンクするようにするなら、以下のようにタグを書きます。

<a href="<$mt:BlogArchiveURL$>i/<$mt:FileTemplate format="%y/%m/%-f"$>"><$mt:EntryTitle$></a>

No.9  : Re:ブログ記事リストはどの様に書きますか?

>pavionさん
こんにちは。

●質問の前半

テンプレートに書くのは、リンク先のアーカイブマッピングに応じたタグになります。
ブログ記事リストのテンプレートに書く場合でも、リンク先は個々のブログ記事(リストではない)なので、ブログ記事(リストではない)のアーカイブマッピングに合わせます。

例えば、ブログ記事のアーカイブマッピングを「%y/%m/%-f」に設定したのであれば、ご質問にあるようなMTEntriesタグの書き方で正しいです。

●質問の後半

アーカイブマッピングのパスの設定には、アーカイブのディレクトリ以下の部分だけが出力されるようにします。
一方、テンプレートの中でリンク先を指定する際には、MTBlogArchiveURLタグと、アーカイブマッピングのパスの設定に応じたMTFileTemplateタグを書きます。

例えば、ブログ記事(リストではない)のアーカイブマッピングのパスの設定を「i/%y/%m/%-f」にしたとします。
この場合、ブログ記事リストテンプレートの中で個々のブログ記事にリンクする部分は、ご質問にあったように、以下のように書くことができます。

<a href="<$mt:BlogArchiveURL$>i/<$mt:FileTemplate format="%y/%m/%-f"$>"><$mt:EntryTitle$></a>

No.10 pavion : アーカイブマッピングパスとテンプレートの書き方について

壱さん
ありがとうございます。)^o^(
現在ブログ記事リスト及びブログ記事それぞれi用(非優先)のテンプレートを追加しようとしてます。
間違っていないか教えてもらえないでしょうか?

内容ですが、カテゴリは3つあります。その3つについては多少テンプレートが異なる為、優先側でそれぞれのテンプレート部分をMTIfCategory nameで囲み条件によって変えています。
そのうちの一つのカテゴリについては、非優先側のもう一つのテンプレートも使って出力したいです。
非優先側にはその一つのカテゴリ記事についてだけ出力したいのでMTIfCategory nameを使っています。

<優先>
【ブログ記事リスト】
・テンプレート

<MTEntries>
<a href="<mt:ArchiveLink />"><mt:ArchiveTitle /></a>
</MTEntries>
もしくは?
<MTEntries>
<a href="<$mt:BlogArchiveURL$><$mt:FileTemplate format="%-c/%i"$>"><$mt:EntryTitle$></a>
</MTEntries>

・アーカイブマッピング
category/sub-category/index.html

【ブログ記事】
・テンプレート

<a href="<$mt:BlogArchiveURL$><$mt:FileTemplate format="%-c/<$MTEntryID pad="1"$>"><$mt:EntryTitle$></a>

もしくは

<$MTEntryBody$>だけで良いのか?

・アーカイブマッピング

%-c/<$MTEntryID pad="1"$>.html


<非優先>
【ブログ記事リスト】
・テンプレート

<MTEntries>
<a href="<$mt:BlogArchiveURL$>i/<$mt:FileTemplate format="%-c/%i"$>"><$mt:EntryTitle$></a>
</MTEntries>
もしくはArchiveLinkを使った他の書き方?
(すみません。分かりません。)

・アーカイブマッピング
i/%-c/%i

【ブログ記事)
・テンプレート

<a href="<$mt:BlogArchiveURL$>i/<$mt:FileTemplate format="%-c/<$MTEntryID pad="1"$>"><$mt:EntryTitle$></a>

もしくは単純に

<$MTEntryBody$>だけで良いのか?

・アーカイブマッピング
i/%-c/<$MTEntryID pad="1"$>.html

宜しくお願いします。
Pavion

No.11  : Re:アーカイブマッピングパスとテンプレートの書き方について

>pavionさん
こんにちは。

まとめると以下のようになります。

・優先設定しているアーカイブページのアドレスは、リンク系のテンプレートタグ(MTEntryPermalink/MTCategoryArchiveLink/MTArchiveLink等)で出力します。
・優先設定でないアーカイブページのアドレスは、MTBlogArchiveURLタグの後にMTFileTemplateタグを書いて表します。
・MTEntryBodyはブログ記事の本文を出力するタグなので、MTEntryBodyタグだけではブログ記事のページにリンクすることはできません。

また、Movable Typeの標準機能だけだと、「特定のカテゴリだけアーカイブページを出力し、それ以外のカテゴリではアーカイブページを出力しない」というようにすることはできません。
この解決方法は、以下の記事を参照してください。

http://www.h-fj.com/blog/archives/2009/08/01-073819.php

コメントする


Facebookでコメント

試験的にFacebookのコメントフォームを設置しました。