2011年04月01日
WordPressのテンプレートをMovable Typeのタグで処理する
WordPressはデータベースにMySQLを利用し、PHPで書かれたオープンソースのブログソフトウェアです。豊富なテーマやプラグインによる拡張性の高さから数多くのブログやウェブサイトで利用されています。
Power CMS for MTのDynamicMTMLエンジンを利用することで、WordPressのコンテンツをMTML(Movable Type Markup Language=MTタグ)で呼びだして表示制御することができます。この機能はWordPressプラグインによって提供され、ダイナミックパブリッシングもしくはDynamicMTML上で動作します。
WordPressコンテンツを表示するMT:WPタグ
WordPressのコンテンツを表示するにはMT:WPタグを利用します。MT:WP:Entriesはブログ記事(WordPressの「投稿」)をループ表示するブロックタグです。
テンプレート・タグの例を以下に示します。
<mt:wp:Entries category="Foo" limit="20">
<mt:if name="__first__"><ul></mt:if>
<li class="<mt:if name="__odd__">odd<mt:else>even</mt:if>">
<a href="<$mt:wp:EntryPermalink$>">
<$mt:wp:EntryTitle escape="html"$>
(<$mt:wp:EntryAuthorDisplayName$> / <$mt:wp:EntryDate format="%b %Y"$>)
</a>
<mt:wp:EntryCategories glue=",">
<mt:if name="__first__">Categories:</mt:if>
<a href="<$mt:wp:CategoryLink$>">
<$mt:wp:CategoryLabel$>
</a>
</mt:wp:EntryCategories>
<mt:wp:EntryTags glue=",">
<mt:if name="__first__">Tags:</mt:if>
<a href="<$mt:wp:TagLink$>">
<$mt:wp:TagName$>
</a>
</mt:wp:EntryTags>
</li>
<mt:if name="__last__"></ul></mt:if>
</mt:wp:Entries>
WordPressの一般的なテンプレート記述はPHPコードですが、WordPressプラグインを利用することで、テンプレート・タグは完全にロジックと分離され、見通しが良くなることがおわかりいただけるかと思います。
インストールと設定
- DynamicMTMLのインストール(インストールについてはこちらのドキュメントを参照)
- wp-config.cgiを設定します(mt/plugins/WordPress/wp-config.cgi)。記述方法についてはMovable Typeのmt-config.cgiと互換性があります。
- wp-prefix.phpを設定(データベースのprefixを指定します)。
*wp-prefix.phpの例
<?php
// DATABASE PREFIX
define( 'WP_PREFIX', 'wp_' );
?>
これでWordPressのコンテンツをMTMLで処理する準備が整いました。
Movable TypeのコンテンツとWordPressコンテンツを一つのページに表示する
簡単な例として、Alfie(DynamicMTMLのテンプレートエンジンの愛称)を利用したテスト方法をご紹介します。
- Movable TypeとWordPressをインストールします。Movable Typeではウェブサイトの直下にブログを1つ作成します(blog_idは2となります)。
- ドキュメントルート直下にalfieディレクトリを設置します。
- alfie/alfie.phpを編集します($mt_dirにMTのインストールパス、blog_idにMTのブログIDを指定します)。
<?php $mt_dir = '/var/www/cgi-bin/mt'; $SEP = DIRECTORY_SEPARATOR; $blog_id = 2; require_once( $mt_dir . $SEP . 'addons' . $SEP . 'DynamicMTML.pack' . $SEP . 'php' . $SEP . 'dynamicmtml.run.php' ); ?>
- _htaccessを編集し、.htaccessにリネームします。この例は、/alfieディレクトリ以下の拡張子htmlのファイルを動的処理し、MTとWordPressのコンテンツを動的に処理可能にする例です。
Options -Indexes +SymLinksIfOwnerMatch DirectoryIndex /alfie/alfie.php <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f [OR] RewriteCond %{REQUEST_FILENAME} -d [OR] RewriteCond %{REQUEST_FILENAME} ^[^.]+$|\.(html|HTML)$ [NC] RewriteRule ^ alfie.php [L] </IfModule> <IfModule !mod_rewrite.c> Order Deny,Allow Deny from all <FilesMatch (^(|[^.]+)|alfie.php?)$> Allow from all </FilesMatch> ErrorDocument 403 /alfie/alfie.php ErrorDocument 404 /alfie/alfie.php </IfModule> php_flag short_open_tag off
- /alfie/index.htmlを作成し、テンプレートを記述します。
<h1><$mt:BlogName$></h1> <h1><$mt:wp:BlogName$></h1>
- ブラウザで/alfie/にアクセスします。
MT:WPテンプレートタグ
- mt:wp:Entries(ブロックタグ) * mt:wp:get_posts, mt:wp:postsはmt:wp:Entriesのエイリアス
WordPressの「投稿」(ブログ記事)をループ出力します。下記のモディファイアが利用可能です。
id :IDが一致する投稿を1件読み込みます。 category : カテゴリ名で投稿を絞り込みます。 category_id : カテゴリIDで投稿を絞り込みます。 tag : Tagで投稿を絞り込みます。 status : ステータスを指定します。'*'を指定するとすべてを対象にします。 'publish' がデフォルト値です。 type : 投稿の種類(type)を指定します。'*'を指定するとすべてを対象にします。 'post' がデフォルト値です。 sort_by :投稿の表示順を指定します。IDが初期値です。 sort_order : 'ascend(昇順)'または'descend(降順 - 初期値)'を指定します。 lastn : 表示する投稿の数を指定します。 offset : limitモディファイアと一緒に指定し、先頭のoffset件をスキップしてロードします。 limit :数値を指定してロードする投稿件数を指定します。 glue : ループ出力の区切り文字を指定します。
- mt:wp:EntryNext(ブロックタグ) * mt:wp:next_postはmt:wp:EntryNextのエイリアス
現在のコンテキストの投稿の1件次の投稿をブロックコンテキストにセットします。キーはauthored dateです。
- mt:wp:EntryPrevious(ブロックタグ) * mt:wp:previous_postはmt:wp:EntryPreviousのエイリアス
現在のコンテキストの投稿の1件前の投稿をブロックコンテキストにセットします。キーはauthored dateです。
- mt:wp:Categories(ブロックタグ) * mt:wp:list_categoriesはmt:wp:Categoriesのエイリアス
WordPressの「カテゴリ」をループ出力します。下記のモディファイアが利用可能です。
hide_empty : 1を指定するとカテゴリに属する投稿がないカテゴリを含んで読み込みます。 toplevel : mt:wp:SubCategoriesと同様です。 sort_by :投稿の表示順を指定します。IDが初期値です。 sort_order : 'ascend(昇順)'または'descend(降順 - 初期値)'を指定します。 lastn : 表示する投稿の数を指定します。 offset : limitモディファイアと一緒に指定し、先頭のoffset件をスキップしてロードします。 limit :数値を指定してロードする投稿件数を指定します。 glue : ループ出力の区切り文字を指定します。
- mt:wp:Tags(ブロックタグ)
WordPressの「タグ」をループ出力します。下記のモディファイアが利用可能です。
hide_empty : 1を指定するとタグに属する投稿がないタグを含んで読み込みます。 sort_by :投稿の表示順を指定します。IDが初期値です。 sort_order : 'ascend(昇順)'または'descend(降順 - 初期値)'を指定します。 lastn : 表示する投稿の数を指定します。 offset : limitモディファイアと一緒に指定し、先頭のoffset件をスキップしてロードします。 limit :数値を指定してロードする投稿件数を指定します。 glue : ループ出力の区切り文字を指定します。
- mt:wp:EntryCategories(ブロックタグ) * mt:wp:get_the_categoryはmt:wp:EntryCategoriesのエイリアス
現在の投稿が属するカテゴリをループ出力します。このタグの中ではmt:wp:Category関係のテンプレートタグが利用できます。
- mt:wp:EntryTags(ブロックタグ) * mt:wp:get_the_tagsはmt:wp:EntryTagsのエイリアス
現在の投稿につけられたタグをループ出力します。このタグの中ではmt:wp:Tag関係のテンプレートタグが利用できます。
- mt:wp:ArchiveList(ブロックタグ)
月別アーカイブのリストを出力するためのブロックタグです。テンプレートの例:
<mt:wp:ArchiveList archive_type="Monthly"> <mt:if name="__first__"><ul></mt:if> <li> <a href="<mt:wp:ArchiveLink archive_type="Monthly">"> <mt:wp:archivetitle format="%b %Y">(<mt:wp:ArchiveCount>) </a> </li> <mt:if name="__last__"></ul></mt:if> </mt:wp:ArchiveList>
- mt:wp:SubCategories(ブロックタグ) * mt:wp:get_the_tagsはmt:wp:EntryTagsのエイリアス
サブカテゴリを階層化してリスト表示するブロックタグです。
hide_empty : 1を指定するとカテゴリに属する投稿がないカテゴリを含んで読み込みます。 sort_by :投稿の表示順を指定します。IDが初期値です。 sort_order : 'ascend(昇順)'または'descend(降順 - 初期値)'を指定します。 lastn : 表示する投稿の数を指定します。 offset : limitモディファイアと一緒に指定し、先頭のoffset件をスキップしてロードします。 limit :数値を指定してロードする投稿件数を指定します。 glue : ループ出力の区切り文字を指定します。
テンプレートの例:
<mt:wp:SubCategories hide_empty="1"> <mt:wp:SubCatisFirst><ul></mt:wp:SubCatisFirst> <li> <a href="<mt:wp:CategoryLink>"> <mt:wp:CategoryLabel> (<mt:wp:CategoryCount>) </a> <mt:wp:SubCatsRecurse></li> <mt:wp:SubCatisLast></ul></mt:wp:SubCatisLast> </mt:wp:SubCategories>
- mt:wp:SubCatIsFirst(ブロックタグ)
mt:wp:SubCategoriesループの最初のループで出力されます。
- mt:wp:SubCatIsLast(ブロックタグ)
mt:wp:SubCategoriesループの最後のループで出力されます。
- mt:wp:SubCatIsLast(ブロックタグ)
mt:wp:SubCategoriesループの最後のループで出力されます。
- mt:wp:SubCatsRecurse(ブロックタグ)
現在のカテゴリに属するサブカテゴリの mt:wp:SubCategories ブロックを再帰的に表示します。
- mt:wp:BlogName(ファンクションタグ)
ブログ名を表示します。
- mt:wp:BlogInfo(ファンクションタグ)
ブログに関する情報を表示します。 テンプレートの例:
<$mt:wp:BlogInfo name="blogdescription"$> =>Just another WordPress site
- mt:wp:BlogURL(ファンクションタグ) * mt:wp:site_urlはmt:wp:BlogURLのエイリアス
ブログのURLを表示します。
- mt:wp:EntriesCount(ファンクションタグ) * mt:wp:count_postsはmt:wp:EntriesCountのエイリアス
ブログに属する投稿数を表示します。
category : 対象とする投稿が属するカテゴリ名。 category_id :対象とする投稿が属するカテゴリID。 tag :対象とする投稿につけられたタグ名。 status : ステータスを指定します。'*'を指定するとすべてを対象にします。 'publish' がデフォルト値です。 type : 投稿の種類(type)を指定します。'*'を指定するとすべてを対象にします。 'post' がデフォルト値です。
- mt:wp:EntryTitle(ファンクションタグ) * mt:wp:the_titleはmt:wp:EntryTitleのエイリアス
現在の投稿のタイトルを表示します。
- mt:wp:EntryBody(ファンクションタグ) * mt:wp:the_content, mt:wp:EntryContentはmt:wp:EntryBodyのエイリアス
現在の投稿の本文を表示します。
- mt:wp:EntryExcerpt(ファンクションタグ) * mt:wp:the_excerptはmt:wp:EntryExcerptのエイリアス
現在の投稿の概要を表示します。
- mt:wp:EntryGUID(ファンクションタグ) * mt:wp:the_guidはmt:wp:EntryGUIDのエイリアス
現在の投稿のguidを表示します。
- mt:wp:EntryAuthorDisplayName(ファンクションタグ)
現在の投稿の投稿者名を表示します。
- mt:wp:EntryAuthor(ファンクションタグ) * mt:wp:the_authorはmt:wp:EntryAuthorのエイリアス
現在の投稿の投稿者IDを表示します。
- mt:wp:EntryDate(ファンクションタグ) * mt:wp:the_dateはmt:wp:EntryDateのエイリアス
現在の投稿の投稿日を表示します。日付に関するモディファイアが指定できます。
- mt:wp:EntryPermalink(ファンクションタグ) * mt:wp:the_permalinkはmt:wp:EntryPermalinkのエイリアス
現在の投稿パーマリンクを表示します。テンプレートの例:
<$mt:wp:EntryPermalink$> => http://www.example.com/p=1
- mt:wp:EntryMeta(ファンクションタグ) * mt:wp:post_metaはmt:wp:EntryMetaのエイリアス
keyモディファイアを指定して現在の投稿のカスタムフィールドの値を表示します。
- mt:wp:CategoryLabel(ファンクションタグ) * mt:wp:cat_nameはmt:wp:CategoryLabelのエイリアス
カテゴリのコンテキスト内でカテゴリ名を表示します。
- mt:wp:CategorySlug(ファンクションタグ)
カテゴリのコンテキスト内でカテゴリの'slug'を表示します。
- mt:wp:CategoryCount(ファンクションタグ)
カテゴリのに属する投稿の数を表示します。
- mt:wp:TagName(ファンクションタグ) * mt:wp:tag_nameはmt:wp:TagNameのエイリアス
タグのコンテキスト内でタグ名を表示します。
- mt:wp:TagSlug(ファンクションタグ)
タグのコンテキスト内でタグの'slug'を表示します。
- mt:wp:TagCount(ファンクションタグ)
タグのコンテキスト内でタグが付けられた投稿の数を表示します。
- mt:wp:ArchiveLink(ファンクションタグ) * mt:wp:get_month_link はmt:wp:ArchiveLinkのエイリアス
mt:wp:ArchiveListブロックタグの中でアーカイブへのリンクを表示します。
<$mt:wp:ArchiveLink archive_type="Monthly"$> => http://www.example.com/?month=yyyymm
様々なデータベースへの接続とテンプレートエンジンのメリットを活かす
DynamicMTMLを利用すれば、このように複数のデータベースのデータをテンプレーエンジンを介して出力することができます。WordPressに限らず、他のCMSや既存のデータベースとMovable Typeを連携させるようなサイト構築にDynamicMTMLが活用いただけることがおわかりいただけたかと思います。
参考リンク
- カテゴリー
- DynamicMTML
- プラグイン
- 技術情報
コメントを投稿する