【PHP】関数について
ここでは、WordPressでPHPを使うことを前提として、関数とその使い方について説明します。
超ざっくり理解したい人はここ(https://wa3.i-3-i.info/word1905.html)を参照してください。
- 関数とは何か
- 関数の仕組み
- 関数の利点
- 関数の種類
- 関数を用いたコーディングのコツ
関数とは何か
関数とはいつでもコードを再現できるようにコードを部品としてまとめたものです。PHPを含めた、あらゆるプログラミング言語に搭載されています。そもそも「関数」という表現が誤解を生みやすいのですが、元の英語ではfunctionといい、普通に訳すと「機能」という意味になります。(昔から関数と言っているから皆そう呼んでいるだけで、今となってはほぼ誤訳だと思います)
関数の仕組み
関数は基本的に呼び出されて初めて動作します。呼び出す際の作法さえわかっていれば、関数の中身がどうなっているか知らずとも関数を実行することができます。関数を使う際に最低限覚える必要のある部品は以下になります。
- 関数名。呼び出す際に何の関数かを指定するのに必要です。
- 引数。呼び出す際に、関数が呼び出し元のコードの文脈に沿うようにふるまうために必要な、具体的な値をセットします。関数によっては必要ない場合もあります。
- 戻り値/返り値。呼び出し元に、関数の実行結果として返される具体的な値です。関数によってはない場合もありますが、その場合でも関数は動いています。
PHPの場合には、関数の中身を記述しているところにはfunction ~ みたいに書いてあります。また関数を呼び出しているところでは引数がなくても関数名の後ろに必ず「()」がついています。
上記の画像の例では返り値がありませんが、こういうケースもあります。その場合でも関数内でechoをしているので、関数を呼び出した箇所でechoの実行がされます。この関数に返り値を含める場合は、関数内でechoさせずに、echoする予定の文字列を返り値としてもいいと思います。その場合は呼び出し元でechoの記述をします。
関数の利点
- 繰り返し同じコードを使うことができる。複雑なコードを毎回書くのは大変なので、よく使うコードは関数にしてまとめてしまうことが多いです。個々の文脈で実行させる内容を微妙に変化させたい場合もありますが、この場合でも「引数」で文脈に沿った値をもらうことで、コードを関数化することができます。
- テストしやすい。想定通りの動きをするかどうかを関数単位でテストできるので、テストがしやすくなります。テストして問題なかったものを繰り返し使うので、その点でも安心できます。
- 関数の中身を詳細に知らない人でも実行できる。PHPの経験が浅く中の詳細なコードを追えない人でも、関数の名前、概要、入力値(引数)、出力値(返り値など)を知っていればコードを利用することができます。ゲームとかで、ゲームの仕組みを知らなくても、「Aボタン(入力値)を押したら、ジャンプ(出力値)する」ということを知っていれば、ゲームすることができるのと一緒です。ちなみに筆者はWordPress標準の関数の中身を見たことがありませんが、普通に業務で使っています。
関数の種類
BMBで業務するうえで、分けて考えたほうがいい関数を分類します。一般的な分類ではないのでご注意ください。
functions.phpに書いているお手製の関数
functions.phpにはBMBでの経験上よく使うコードが関数としてまとめられています。管理画面に影響するものもあります。[ IMG ]や[ URL ]といったショートコードや、is_mobile()なんかがあります。
重要なのはこういったコードはGoogleで検索してもヒットしないことです。社内の誰かが知っているので、ここの関数の使い方は社内の人に聞いてください。
WordPress標準の関数
WordPressはPHPで動いているので、そのカスタマイズに必要な関数はあらかじめWPに搭載されています。the_title()やget_posts()などは頻繁に使います。これらのWP標準の関数には命名規則がありだいたいの動きは名前から予想がつきます。get_~()はだいたい返り値に~を渡す関数ですし、the_~()はだいたい~をechoする関数です。また、こういった関数の詳細は公式(https://wpdocs.osdn.jp/)が提供していますし、技術ブログも豊富なのでGoogleでだいたいわかります。
プラグイン固有の関数
プラグインを導入し、使い方を見ると関数を使うよう指示がある場合があります。その関数の使い方はそのプラグインで検索すれば出てくると思います。
関数を用いたコーディングのコツ
echoやprint_r()でデバッグ出力する
「get_posts()の戻り値を公式HPで確認したけどよくわからない」みたいな、戻り値の構造がよくわからないときはよくあります。そういったときは「echo get_posts();」ととりあえず書いてみてどんなものが表示されるのかチェックして、戻り値に対して理解します。「Array」と表示されたら、それは配列型でechoできないので、代わりに「print_r(get_posts());」と書いて、配列を確認します。
戻り値と引数で値をリレーする
例えば「wp_get_attachment_image_src()」という関数を使って、サムネイル画像のURLを取得したいとします。しかしこの関数の引数には、何のサムネイル画像のURLなのかを指定するために、サムネイル画像のIDが必要です。ここで「IDわからん...詰んだ...」となってはいけません。ここから逆に「サムネイル画像のIDを取得するための関数」をGoogleで調べます。そうすると「get_post_thumbnail_id()」などの関数が見つかるはずです。しかしこの関数にも何の投稿のサムネイル画像のIDなのかを指定するために、投稿IDが引数に必要です。ここで「IDわからん...詰んだ...」となってはいけません。ここから逆に「投稿のIDを取得するための関数」をGoogleで調べます。そうすると「get_the_ID()」などの関数が見つかるはずです。
最終的には $image_url = wp_get_attachment_image_src(get_post_thumbnail_id(get_the_ID(),'midium')); のような形でほしかったURLを取得できます。
株式会社ビーエムビー
〒114-0031 東京都北区十条仲原1-4-8 商店街会館311 TEL&FAX:03-5948-5996
東京都北区のWEBやDTP(印刷物)のデザイン制作会社です。ホームページ制作やLP(ランディングページ)の作成、ECサイト(楽天ストアなど)の構築などのWEBデザイン、チラシ・ポスター・名刺・パンフレット・看板などの印刷物デザインに対応しています。お客様の業務形態や用途に合わせたwordpressによるCMSサイトをフルスクラッチにて構築することが可能です。お気軽にお問い合わせください。