WordPressのテーマにSmartyを使って出力させてみた
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でください。
“WordPressのテーマにSmartyを使って出力させてみた” に対して5件のコメントがあります。
コメントは受け付けていません。
:razz: can you post english wordpress plugins use smarty.thank you.
すみません。1つ教えていただいてもよいでしょうか。
SMARTYのテンプレートはどこに配置していますか?
いつも、templates/ というティレクトリーを作っています。
このDIRを、wordpress のテーマディレクトリの直下でよいでしょうか?
直下においても、別DIRいして、define TEMPLATES でやってもテンプレート読み込めないというエラーがでました。
よろしくお願いします。
ごめんなさい。
以下の1行読み間違えて、
wp-adminとかwp-contentsと並んでコンパイルディレクトリを置くということです。
テーマファイルと同じ場所かと思いました。
お騒がせしました。
解決したようでよかったです。
だいぶ前の記事だったので、どうだったかなーと試してるところでしたw
何かの参考になれば幸いです。