PowerCMS ブログ

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プラグインを利用することで、テンプレート・タグは完全にロジックと分離され、見通しが良くなることがおわかりいただけるかと思います。

インストールと設定

  1. DynamicMTMLのインストール(インストールについてはこちらのドキュメントを参照)
  2. wp-config.cgiを設定します(mt/plugins/WordPress/wp-config.cgi)。記述方法についてはMovable Typeのmt-config.cgiと互換性があります。
  3. wp-prefix.phpを設定(データベースのprefixを指定します)。

*wp-prefix.phpの例

<?php
// DATABASE PREFIX
define( 'WP_PREFIX', 'wp_' );
?>

これでWordPressのコンテンツをMTMLで処理する準備が整いました。

Movable TypeのコンテンツとWordPressコンテンツを一つのページに表示する

簡単な例として、Alfie(DynamicMTMLのテンプレートエンジンの愛称)を利用したテスト方法をご紹介します。

  1. Movable TypeとWordPressをインストールします。Movable Typeではウェブサイトの直下にブログを1つ作成します(blog_idは2となります)。
  2. ドキュメントルート直下にalfieディレクトリを設置します。
  3. 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' );
    ?>
  4. _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
  5. /alfie/index.htmlを作成し、テンプレートを記述します。
    <h1><$mt:BlogName$></h1>
    <h1><$mt:wp:BlogName$></h1>
  6. ブラウザで/alfie/にアクセスします。

Movable TypeとWordPressのコンテンツをブラウザで表示

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プラグイン技術情報

ページの先頭へ