【第3回】テーマで重要なfunctions.php【WPテーマ作成】

WordPressテーマ作成

本シリーズは、WordPressのテーマ作成を勉強し、まとめたものである。

前回は座学パートで、表示の際に使われるテンプレートファイル関係を解説した。

特に、テンプレート階層の考え方は必要不可欠で、理解していないと何をどこに書けばいいかが分からなくなってしまう

しっかり理解してから次に進むようにしたい。

以下がその記事だ。

さて、今回からようやくファイルをいじり始める。

まず、テンプレート以外で重要なファイルであるfunctions.phpというものを紹介しよう。

具体的にこれを作り、幾つか実際に記述もしてみる。

これも前回同様、非常に重要な内容なので、しっかり身に付けていこう。

また、今回からPHPの知識も必要になる。

その書き方から解説しているとシリーズがあまりに長くなりすぎるため、そもそもPHPとは何ぞやという方は、先にそちらを勉強してから取り組んでいただきたい。

なお、本シリーズは以下の本を参考にしている。

[改訂版]WordPress 仕事の現場でサッと使える! デザイン教科書[WordPress 5.x対応版] Webデザイナー養成講座
Amazon.co.jp: [改訂版]WordPress 仕事の現場でサッと使える! デザイン教科書[WordPress 5.x対応版] Webデザイナー養成講座 eBook: 中島 真洋, ロクナナワークショップ: Kindleストア

他にも、公式ドキュメントなど参照する場合は随時リンクを貼っていこう。

スポンサーリンク

functions.phpとは

では、早速本題へ。

今回扱うfunctions.phpとは、主に処理を記述する専用のファイルだ。

特定の機能を有効にしたり、独自で使う関数を定義したり、ということをここに書いていく。

その他、そのテーマ専用のプラグインのような機能をここに書いて実装することも可能だ。

ファイル拡張子からも分かるかと思うが、PHPを使って記述をしていく。

ネットで調べてもらうと必須と紹介されているところもあるが、厳密には無くてもテーマとしては成り立つ

初回作成したファイルの中には含まれていなかったが、しっかりテーマとして認識されていたことを思い出そう。

…なのだが、これがないと不便どころの話ではない

というのも、WordPressの内部動作を見ると、このファイルがあったら、他のファイルよりも早いタイミングで読み込まれる

つまり、他と比べて書ける内容が変わってくる部分があるのだ。

幾つか重要な設定も可能なので必ず作るようにしたく、そういった意味では必須と言っていいだろう。

functions.phpの作成

何を書けるかの説明の前に、先にファイルだけ作ってしまおう。

前回も軽く触れたが、作る場所はテーマディレクトリの直下

初回に作ったindex.phpやstyle.cssと同じ階層に作るようにしよう。

ファイル作成はその時の方法で大丈夫だ。

パーミッションを644(rw- r-- r--)にするのも忘れずに。

中には、とりあえず以下のように記載しよう。

<?php

// PHPの閉じ括弧は入れない

最後の行は要らないが、その前の改行は最低一つ入れておいて欲しい

入れないとエラーであらゆるページが見れなくなる。

このコメントに書いた内容を軽く補足。

通常であればPHPは<?php?>の中に書くという決まりになっている。

ところが、今回のfunctions.phpは、中身全てがPHPで書かれたファイルになる。

その場合は、閉じ括弧の?>があってもなくてもPHPとしては問題なく動作する。

厳密には、ファイルの一番最後にこのPHP終了タグが来る場合、それを省略できる、という感じだ。

そして、閉じ括弧の後に改行を複数入れてしまうと誤動作の元になるのだ。

この詳細はすでに色々なところで解説されており、「PHP 閉じ括弧」で調べてもらえれば山ほど出てくる。

簡単に言ってしまうと、閉じ括弧を入れることで変なことになる可能性があるし、無くても動作するなら入れない方がいいよね、という感じだ。

そんな理由があり、本シリーズでは入れないようにしよう。

functions.phpに限らず、最後がPHPの終了タグであるものは全てそれを省略することにする。

このあたりは、WordPressに限らず一般的なPHPのお話だ。

なお、当然のことだが、その後にHTMLが続く場合には閉じ括弧が必要なので覚えておいて欲しい。

functions.phpに書く内容

さて、上でも少し書いたが、functions.phpには色々書くことが可能。

…なのだが、それを全て挙げていくのはちょっと無理があるので、今回はWordPressの機能を有効化する処理に焦点を当てよう。

デフォルトでは使えない機能

機能を有効化すると書いたが、どんな機能がここで設定できるのか。

それを確認してもらうために、一旦開発環境で記事を編集する画面を開いてみよう。

特に変更していなければ、初回に作った空のテーマを適用した状態のはずだ。

その右側のメニュー、パーマリンクやカテゴリー、タグなどの設定をするところで、普段使っているものが出てこないと思う。

そう、アイキャッチが設定できない。

実は、このアイキャッチが、有効化して初めて設定できるようになる項目の一つになる。

もちろん他にもページ背景のカスタムカスタムヘッダーなど色々あるが、それらは使う時に有効化するとして、今回はこのアイキャッチだけを有効化していこう。

有効化に使うadd_theme_support関数

WordPressの機能有効化には、add_theme_supportという関数を使う。

この関数の書き方は以下の通り。

add_theme_support(有効化する機能[, 情報])

一つ目の引数で、どんな機能を有効にするかを文字列で指定する。

二つ目の情報とは、有効化する機能によってそれをどの範囲で有効にするかや、有効化した際のデフォルト設定などを渡すことができる。

それぞれ、第一引数に渡した項目によって第二引数で渡せるものも変わってくるので、ここは使う時に解説する。

大括弧がついてるのは省略することも可能であることを表し、省略した場合は単にその機能が有効化されるだけだ。

アイキャッチ機能の有効化

では、実際にアイキャッチを有効化していく。

functions.phpを以下のように変更しよう。

<?php

// アイキャッチを有効化する
add_theme_support("post-thumbnails");

これを保存して、再度投稿画面を開いてメニューを確認してみよう。

先ほどは無かったアイキャッチの設定項目が新たに出てきているはずだ。

このように、アイキャッチを有効化する際には、第一引数にpost-thumbnailsという文字列を渡してあげる。

今回は第二引数を省略しているが、こうすると設定可能な全ての投稿タイプにアイキャッチを設定することが可能となる。

で、第二引数を渡す場合には、どの投稿タイプに対して有効化するか、という情報を配列として渡してあげることになる。

例えば、投稿ページのみにアイキャッチを設定できるようにするには…

add_theme_support("post-thumbnails", array("post"));

こんな感じで指定してあげればOKだ。

複数であれば、配列の中でそれらをコンマ区切りで繋げていけばいい。

参考までに、投稿ページ(post)と固定ページ(page)の二つでアイキャッチを有効化する場合は以下のような書き方になる。

add_theme_support("post-thumbnails", array("post", "page"));

ファイルの切り出し

さて、ここまででとりあえずfunctions.phpを作り、実際に一つ記述を追加してアイキャッチ機能を有効化した。

で、今後も必要な記述をどんどんここに追加していくことになる…のだが。

これも、一つのファイルだけで管理しようとすると相当な長さになることが予想できる。

そのため、先に記述の種類によってファイルを分けてしまおう。

今回は、今やったアイキャッチ有効化を含むWordPressの機能有効化とその際の初期設定を一つのファイルにまとめてみる。

ディレクトリは新しくlibというものを作り、その中に配置することに。

ファイル名は、WordPressの機能設定なのでsetting.phpにする。

ディレクトリ階層を出すと以下のような感じ、太字がディレクトリで通常文字がファイルだ。

  • テーマディレクトリ
    • functions.php
    • lib(新規作成)
      • setting.php(新規作成)

ディレクトリとファイルが作れたら、setting.phpに先ほどfunction.phpへ書いた内容をそのままコピペする

<?php

// アイキャッチを有効化する
add_theme_support("post-thumbnails");

現状でのsetting.phpはこれだけでOKだ。

次に、functions.phpでこれを読み込むよう手を加えていこう。

このとき、PHPで用意されているrequire_once関数を使用する。

require_once(ファイルパス)

これで、ファイルパスに指定されたファイルを、これまでに読み込んでいなければ一度だけ読み込んでくれる

ここにそのままファイルパスを…書く前に、さらにもうひと手間。

PHPでは、実行時に今そのファイルがあるディレクトリのパスを取得することができる。

取得…というより、特殊な定数(マジック定数)である__DIR__を使う。

この__DIR__とは、今それを実行しているファイルがあるディレクトリのパスが格納されている定数だ。

末尾にはスラッシュが入っていないので、そこだけ注意。

今回はfunctions.phpでこの__DIR__を使い、まずそのディレクトリを取得する。

つまり、それがそのままテーマディレクトリへのパスとして使える。

そこに、同じディレクトリにあるlibの中のsetting.phpへのパス、つまり/lib/setting.phpという文字列をくっつけてあげればいい。

PHPにおける文字列の連結は、ドットを使っていたことを思い出そう。

__DIR__ . "/lib/setting.php"

これで、読み込む対象のファイルパスを取得できる。

あとはrequire_once関数に渡せばいいので、最終的にfunctions.phpは以下のように修正することになる。

<?php

// WordPressの設定ファイルを読み込む
require_once(__DIR__ . "/lib/setting.php");

これで再度投稿画面を開き、先ほどと同じようにアイキャッチの設定項目が表示されればOKだ。

もしエラーが発生した場合は、どのファイルの何行目でエラーが出ているかを確認し、その付近の記述をチェックしよう。

ちなみに、知っている方は__DIR__の代わりにdirname(__FILE__)でも当然可能だ。

本シリーズでは__DIR__を使っていくが、何かの理由で後者の方が良ければそちらを使おう。

おわりに

今回は、functions.phpというファイルの説明を行った。

また、具体的な記述としてアイキャッチの設定を有効化し、さらにその設定部分を別ファイルへ切り出すことまでやってみた。

まだ他にもできることは山ほどあるが、それは今後進める中で紹介していこう。

さて、次回から実際に前回解説したテンプレートを使って表示の実装を始める。

一旦はファイルに直接中身を書いていき、それを後で修正するような形で進めることを考えている。

今回までの内容ももちろん使うので、しっかり復習をしておこう。

2021/3/4追記

次回の内容、記事を表示するsingle.phpを書き始めた。

この中で使っているWordPressループという考え方が重要で、今後もガンガン使うものになる。

また、今回のfunctions.phpも(間接的にだが)手を加えているので、どこで何をしているか、しっかり確認しながら進めていきたい

コメント

タイトルとURLをコピーしました