WordPressのテーマにSmartyを使って出力させてみた

この記事は7年以上前の記事です。情報が古い場合がありますのでお気を付け下さい。

WordPressはテンプレート機能を備えているので、テーマファイルを作ることで、簡単に自分のテーマが作れます。

作れますけど、自分の他のスクリプトと合わせて使いたかったので、WordPress関数で値を取得して、出力はSmartyでやってみたというメモ。

手順は以下です。

1)新しいテーマを作成するのと同じように、「wp-content/themes/hoge/」というディレクトリを作る

2)index.phpとstyle.cssを設置する
→style.cssは作者情報を格納するので必須の模様

3)style.cssの中身
こんな感じで作者情報を入れておきます。

@charset "utf-8";
/*
Theme Name: Quoit
Theme URI: http://ken.quoit.jp/
Description: Smartyで出力テストテンプレート
Author: yakumo27
Version: 1.0
Tags: smarty
*/

4)index.phpの中身
最低限必要な関数は以下。

タイトルを取得する「 the_title() 」関数
テンプレートタグ/the title – WordPress Codex 日本語版

本文を取得する「 get_the_content() 」関数
Function Reference/get the content ? WordPress Codex

タイトルに関しては、the_title() 関数の第三引数に「false」を指定することで、値を返してくれます。
本文を出力するには the_contents() っていう関数がありますが、こちらは引数を変えても値を返してくれません。
なので、get_the_content() という関数を使います。こちらは逆に必ず値を返す関数なので、出力はしません。

今回はテーマファイルの書き方にならって、次のように書きました。
Smartyの設定関連は省略しています。

$smarty=new Smarty();
$contents=array();
$idx=0;
if(have_posts()) : while(have_posts()) : the_post() ;
  $contents[$idx]["title"]=the_title('','',false);
  $contents[$idx]["content"]=get_the_content();
  $idx++;
endwhile;
else:
  $contents[$idx]["error"]="表示する内容がありません。"
endif;

$smarty->assign("contents",$contents);
$smarty->display("./index.tpl");

テーマファイルを作ったことがある人なら何となく見たことがあるかもしれません。
これで、$contentsという配列にタイトルと本文の情報が入りました。
Smartyのテンプレート側は下記のようになります。

{foreach from=$contents item=val}
{$val.title}
{$val.content}
{/foreach}

5)Smartyのコンパイルディレクトリを設置
これはブログのルートディレクトリに配置します。
wp-adminとかwp-contentsと並んでコンパイルディレクトリを置くということです。
パーミションはよしなに。まぁ普通777なんじゃないでしょうか。

 

以上です。

何か質問があったらコメント欄かTwitterでください。

8年前
  1. すみません。1つ教えていただいてもよいでしょうか。
    SMARTYのテンプレートはどこに配置していますか?
    いつも、templates/ というティレクトリーを作っています。
    このDIRを、wordpress のテーマディレクトリの直下でよいでしょうか?
    直下においても、別DIRいして、define TEMPLATES でやってもテンプレート読み込めないというエラーがでました。
    よろしくお願いします。

  2. ごめんなさい。
    以下の1行読み間違えて、
    wp-adminとかwp-contentsと並んでコンパイルディレクトリを置くということです。
    テーマファイルと同じ場所かと思いました。

    お騒がせしました。

  3. 解決したようでよかったです。
    だいぶ前の記事だったので、どうだったかなーと試してるところでしたw
    何かの参考になれば幸いです。

コメントは停止中です。