WordPressテーマを構成するファイルについて

半年ほど前、この「呟く茸の日記帳」を新しくするため、オープンソースのブログソフトウェアである「WordPress(以下、WP)」の自作テーマを作りなおしました。

その際に、WPテーマを構成するファイルについて調べて自分用にまとめたのですが、まわりの人にみせる機会が何度かあり、需要があるのかもしれないと思ったのでとりあえずここに置いておきます。

もっと詳しく書いてあるサイトなんかもあると思いますし、間違ってる箇所もあるかもしれないので、参考程度にどうぞ。

WPテーマについて

WPテーマとは、WordPressで制作されたサイトの見た目を変更したり、機能を追加することができるファイルの集合体である。

ファイルの場所

テーマは、デフォルトでは「wp-content/themes/」の中にあるサブディレクトリに存在している。たとえば、WPに「test-theme」というテーマをインストールしたとすると、そのテーマのファイルは「wp-content/themes/test-theme/」ディレクトリに存在する。

構成

WPテーマは次のようなファイルで構成される。

php
CSS
その他ファイル
ページテンプレート

固定ページなどを作成する際に、選択できるテンプレートを作成することができる。
テンプレートのファイル名は拡張子がphpであればなんでもよく(予め用途が決まっているものはNG)、たとえば「mypage.php」のような感じである。
作成するときには、ファイルの先頭に、

<?php
/*
Template Name: ここにテンプレートの名前を入れる
*/
?>

と書き込む必要がある。ここで「ここにテンプレートの名前を入れる」と書いてある部分は、当たり前だがこの通り入れる必要はなく自分の好きな名前を書き込む。

投稿タイプ

投稿タイプとは、投稿された記事や固定ページなどに付けられるタイプである。デフォルトでは、次のものが用意されている。

用意されている投稿タイプとは別に、自分で「カスタム投稿タイプ」を作ることが可能である。

モジュールテンプレート

モジュールテンプレートとは、複数ページで使用する共通のパーツを分けて管理するために使用されるものである。デフォルトで用意されているものも存在する(上に記載した通りである)が、自分で作ることもできる。

例えば、「hiratake.php」というファイル名でモジュールテンプレートを作成した場合、

<?php get_template_part('hiratake'); ?>

というコードで呼び出すことが出来る。

また、「hiratake-kinoko.php」というファイル名で作成した場合は、

<?php get_template_part('hiratake', 'kinoko'); ?>

というコードで呼び出すことが出来る。

テーマのヘッダ情報(CSS)

style.cssには次のようなヘッダ情報をつける必要がある。

/*
Theme Name: Hiratake Theme
Author: Hiratake
Description: これはテーマです
*/ 

記述できるものの一部について以下に記す。

テンプレートタグ

テンプレートタグとは、ブログのデータを動的に表示したり、カスタマイズしたりするときに使うPHPのタグである。

テンプレートタグの中には、

が存在するので、注意する必要がある。WordPressループについては後で述べる。

WordPressループ

WPには、「WordPressループ」と呼ばれるものが存在する。ループとは、繰り返し処理である。WordPressで作成した投稿などを繰り返し表示するための記述である。

テンプレートタグの中には、このループ内でしか使えないものが多数あるので、使うことができるようにしておかなければならない。

ループは次のような形がよく用いられる。

<?php
if ( have_posts() ) :
    while ( have_posts() ) : the_post();
        
        ここに繰り返し表示する内容

    endwhile;
else :

        ここに記事がなかった場合の表示を記述

endif;
?>

最初の if では、表示する投稿が存在するかをチェックしている。「have_posts()」は、表示するものが存在するかどうかをチェックする関数で、これを使用するとループが開始する。ループ内でループを発生させると永久ループが発生してしまうので注意が必要である。

「the_post()」は、ループ内で値をカウントアップする役割があるため、これを記述しないとループが終了しなくなってしまう。

記事一覧ページなどでは、ループは1ページに表示する記事の回数だけ行われる。個別記事ページなどでは、1度だけ実行される。

関数

WPには便利な関数が多数定義されている。これらを使うことでプラグインの開発をすることも可能である。

WPで関数を使用する際やプラグインを作成する際に用いられるものの中に「フィルターフック」と「アクションフック」がある。

フィルターフック

WPでは、データベースとブラウザの間にフィルターが存在している。投稿した記事は、WPフィルターを通った後にデータベースに保存され、データベースに保存されているデータはWPフィルターを通ってからブラウザへ出力される。

たとえば、データベースに保存されている記事本文には<p>タグは付いていないが、<p>タグを付けるフィルターを通ることで、ブラウザに表示されるデータには<p>タグがついているのである。

このように、WPのほとんどの入出力は必ず最低1つのフィルターを通過する。

フィルターフックとは、このフィルターを通過する際に、自分で作った関数やプラグインをWPに実行させることである。例えば、「the_content(本文)」の中の文字列を置換するみたいなことが出来る。

関数をフック(引っ掛ける)するには、「add_filter」という関数を用いる。

add_filter( 'the_contentなど', '実行したい関数名' );

フィルターを削除したい場合は「remove_filter」という関数を用いる。例えば、自動的に<p>タグを挿入するフィルターを削除するには、

<?php remove_filter ( 'the_content', 'wpautop' ); ?>

と書く。functions.phpに書いてしまえば、すべてのページで削除される。例えばsingle.php内に書けば、個別記事ページで削除される。

アクションフック

WPで発生する特定のイベントによって始動するものである。例えば、投稿を公開する、テーマを変更する、管理画面を表示する、header.phpを読み込む、といったときに発動するものである。

アクションフックも、フィルターフックと同様に削除が可能である。次の例はWPのバージョンが<head>内に出力されるのを削除したものである。

remove_action('wp_head','wp_generator');

編集履歴を保存する機能を無効にするときは、

remove_action('pre_post_update', 'wp_save_post_revision' );

と書く。

参考文献