テーマの作り方③まででは、簡単なテーマの作成・基本的なページの構成・表示ページ毎にテンプレートを切り替える方法などを解説してきました。
【ワードプレス】テーマの作り方③:テンプレートファイルでページの種類ごとに表示を切り替える実際にテーマが育っていく実感も持てて、割と楽しくテーマ開発について学べたのではないかと思います。
今回は functions.php について解説します。このファイルは特にテーマの機能を開発するために重要になります。例えばウィジェットやショートコードを作成するのに functions.php を利用します。
また機能を開発するだけでなく、良く使用する処理を functions.php に関数として作成することで、テンプレートファイルからは関数を呼び出すだけでその処理を実現することができ、テーマ開発の効率を上げることも可能です。
ですので functions.php は必ずテーマに用意しておいた方が良いです。
このページではこの functions.php について解説します。
functions.php とは
基本的に functions.php はテーマに関する関数を定義する PHP ファイルです。関数だけでなく、フック処理などを記述することもあります。
例えばウィジェットやショートコードも、functions.php に関数と処理(フック処理など)を記述することで作成することが可能です。
この functions.php はワードプレスの起動中に自動的に読み込まれ、テーマ内の PHP ファイルから functions.php の中に定義された関数を参照することができるようになります。
名前が「functions.php」でないと、ワードプレス起動中には読み込まれませんので注意しましょう(自分でそのファイルを読み込む処理を記述すれば、名前が違っても読み込ませることも可能です)。
functions.php の実行
functions.php は前述の通りワードプレスの起動中に読み込まれ、実行されます。
この時、functions.php に記述されている「関数」は実行されません。関数は呼び出された時に初めて実行されます。ですが、読み込みは行われるので、これにより他の PHP ファイルから functions.php に定義された関数を呼び出すことができるようになります。
その一方で、関数以外の処理は、ワードプレスの起動中に読み込まれた際に実行されます。より具体的にはテーマのセットアップ時に実行されます。これはメインクエリを作成したりテーマのテンプレートファイルが実行されるよりも前の段階です。
ですので、functions.php に処理を記述しておくことで、ワードプレス起動中のより早い段階に処理を実行することが可能です。これを利用してよくやるのは funcions.php での「フックへの関数のフック」です。
functions.php で「フックへの関数のフック処理」を行なえば、functions.php 読み込み後〜テーマ起動(テンプレートファイル実行)までの間に仕込まれているフックを利用して、テーマが起動する前の処理に独自の処理を割り込ませることができます。
これによりワードプレス起動中の処理やメインクエリ作成処理などの動きも変更することが可能になりますので、より自由度の高いテーマ開発が可能になります。
フックに関しては下のページで解説していますので、よろしければこちらも読んでみていただけると幸いです。
ワードプレスのフックとは?使い方は?初心者向けに分かりやすく解説します!スポンサーリンク
functions.php の作成場所
functions.php は下記の場所に作成します。
ワードプレスインストールフォルダ/wp-content/themes/テーマ名/
テンプレートファイルの category.php や single.php 、sidebar.php などと同じフォルダに作成します。
これによりワードプレス起動時に、この functions.php が読み込まれ、実行されるようになります。
functions.php の作成例
では簡単な functions.php を作成してみましょう。
functions.php は PHP プログラムを記述するファイルですので、ファイルの先頭と最後には下記を記述します。
<?php
/* 〜略〜 */
?>
後はこの中に関数を定義したり、処理を記述するだけです。
例えば functions.php の中で下記のような myPrint 関数を定義し、
<?php
function myPrint(){
echo "function.php の関数";
}
?>
sidebar.php から下記のように myPrint 関数を呼び出すと、
<div id="sidebar" role="complementary">
<?php
myPrint();
?>
</div>
sidebar.php が実行される時に myPrint 関数が実行されて、下のようにサイドバーに文字列が表示されるようになります。
sidebar.php だけでなく他のテーマの PHP ファイルからも、functions.php に定義した関数は呼び出し可能です。
また下記のように functions.php を記述すれば、
<?php
function my_hook_the_title( $title ){
return "★" . $title . "★";
}
add_filter( 'the_title', 'my_hook_the_title' );
?>
the_title 関数実行時に表示するタイトルの前後に★マークを付けることが可能です。フックを利用した処理の割り込みですね。
my_hook_the_title 関数は関数が呼び出された時に実行されますが、add_filter の実行はワードプレス起動時に functions.php 読み込みと同時に実行されます。
ですので、ワードプレス起動中に the_title フィルターフックに my_hook_the_title 関数をフックされることになり、the_title フィルターフックにフックされた関数が実行される時に、一緒に my_hook_the_title 関数も実行されることになります。
まとめ
このページでは functions.php について解説しました。
関数を定義するだけでしたので、あまり面白みがなかったかもしれませんが、functions.php に関数やフック処理を記述することでウィジェットを表示したりウィジェットを自作したり、ショートコードを作成したりすることもできます。
次回のテーマの作り方⑤では実際にウィジェットの表示を行うための functions.php の作り方を解説しますので、是非こちらも読んでいただければと思います!
【ワードプレス】テーマの作り方⑤:ページにウィジェットを表示する