WordPress で Web製作をしたいけど、PHP はまだちょっと … という人の PHP ガイド

Posted under - WordPress

45

WordPress はとっても便利なブログツール。使い方さえ勉強すれば、HTML や CSSの知識がなくてもWebサイトを作成、運営することができます。そして HTML + CSS を勉強すれば、デザインを自分の好きなように変更することもできます。でも見た目のデザインだけじゃなくて、いろんな機能をつけたりカスタマイズしていくとなると、やっぱり PHP の知識が必要です。WordPress をカスタマイズしたいけど、PHP はまだ ... という人向けに、WordPress と PHP について簡単にまとめてみました。

PHP and WordPress

WordPress は PHP(プログラム言語) + MySQL(データベース) で作られている、人気のブログエンジンです。最近ではブログじゃない一般的な Webサイトを、WordPress で作ってるっていう人も増えてきたように思います。WordPress を使えば、HTML + CSS が分からなくても、便利な機能やプラグインを使って Webサイトを作成 / 運営することができます。そして HTML + CSS はわかるけど、PHP は分からない … っていう人でも、スタイルシートを編集すればデザインを変更したりすることも可能ですよね!でもそれ以上のカスタマイズ … 例えば自分だけのテーマを作りたいとか … ということになると、やっぱり PHP の知識は必要になります。

そこで今回は、WordPress をもっと楽しむために、PHP の基本的なことをまとめてみました。なので初心者さん向けの内容になっています。

WordPress と PHP ガイド – 目次

  1. PHP のお話に入る前に、index.php を覗いてみよう!
  2. PHP ってどんなプログラム言語?
  3. PHP の記述のルール
  4. PHP の基礎 – 変数
  5. PHP の基本構文 その1
  6. WordPress でよく見る条件分岐
  1. PHP の基本構文 その2
  2. WordPress の index.php を読み解いてみよう!
  3. 関数ってなに?
  4. WordPress を使うなら PHP を覚えないといけないの?
  5. これから PHP を覚えよう!って人におすすめの本

1. PHP のお話に入る前に、index.php を覗いてみよう!

PHP の基礎のお話の前に、まずは WordPress のテーマファイルの中の、index.php というファイルをテキストエディタで開いて、コードを見てみることにしましょう。するとどんなテーマでも、index.php の中に以下のような記述を見つけることができるはずです。

index.php

<?php if ( have_posts() ) : ?>
    … 省略 ...
     <?php while ( have_posts() ) : the_post(); ?>
    … 省略 ...
     <?php endwhile; ?>
     … 省略 ...
<?php else : ?>
     … 省略 ...
<?php endif; ?>

このコードは WordPress のテーマには必ず書かれているコードで、WordPress ループなんて呼んだりしています。でも PHP が分からないと、このコードも読み解くことができません …。でもこのコードの意味自体はとっても簡単なので、PHPの基本をちょっと勉強すれば読み解けるようになると思います!

2. PHP ってどんなプログラム言語?

まずは PHP というプログラム言語の特徴から見ていきましょう。PHP は Javascript みたいにブラウザで動くプログラム言語ではなくて、サーバー側で動くプログラム言語です。ですからサーバーがないと学習することもできません …。PHP の学習環境は、XAMPP や MAMP を使えば簡単に構築することができますよね!すでに WordPress を利用している人なら、この環境は整っていると思います。

もしレンタルサーバーに WordPress をインストールしたけど、ローカル環境(自分のパソコンの中)に WordPress をインストールする方法が分からない … という人は、過去記事:これからWebサイトを制作をしたいけど、何から勉強したらいいの?っていう人のためのガイド で、PHPの学習環境について書いてあるので参考にしてもらえればと思います。

2.1. PHP は HTML を動的に作るのが主な目的の言語

PHP はサーバーサイドプログラム … ということは分かりましたが、他にも大きな特徴があります。それは PHP という名前に表れているように、HTML を動的に作るのが主な目的 … という特徴です。PHP は Hypertext Preprocessor の略。この Hypertext(HTML)を動的に作り出すのが主な目的なので PHP という名前が付いています。

でも HTML を動的に作り出す … といっても、初めての人には何のことかさっぱりですよね …。ここでひとつ簡単な例を見てみます!例えば Webサイトのフッターのコピーライトと一緒に、よく西暦が書かれていることがありますよね?

© 2012 Webデザインレシピ All Rights Reserved.

これを HTML でマークアップすると、以下のような感じになると思います。

HTML

  • <p><small>© 2012 Webデザインレシピ All Rights Reserved.</small></p>

でも来年になったら、2012 の部分を 2013 に書き換えなくてはいけません …。もちろん再来年には 2014 に …。そこで PHP を使って、この西暦を記述してみたいと思います。

PHP

  • <p><small>&copy; <?php echo date("Y"); ?> Webデザインレシピ All Rights Reserved.</small></p>

2012 の部分を、<?php echo date("Y"); ?> という風に、PHP のコードで置き換えてみました(書き方は後述しますね!)。PHP は、こんな風に HTML のタグと一緒に書くことができるんです!

date() というのは PHP の関数(これも後述しますね!)で、そのときの日付などを取得する関数です。今回は西暦なので、date("Y") – Y の部分は year の意味 – と記述します。こんな風に PHP で書くと、実際には以下のように HTML が作られます。

  • 2012年にアクセスすると … <p><small>&copy; 2012 Webデザインレシピ ...
  • 2013年にアクセスすると … <p><small>&copy; 2013 Webデザインレシピ ...
  • 2014年にアクセスすると … <p><small>&copy; 2014 Webデザインレシピ ...

こんな風に、サーバーにアクセスがある度に PHP が働いて、 HTML(この場合は 2012 という文字列)を書き出してくれます。今回は西暦を書くだけのものですけど、こんな風にプログラム(PHP)によって HTML(の一部)を書き出すことを、動的に HTML を作ると表現しています。それに対して、純粋な HTML だけで書かれた HTML を静的な HTML って呼んだりします。

西暦を表示するというシンプルなサンプルでしたが、もちろんもっと複雑な HTML を PHP によって生成して、最終的に Webサイトとして表示する … という使い方が、PHP というプログラムの特徴のひとつです!

3. PHP の記述のルール

これから PHP を使ったコードをいろいろ見ていきますが、そのまえに基本的な PHP のコードの記述のルールからご紹介します。

3.1. 開始タグ <?php と、終了タグ ?> の間に書く

PHP のコードを書くときには、必ず <?php と開始タグを記述して、最後に ?> という終了タグを記述します。さっき紹介したコードで確認してみると …。

  • <?php echo date("Y"); ?>

といった風に、開始タグと終了タグの間にコードを記述します。

3.2. 一行終わったらセミコロン(;

コードを一行書いたら、基本的に行の最後にセミコロン(;)を付けます。CSS でもそうですよね!例えば Javascript など、他のプログラム言語でもこれは同じですね!

  • <?php echo date("Y"); ?>

3.3. ファイルの拡張子は .php

拡張子は .php

さきほどちょっと紹介しましたが、PHP のコードは HTML のマークアップと混在して書くことができます。でもファイルを保存するときの拡張子は、.html ではなく .php とします。

WordPress のテンプレートファイルも、index.php とか single.php とか、拡張子は .php になっていますよね!

4. PHP の基礎 – 変数

それでは少しずつ、PHP の基本的なことを見ていきます。まず覚えたいのが変数というもの。ここでもうひとつ簡単な例を見てみます。Webサイトを作るとき、サイトの名前を決めますよね。今回は「PHP学習日記」というサイト名にすることにしました。そこで HTML の以下のような部分に、このPHP学習日記というサイト名をマークアップしました。

HTML

  • <head>
  • <title>PHP学習日記</title>
  • </head>
  • … 省略 …
  • <div id="header">
  • <h1>PHP学習日記</h1>
  • </div>
  • … 省略 …
  • <div id="footer">
  • <p>© PHP学習日記 All Rights Reserved.</p>
  • </div>

<head> 内の <title> タグの中、ヘッダー内の <h1>タグ、フッター内にも PHP学習日記という文字列をマークアップしました。

でも、途中で気が変わって、サイト名をPHP学習日記から、「PHPレシピ」という名前に変えたくなりました …。静的な HTML では、上記の3カ所を書き換えなくてはなりません。もしすでに 5ページ分マークアップしてあったなら、それらのページ全てのPHP学習日記という部分を、PHPレシピに書き換えなくてはなりません。これはちょっとめんどくさいですよね …。

ここで変数を使って、HTML を動的に作成するようにしてみましょう。変数というのは、データを入れておく箱のようなイメージです。この箱 – 変数に入れられるデータは、数字だったり文字列だったり、オブジェクト(後述します)だったり、いろんなデータを入れられるのですが、今回は「PHP学習日記」という文字列を入れることにします。

変数にデータを入れるには以下のように記述します。

<?php $sitename = "PHP学習日記"; ?>

いきなりそんなことを言われても … という声が聞こえてきそうですね!それでは変数について、ちょっと順番に見ていきましょう!

変数はデータを入れておく箱みたいなもの

変数

4.1. $ から始まる部分が変数

上記のコードをみると、まず $sitename という部分がありますよね。この部分が変数です。変数はデータを入れる箱と説明しましたが、ひとつひとつ任意の名前をつけなくてはなりません。ここでは sitename という名前を付けました。そして PHP の変数は、頭に $ を記述します!また、変数の命名ルールには、他にも以下のようなものがあります。

  • 変数名には数字とアルファベット、アンダーバー(_)が使えます。
  • ハイフンは使えないので注意!
    誤)$site-name、正)$site_name
  • $ マークの直後に数字は使えません。
    誤)$4th、正)$fourth
  • 大文字と小文字は区別されます。なので次の変数は、全部別のものになります。
    例)$sitemap$Sitemap$SiteMap

4.2. = はイコール(等号)ではなく、入れるという意味

変数に名前をつけたら、次にデータ(値)を変数にいれます。プログラムの世界では、これを代入って言ったりします。そして変数に値を代入するには、=(等号)を使います。= は、算数でいうとイコールという意味ですが、プログラムの世界では代入を意味します(イコールを表す記号は、他に用意されています!)。

= は代入という意味

また、上記では右辺を "PHP学習日記" というように、ダブルクォーテーション(シングルクォーテションでもOK)で囲んでいます。文字列を代入するときは、こんな風に囲まないとエラーになってしまうので注意が必要です。

さて、とにこかくこれで $sitename という変数の中に、「PHP学習日記」という値が入りました。この変数を使って、さきほどの HTML を書き直してみましょう。

PHPを使って書き換える
  • <?php $sitename = "PHP学習日記"; ?>
  • <head>
  • <title><?php echo $sitename; ?></title>
  • </head>
  • … 省略 …
  • <div id="header">
  • <h1><?php echo $sitename; ?></h1>
  • </div>
  • … 省略 …
  • <div id="footer">
  • <p>© <?php echo $sitename; ?> All Rights Reserved.</p>
  • </div>

PHP学習日記の部分を、全部 <?php echo $sitename; ?> という風に書き換えました。echo は文字列を出力する命令で、この場合は変数 $sitemame を出力します。変数 $sitename には、PHP学習日記 という文字列が入っていますから、実際には先ほどの HTML と全く同じものが出力されるという仕組みです!

そういえばサイト名を「PHP学習日記」から「PHPレシピ」に変更したいんでしたね!上記のコードの 1行目を下記のように書き換えてみましょう。

<?php $sitename = "PHPレシピ"; ?>

変数 $sitename に代入されていた値 – PHP学習日記 を、PHPレシピ に変更しました。こうすると当然 <title> タグの中や <h1> タグの中、フッターの <p> タグの中に記述されている変数 $sitename の部分は、いっぺんに PHPレシピ に変更することができますね!

変数というのは、データを入れておく入れ物 … 箱のようなものですが、このように値をいつでも変更することができます。また変数というように「数」という漢字がついていますが、必ずしも数を入れるものではなくて、このように文字列を代入することもできる便利なものです!

MEMO

変数に代入できるデータにはいろんな種類があります。例えば数字の場合は、数値として代入する場合と、文字列として代入する場合があったりします。

  • $int = 2012;
  • $year = "2012";

上は数値としての 2012 を代入した場合と、文字列として 2012 を代入している場合です(ダブルクォーテションで囲んでる方が文字列)。数値の場合は、計算に使ったりします。このように数値、文字列などの「どんな種類のデータなのか」をデータ型と呼んでいます。データ型には数値、文字列、真偽値、オブジェクトなどがあります。

5. PHP の基本構文 その1

PHP はプログラム言語です。そしてプログラムには処理を実行していくための流れがあります。いきなり処理とか流れって言われても、ちょっとピンとこないかもしれません …。そこでプログラムの中で使われる、基本構文をチェックしてみましょう。

5.1. もし … だったら … をする – if文

プログラムには流れがあるといいました。その流れを作るために、「もし … だったら … をする」としたい場合があります。WordPress で例えると、「もしトップページが表示されていたら、… をする」とか、「もし個別記事ページが表示されていたら、… をする」といった感じをイメージすると、初めても人でもイメージが湧くと思います。

この「もし … だったら … をする」という流れを作るのには、if 文という基本構文を使います。if は「もし … 」という意味の言葉ですよね。if 文は以下のように記述します。

if文

PHP
<?php
if(条件a){
     // 条件aに当てはまったら、ここの処理 A をする
}
?>

まずは if() の中に、条件を記述します。条件の書き方は後述するので、まずは全体の流れをチェックしましょう。if() の後には、ブレース({})で囲んで具体的な処理を記述します。ことばで表現すると、「もし条件 a に当てはまったら、処理 A をする」ということになりますね!プログラムって聞くとどっちかっていうと理数系?っていうイメージを持ってる人もいるかもしれませんが、こんな風にことばで考えると、論理的な流れを作ったりするので、文系っぽいですね!

条件に当てはまらなかった場合を追加する

さっきの if 文は、「もし … だったら … をする」というものでした。なので条件に当てはまらない場合は何もしません。場合によっては、条件に当てはまらなかったときに別の処理をしたい場合があります。そんなときは else と書いて、条件に当てはまらない場合の処理を書き加えることができます。

条件に当てはまらない場合 - else

PHP
<?php
if(条件){
     // ここに条件に当てはまったときの処理
} else {
     // ここに条件に当てはまらなかったときの処理
}
?>

条件を追加する

さっきは条件に当てはまらなかったときの処理を書き加えました。if 文では、さらに条件と処理を書き加えることもできます!なので細かく条件分岐のながれを作ることもできますね!

条件を追加する場合は、elseif と記述して、その後に処理を書きます。

さらに条件を加える elseif

PHP
<?php
if(条件 a){
     // ここに条件aに当てはまったときの処理
} elseif(条件 b){
     // ここに条件 b に当てはまったときの処理
} else {
     // ここに条件に当てはまらなかったときの処理
}
?>
流れは基本的に上から下へ

さっきプログラムの実行には流れがありますって書きました。まず大きな流れとして、プログラムは基本的には上から下へ向かって流れていきます。さっきの if 文の場合は、条件 a から順番に見ていって、条件 a に当てはまらなかったら条件 b へ、そしてどっちにも当てはまらなかったら else の中の処理をします。

仮に条件 a にも b にも両方当てはまる場合があったとしても、条件 a のときの処理をするので、条件 b の処理は実行されません。

プログラムは上から下へ

5.2. 条件はどうやって書くの? – 比較演算子 と true/false

さて、プログラムの流れを作るために、if 文を紹介しました。でも if 文には条件を書かなくてはいけません。今度はその条件の書き方について見ていくことにします。そして条件を書くために利用される記号があって、いろんな意味を持っています。まずはこの記号をチェックしておきましょう。

記号という言い方をしましたが、正確には演算子(えんざんし)といいます。そして、たとえば A と B を比べたりするときに使う演算子を、比較演算子といいます。

比較演算子の種類
A == B
A と B は等しい
A <= B
A は B 以下
A >= B
A は B 以上
A < B
A は B 未満
A > B
A は B より大きい
A != B
A と B は等しくない

注意するのは、変数のところでも紹介した、イコールのときの演算子です。== というように、等号をふたつ続けて書くと、等しいという意味になります。あとは算数で習った記号と同じような感じですね!

ではどうやってこれらを使うのか、実際にひとつ if 文を書いてみましょう!

PHP
<?php
$int = 8;

if($int <= 10){
     echo "変数の値は10以下です。";
} else {
     echo "変数の値は10以下ではありません。";
}
?>

まず $int という変数には、数値の「8」が入っています。そして if 文の条件には、($int <= 10) と書いてあります。$int には「8」が代入されていますから、実際には (8 <= 10) という条件になります。8 は 10 以下なので、これは正しいですよね。つまり条件に当てはまることになります。なので echo "変数の値は10以下です。" の部分が実行されることになるんですねー。

ここでひとつ補足しなくてはなりません。 さっき (8 <= 10) は正しいと書きました。もし変数 $int の値が「8」ではなく、「12」だった場合を考えてみましょう。その場合、条件に入るのは (12 <= 10) となってしまいますよね。12 は 10 以下ではありませんから、これは正しくありません。この正しい、正しくないを、プログラムの世界では truefalse という言い方をします。ちょっとプログラマー的に言うと、「true を返す」とか、「false を返す」と言ったりします。

  • (8 <= 10) ... これは正しいので、true
  • (12 <= 10) ... これは間違ってるので、false
MEMO

返すって言い方が難しいかもしれませんが、こんな風に考えてみてください。あなたは条件を記述して、PHP に対して質問をします。この条件に当てはまりますか?みたいに。そしたら PHP が判断をして、合ってる場合は true と返事をしてくれます。間違っていたら false と返事をしてくれます。この返事 .. が返ってくるという意味で、(PHP が )true を返す、false を返すというイメージです。

なのでさっきの基本構文を下記のように書き直しましょう!

if文

別に無理に true とか false とか言わなくてもいいんじゃぁ … と思う人もいるかもしれませんが、この truefalse という考え方は、プログラムの世界ではとってもポピュラーな考え方なんです。なのであえてここでも truefalse を使ってみました!

5.3. 比較演算子で比較できるのは、数値ばかりではありません

さっきの if 文には、数値を比較する条件を記述しました。でも比較演算子で比較できるのは数値だけではありません。文字列だって比較することができます。

PHP
<?php
$str = "PHP入門";

if($str != "PHP入門"){
     echo "変数の値は、「PHP入門」ではありません。"
} else {
     echo "変数の値は、「PHP入門」です!"
}
?>

上記では、!= を使って、等しくない場合は true を返す条件にしてみました。もちろん実行されるのは、"変数の値は、「PHP入門」です!" の部分です。こんな風にして、左辺と右辺が同じ文字列かどうかを比較したりすることもできます。

5.4. 真偽値で条件分岐する

今まで数値と文字列を使って、if 文の条件を記述してきました。そして truefalse についても、簡単に触れました。ここでひとつ新しいことばを紹介します。それは真偽値という言葉です。少し難しそうなイメージの言葉ですが、真は true、偽は false のことです。変数には、数値や文字列だけでなく、truefalse(真偽値)を代入することもできるんです。

$boolean = false;

上記の変数 $boolean には、false が代入されています。初めての人には、ちょっと意味が分からないかもしれませんが、今はまだ分からなくても OK です。とにかく変数 $boolean には、false が入っていると思ってください。そしてこの真偽値だけで条件分岐とすることができるんです。

PHP
<?php
if($boolean){
     echo "変数の値は true です。";
} else {
     echo "変数の値は false です。";
}
?>

今までとは違って、条件のなかには比較演算子が記述されていません …。これは一体どういうことでしょう?間違った書き方なんでしょうか?… いいえ、間違っているわけではないんです。今まで条件分岐を、「条件が当てはまったら」という書き方をしていましたが、「条件が true」だったら …」というように書き換えましたね!つまり if 文では、条件の内容はどんな風に書いても、truefalse で処理を変えていたんですね!

true か false で条件分岐

こんな風に考えれば、比較演算子が記述されていない条件分岐も納得ですね!

6. WordPress でよく見る条件分岐

さて、長々と if 文について見てきましたが、ここで WordPress で実際に使う条件分岐タグと照らし合わせながら見てくことにしましょう。WordPress には、もともと様々な条件を設定した条件分岐タグというものがたくさん用意されています。

本当にたくさんの条件分岐タグが用意されているのですが、代表的な条件分岐タグをひとつ使ってみることにします。

is_single() … 条件分岐タグのひとつ。 WordPress の個別記事ページの場合は true を返す

is_single() という条件分岐タグは、ブログなどの個別記事ページかどうかを判断するのに使います。個別記事ページだった場合は true を返してくれますから、比較演算子を記述する必要もなく、そのまま if 文の条件の中に書けば OK なんですね!

PHP - WordPress

<?php
if(is_single()){
     echo "<p>今表示されているのは、個別記事ページです!</p>"
} else {
     echo "<p>今表示されているのは、個別記事ページではありません。</p>"
}
?>

6.1. 実際にはどんな使い道があるの?

if 文と条件分岐タグの組み合わせは、自分で WordPress サイトのテーマを作ろうとすると、必ずと言っていいほど使います。上記の is_single() は、個別記事ページかどうかを判断するだけでしたが、たとえば is_category() という条件分岐タグは、カテゴリーページかどうかを判断することができます。さらに特定のカテゴリーページかどうかを判断することもできるので、カテゴリーごとに違うメッセージを表示したりすることもできますね!

PHP - WordPress
<?php
if(is_category("webdesign")){
     echo "<p>Webデザインのカテゴリーです!</p>";
} elseif(is_category("wordpress")) {
     echo "<p>WordPress のカテゴリーです!</p>";
}
?>

このブログ - Webデザインレシピも、こんな風にしてカテゴリーごとにメッセージを変更しています!

カテゴリー:「WordPress」のページ

カテゴリー:WordPress のページ

カテゴリーに合わせて、メインイメージ(タイポグラフィー)を変更したり ...

6.2. WordPress でよく使われている記述の仕方

PHP は、HTML と混ぜて書くことができると前半で書きました。その特徴を活かして、WordPress では if 文も上記のような記述をしないで、HTML を書きやすい記述法で書かれています。

PHP - WordPress
  • <?php if(is_category("webdesign")): ?>
  • <p>Webデザインのカテゴリーです!</p>
  • <?php elseif(is_category("wordpress")): ?>
  • <p >WordPress のカテゴリーです!</p>
  • <?php endif; ?>

if 文のブレース({ })の代わりに、コロン(:)を記述します。そして ?> と終了タグを記述します。一番最後には、<?php endif; ?>。こうすると、それぞれの処理の部分(黄色い部分)は、PHPのコードではなくて、HTMLのコードで書くことができます。これは WordPress でよく使われている書き方ですね!

それでは一番はじめに見た、以下の WordPress ループのコードを読み解いてみましょう!

index.php
<?php if ( have_posts() ) : ?>
	… 省略 ...
<?php while ( have_posts() ) : the_post(); ?>
	… 省略 ...
<?php endwhile; ?>
	… 省略 ...
<?php else : ?>
	… 省略 ...
<?php endif; ?>

途中 while … なんて部分がありますが、if 文の部分だけは読み解けると思います。

<?php if ( have_posts() ) : ?> … ここでは表示するべき記事があるかどうかを判断しています。該当する記事があったら true を返します。そして false だった場合は else の後の部分を実行します。そして最後は if 文の終わりを示す <?php endif; ?> が記述されている … という訳です。

WordPressの色んなテンプレートファイル(テーマファイル)を覗いてみると、いろんなところでこの if 文が利用されています。もちろん条件の部分やいろんな関数などが分からないと、プログラム全体を読み解くことはできませんが、プログラムには流れがあって、条件によって処理を変更している … ということは分かるようになると思います。

7. PHP の基本構文 その2

さっきの if 文は、条件によってプログラムの流れを変えるものでした。そしてプログラムの処理というのは、基本的に上から下へ流れて行くとも書きました。でも場合によっては、通りすぎるだけでなく同じ処理を繰り返したい場合もあります。

7.1. 繰り返し処理をする while 文

たとえばブログのトップページなどでは、「記事を表示する」という処理を、一回だけじゃなくて繰り返し行っています。

ブログのトップページ

ブログのトップページ

同じレイアウトで複数の記事を出力するのに、繰り返し処理を行っています。

処理を繰り返し行うためも構文にはいくつかあるんですけど、ここでは while 文という構文を見てみます。WordPress の index.php でも、この while 文が使われていますね!

while という言葉は、「~ する間」という意味の英単語ですね。while 文は、「条件が true の間、処理を繰り返す」という意味の構文になります。なので何回繰り返すのかは、条件によって変わるんです。

処理を繰り返す while文

while() の中に条件を書いて、ブレース({})の中に処理を記述します。また、while 文も if 文のときと同じように、ブレースを使わないで書くことができます。

  • <?php while(条件): ?>
  • … ここが繰り返したい処理 ...
  • <?php endwhile; ?>

WordPress でも、よくこの書き方が使われています!繰り返したい処理っていっても漠然としているので、さっきのブログのページを例えにして、どんな流れになるか見てみましょう。

ブログのトップページの場合

ブログのトップページの while

こんな風になっています。記事のタイトルを表示したり、画像を表示したりする処理を、記事の分だけ繰り返してるんですね!こんな風にして、同じ処理を繰り返して、ブログのトップページでは記事をいくつも表示させています。

8. WordPress の index.php を読み解いてみよう!

ここでもう一度、 WordPress の index.php をもう一度覗いてみましょう!

index.php
<?php if ( have_posts() ) : ?>
	… 省略 ...
<?php while ( have_posts() ) : the_post(); ?>
    … 省略 ...
<?php endwhile; ?>
	… 省略 ...
<?php else : ?>
	… 省略 ...
<?php endif; ?>

while 文の部分のセミコロン(:)の後に、the_post() という部分がありますが、 この部分を改行して考えてみてくださいね!

index.php

if 文と while 文のふたつが組み合わさっていますけど、整理してみれば大丈夫!まずは一番上の行 - if文で、記事が存在するかどうかをチェックします。 have_posts() という WordPress の関数は、表示すべき記事の有無をチェックしてくれます。そしてもし記事があったら、次の while 文を実行、もしなかったら、else の部分 2 <h2>記事はありませんでした</h2> を実行します。

while 文の部分 1 は、記事があったら、その間は繰り返し処理します。まずは the_post() という WordPress の関数を実行して、記事のタイトルや画像などを表示させます。the_post()という関数は、記事のデータをロードする関数です。そしてこの黄色い部分 1 が繰り返しの対象となる処理ですね!

どうでしょう?PHP が分からないときは、WordPress のテーマがどうやって動作しているのかなどは、分からなかったと思います。でも PHP を覚えていくと、少しずつでもその仕組みが分かってくると思います!

9. 関数ってなに?

さて、今までの文章の中、ところどころに関数っていう言葉がでてきました。この関数っていうのは一体なんなんでしょう?ちょっと乱暴な言い方をすると、関数は「こうしなさい!」っていう命令みたいなものです(一定の処理を実行して、結果を返すもの)。

例えば冒頭で紹介した date()関数は、日付に関する文字列(日付とか西暦とか曜日とか)を取得する命令です。そして PHP には、このような関数がたくさん用意されていて、この関数を使って PHP にいろいろな処理をさせていく訳です。

9.1. 関数は自分で作ることもできます!

そしてこの関数は、自分で作ることができるんですね!つまり自分だけの命令を作ることができるわけです。

例として、とても簡単な関数をひとつ作ってみることにします。でも、関数の作り方を紹介したいのではなくて、関数ってこんなもの!っていうことをイメージしてもらえればなーと思います!

PHP
<?php
function hello(){
     echo 'Hello World!';
}
?>

上記は、hello() という関数を作るコードです。実行すると「Hello World!」って表示されるだけの命令です。関数の作り方については詳しく触れませんが、こんな風にして自分で関数を作ります。

そしてこれを実行するときは、下記のように書きます。

<p><?php hello(); ?></p>

こうすれば、<p> タグ内に「Hello World!」って出力されるという単純な関数でした。

こんな風にして関数は自分で作れることは分かりました。そしてもちろん WordPress でもこの仕組みが使われていて、WordPress のシステムの中で、たくさんの関数が設定されています!

9.2. WordPress のテンプレートタグ

WordPress には、テンプレートタグと呼ばれているものがたくさんあります。例えばさっきの index.php の while 文の中で、タイトルや本文を表示するためにはどうしたらいいでしょう?これらを簡単にできるようにしてくれるのが、テンプレートタグなんです!

テンプレートタグの一例
the_title()
… 記事のタイトルを出力
the_permalink()
… 記事のリンクを出力
the_content()
… 記事の内容を出力

これらテンプレートタグを使って、さっきの index.php を書き直してみると …

index.php
<?php if ( have_posts() ) : ?>
	… 省略 ...
<?php while ( have_posts() ) : the_post(); ?>

	<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
	<?php the_content(); ?>

<?php endwhile; ?>
	… 省略 ...
<?php else : ?>
	… 省略 ...
<?php endif; ?>

こんな風になりました!見出し部分(<h2>)は、実際には下記のような HTML で出力されます。

<h2><a href="http://example.com/xxx/">記事のタイトル</a></h2>

the_content() の部分は、WordPress の投稿画面で書いた内容が出力されます!

こんな風に使える便利なテンプレートタグですが、これらもさっき紹介した「自分で作った関数」なんです!もちろんここでいう自分というのは、WordPress を開発してくれている人たちのこと。WordPress 開発チームの人たちが、WordPress 内で利用できる関数を作って、テンプレートタグと呼んでいるんですね(前半紹介した条件分岐タグも同様です)!

10. WordPress を使うなら PHP を覚えないといけないの?

ここまで PHP の基本的な部分のほんの一部を、WordPress を交えながら紹介してきました。でも WordPress を使うなら、PHP について知らなくてはいけないんでしょうか?もちろんそんなことはありません!WordPress は PHP や HTML、CSS を知らなくても Webサイトを構築できるようになっています。

でも、自分の思い通りの Webサイトを作成していきたい … ということになれば、PHP の知識は必要になると思います。もちろん PHP は分からなくても、用意されているテンプレートタグを利用すればある程度カスタマイズもできます。WordPress Codex にも、テンプレートタグ入門というページが用意されています!

なので必ずしも PHP を覚えないといけないっていうわけではありませんが、PHP を覚えると、テンプレートタグへの理解も深まること間違いなしですよね!結果、自分で思うようなWebサイトを作成できるようになったり、作業自体もスムーズになって、効率的に Web製作できるようになるのは間違いなしです!

10.1. PHPは知らなくても、知っておきたいこと

PHP はプログラムなので、やっぱり覚えるのは面倒 … って思うひともいるかもしれません。それに、PHP を覚えなくても、配布されているテーマやプラグインを利用すれば、いろんな機能を簡単に Webサイトに付けることもできますよね!

でも見てきた通り、WordPress は PHP で作られていて、もちろんテーマやプラグインも PHP で作られています。つまりテーマもプラグインも PHP でコーディングされたプログラムのひとつだということです。

プログラムには必ず作った人がいます。そしてテーマやプラグインは無償で配布されているものも多いです!私もプラグインやテーマをダウンロードして利用させてもらっています。これはとてもありがたいこと。

でも、中にはちょっと困ったプラグインやテーマがあることも事実 …。テーマやプラグインもプログラムの一部だと書きました。つまり悪意のあるコードを入れておくことも可能なんです。そしてこれは実際に一部のテーマやプラグインに起こっていることなんです。

Attention

インターネット上では、便利なプラグインや使い勝手の良さそうなテーマがたくさんあります。でもどんなコードが書かれているか分からない … というリスクがあるってことは知っておきましょう!

もちろん WordPress の公式ディレクトリのテーマやプラグインであれば安心です!

10.2. WordPress Codex もスラスラ読めるようになります!

WordPress Codex でも PHP のコードが紹介されてます

WordPress についてのドキュメントがまとまっている WordPress Codex。WordPress についての調べ物をするときには、誰もがお世話になってると思います。この WordPress Codex でも、解説などには PHP のコードが書かれています(画像は「テンプレートタグ/query posts」ページのもの)。

また、解説の文章などをちょっと覗いてみると ...

query_posts() 関数はメインの WordPress ループだけを変更するためのものです。新たなループを作るためのものではありません。メインループの他にループが必要な場合は、get_posts() を使ってください。メインループの他で query_posts() を使用すると、メインループが不正な状態になり期待する結果が得られません。query_posts() 関数はページのメインクエリを上書きし、置き換えます。他の目的で使用しないでください。

query_posts() 関数は新しい WP_Query オブジェクトを作成し、グローバル wp_query 変数に割り当てます。get_posts() 関数は、グローバルエリアをまったく上書きすることなく新しい WP_Query オブジェクトを作成します。
WordPress Codex

ちょっと意味不明な言葉が多くて分かり難いですね … X( でも、PHP を勉強したあとだったら、このような文章の意味も分かってくると思います!CODEX は WordPress のマニュアルみたいなものですから、ここに書いてあることをが分かるようになれば、WordPress でのサイト構築も、今よりもっと効率的にできるようになると思います!

11. これから PHP を覚えよう!って人におすすめの本

実は先日、ソフトバンククリエイティブ(株)さんから、PHP プログラミングの教科書という本をいただきました。著者は、このブログでも何度か紹介している PHPによるWebアプリケーションスーパーサンプル西沢直木さんです。

PHP プログラミングの教科書

PHPプログラミングの教科書

プログラミング初心者さんに向けた PHP の入門書。難しい言葉などは使われていないので、本当に PHP を初めて学習するにはもってこいの本だと思います。

PHP を勉強するために必要な環境(PHPを動かすにはサーバー環境が必要)を用意するところから、基本構文はもちろん、フォームの作成やデータベースとの連携まで、PHPを学習するなら押さえたいポイントをしっかり身につけることができると思います。

特にフォーム(お問い合わせフォームみたいなのを想像してみてください!)でデータを送信して、それを受け取って処理させる … など、初心者のころにつまずきそうなポイントもしっかりカバーしています。

また、前述したように、PHP を使う上で意識しておきたいセキュリティーに対しても、もちろん触れられています。少しだけ本の構成を紹介させてくださいね!

  1. CHAPTER1 学習の準備

    PHP を学習するときに知っておきたい考え方や、PHP でサンプルを作成するための環境を整えます。

  2. CHAPTER2 基本構文

    この記事でも紹介した if 文や while 文はもちろん、その他 PHP の基本構文をメインに、サンプルコードを見ながら学習できます!

  3. CHAPTER3 フォーム

    HTML の <form> で送信したデータを、PHP で受け取って処理をしていく … という流れを学習できます。GET送信や POST送信という仕組みを覚えると、PHP がもっと楽しくなると思います!

  4. CHAPTER4 データベース

    WordPress でも利用されている、データベースについてのパートです。データベースは本来 PHP ではないのですが、PHP と組み合わせて使うことが多いので、必須とも言える知識ですね!

  5. CHAPTER5 データベースプログラミング

    最後の CHAPTER では、今まで学習してきたことを利用して、実際にプログラミングをしていく仕上げ的な CHAPTER です。フォームから送信されたものをデータベースに記録したり、表示させたり … というものを作成します!もちろんこの仕組みは、WordPress も同様ですよね!その基本的な動作を学習することができます!

もちろん私も読みました。表紙のデザインも可愛らしくって、プログラミングの本だけれど、決して難しい本ではありません。でも PHP の基本構文はもちろん、フォームやデータベースとの連携もしっかり学べるので、入門書としてとってもオススメの一冊です!


また、本を送っていただいた、ソフトバンククリエイティブ株式会社 出版事業本部の M さま、並びに著者の西沢直木さまには大変お世話になりました。この場を借りて、お礼申し上げます!ありがとうございました!

Comments

Thank you for the comment.