QUOIT Blog

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

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

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

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


まぁ想像はつくんですけどね。何がめんどくさいって、WordPressの独自関数。
なんかもう調べるのがめんどくさい。リファレンスの日本語化が中途半端だし。最初から英語で調べたほうがストレス少ないかも。

すいません、愚痴です。

以下、その方法。


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の中身
今回のキモですね。
WordPressの独自関数は、書いた時点で出力までするものが多いです。
モノによっては引数を与えると値を返してくれる関数もあるんですが、ぶっちゃけ統一感はありません。

ここでは最低限必要な関数だけ紹介します。

タイトルを取得する「 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");

テーマファイルを作ったことがある人なら何となく見たことがあるかもしれない。
余談だけど、phpのこのif文とwhile文の書き方って一般的ではない気がする。
わかんないけど、僕は普段こうは書かない。

これで、$contentsという配列にタイトルと本文の情報が入った。($idxが気に入らないけど)

そして、Smartyのテンプレート側。
これはSmarty使ったことがある人ならわかるだろうけど一応。

{foreach from=$contents item=val}

 

{$val.title}

{$val.content}

{/foreach}

こんなもんです。

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


以上です。

まぁそんなに難しいことはないですね。っていうかこんなことする人あんまりいないですよね

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

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

  1. wordpress smarty
    2011年8月23日 at 3:21 PM

    :razz: can you post english wordpress plugins use smarty.thank you.

  2. れい
    2016年3月11日 at 3:00 PM

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

  3. れい
    2016年3月11日 at 3:15 PM

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

    お騒がせしました。

  4. yakumo
    2016年3月11日 at 3:20 PM

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