WordPressカスタマイズに必要なphpの基本知識
WordPressをカスタマイズするにあたってphpの基本的な知識を知らずに適当にいじってしまうと画面が真っ白、もしくはシンタックスエラーなどを吐き出してしまう事が多いと思います。
そこで私が普段WordPressをカスタマイズする中で必要だと感じだphpの基本知識を紹介していこうと思います。
phpファイルの記述
WordPressのテンプレートとして使用するphpのファイルはphpとHTMLが混在したファイルになります。
HTMLを記述する際は特に宣言は必要ありませんが、phpのコードを記述する際にまずそこにphpのコードが入る範囲であることを「<?php」と書いて宣言する必要があります。
そしてphpのコードの記述が終わると「?>」と書いてphpのコード記述が終わったことを宣言します。
【<?php ?>でのソースの記述宣言】
<?php wp_head(); ?> <h1>HTMLはそのまま記述</h1> <?php //こちらにphpソースを記述していく ?> <p>ふたたびHTMLが入る</p>
phpファイルはHTMLから始まっても大丈夫です。
<head> <title>タイトル</title> </head> <body> <?php wp_head(); ?> <h1>HTMLはそのまま記述</h1> <?php //こちらにphpソースを記述していく ?> <p>ふたたびHTMLが入る</p> </body>
phpコードがメインのファイル
functions.phpなどphpコードがメインのファイルであれば 、 「?>」は必要ない(あっても問題ない)。
<?php //こちらにphpソースを記述していく //phpコードの後にHTMLが入らない場合は?>が無くても良い
複数あるphpの記述方法
if文で分岐を行う作業はWordPressをカスタマイズしていく中でなくてはならない作業です。そんなif文ですが、記述方法がいくつか存在します。
<?php $lang = 'jp'; if( $lang == 'jp' ) { echo '<p>こんにちは!</p>'; } else { echo '<p>Hello!</p>'; } ?>
上記の記述はphpでよく見かける一般的な形ですが、WordPressのテンプレート内では下記のような記述をよく見かけます。
<?php $lang = 'jp'; ?> <?php if( $lang == 'jp' ) : ?> <p>こんにちは!</p> <?php else : ?> <p>Hello!</p> <?php endif; ?>
上記の二つは記述方法は異なりますが、意味は同じです。同じ意味であるのになぜわざわざ記述方法が異なるのか慣れないと混乱してしまいそうですが、この二つは状況によって使い分けることが出来ればコーディングの効率があがります。
最初の<?php ?>でまるっと囲んだif文はphpのコードがメインの分岐に使用すれば、コードをすっきりとさせることができます。
逆に<?php ?>でところどころ囲んでいる後記のif文はHTMLとの絡みが多い時に活躍します。上記のサンプルでは「こんにちは!」の簡単な一行文ですが、実際テンプレートを作る際にはもっと長く複雑なHTMLタグが挿入される事が考えられますので、前記のif文で記述しようものならechoの記述が複雑化してしまいミスが発生しやすくなってしまいます。
慣れないうちは混乱してしまいますが、WordPressのテンプレートではHTMLと絡むことが多いのでまずは後記のやり方でやってみて、前記の方がすっきりする、やりやすいなどの感覚を掴んで徐々に使い分けていけばよいと思います。
下記はWordPressのループ処理です。処理01と02は同じです。
//ループ処理01 <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <?php the_content(); //コンテンツの書き出し ?> <?php endwhile; endif; ?> //ループ処理02 <?php if (have_posts()) { while (have_posts()) { the_post(); the_content(); //コンテンツの書き出し } } ?>
はじめの頃は同じファイルの中で記述方法がバラバラになるのが気持ち悪かったのですが、効率を考えると今ではそちらの方が自然になりました。
このやり方が必ずしも正解というわけではありませんが、あなた自身のやり方を確立する上での手助けになればと思います。