WordPressの子テーマを作る

WordPress子テーマ

WordPress子テーマ

WordPressの子テーマとは

2020年4月、WordPressの子テーマを作りました。

WordPress(ワードプレス)とは、世界で最も人気が高いCMS(コンテンツ管理システム)でホームページやブログなどのWEBサイトを作成するソフトウェアです。

WordPressの動作

WordPress の動作

WordPressは、データベース(DB)に格納した投稿記事などのコンテンツをテーマと呼ぶデザインに従って画面を構成して表示するシステムです。

WordPress公式サイトで、いろいろなテーマ(twentyfifteenなど)を公開しています。テーマは、PHPやCSSなどで記述されておりテーマを入れ替えるだけでWEBサイトのデザインを簡単に変更できます。

WordPressテーマの配布

WordPressテーマの配布

WEBサイトのデザインを自分好みに少し改良したいとき、テーマのCSS定義やPHPプログラムを直接修正してもよいですが、もしテーマのアップデートがあった場合に自分の修正が上書きされてしまいます。
そのため、一般的には親テーマを継承した子テーマを作成して、デザインの変更は子テーマで行います。

WordPress親テーマの継承

WordPress親テーマの継承

子テーマでは、親テーマとの差分のみ記述します。テーマ内のファイルは基本的に、『親テーマ → 子テーマ』の順に読み込まれます。
すなわち、子テーマの定義は親テーマより優先されます。従って、スタイルシートstyle.cssの定義は、親テーマの記述に子テーマの記述が追加されます。

このように子テーマを作成すれば、親テーマとの差分が明確になるというメリットがあります。そして、親テーマがアップデートで変更された場合でも、自分が変更した子テーマは上書きされませんので、デザインの変更内容は残ります。

子テーマの作成方法

WordPress Codex 日本語版に子テーマの作り方などについて説明があります。

子テーマのフォルダー作成

WordPressのテーマは、「/wp-content/themes」の下にテーマのフォルダーを作成して格納しています。例えば、テーマtwentyfifteenは「/wp-content/themestwentyfifteen」に格納しています。

WordPressテーマのフォルダー

WordPressテーマのフォルダー

親テーマの子テーマを作成する場合は、同じ階層に「親テーマ名-child」という子テーマ用のフォルダーを作成します。フォルダー名の命名規則はありませんが、このようにするとわかりやすいです。例えば、テーマhpb20の子テーマを作る場合は、hpb20-childとします。

そして、子テーマフォルダーに次のファイルを作成します。

ファイル名 区分 用途
style.css 必須 スタイルシート
functions.php 必須 テーマのための関数
screenshot.png 任意 テーマのサムネイル画像

スタイルシート style.css

子テーマのスタイルシート(style.css)を作成します。


@charset "utf-8";
/*
 Theme Name:  hpb20-child
 Template:    hpb20
 Description: ある計算機屋さんの子テーマ
 Author:      YUKI
 Version:     1.0
*/

1行目の@charsetは、スタイルシートの文字エンコーディングです。
2行目から8行目のコメントの中に、キーワードに続いて子テーマの情報を記述します。
その後に独自にカスタマイズする子テーマ用のスタイルを定義します。

キーワード 内容 区分
Theme Name: 子テーマの名前 必須 hpb20-child
Template: 親テーマのフォルダー名 必須 hpb20
Description: テーマの説明 任意 ○○の子テーマ
Author: テーマの説明 任意 YUKI
Version: バージョン 任意 1.0

テーマのための関数 functions.php

テーマのための関数(functions.php)で、親テーマと子テーマのスタイルシートをキューに入れます。


<?php
function my_enqueue_scripts() {
  $theme_uri = get_template_directory_uri();
  $style_uri = get_stylesheet_directory_uri();
  wp_enqueue_style(
        'parent-style', $theme_uri . '/style.css' 
  );
  wp_enqueue_style( 
        'child-style',  $style_uri . '/style.css', 
        array('parent-style')
  );
}

add_action( 'wp_enqueue_scripts', 'my_enqueue_scripts' );
?>

関数add_action()で、’wp_enqueue_scripts’にアクション関数を追加します。


関数wp_enqueue_style()は、スタイルシートをキューに追加して設定します。

 
wp_enqueue_style( $handle, $src, $deps, $ver, $media );

引数 区分 意味
$handle 必須 スタイルシートのハンドル名
$src 任意 スタイルシートのURL
$deps 任意 先に読み込むスタイルのハンドル配列
$ver 任意 スタイルシートのバージョン番号
$media 任意 スタイルシートが定義されているメディア

テーマのサムネイル画像 screenshot.png

テーマを選択するときの目印となるように、スクリーンショットを準備します。任意なので無くてもかまいません。

  •  サイズ【880×660 px】
  •  ファイル形式【.png】
  •  ファイル名 【screenshot.png】

子テーマを有効化

WordPressの管理画面から「外観」-「テーマ」を選択します。

WordPressテーマの選択

WordPressテーマの選択

先ほど作成した子テーマhpb-childが表示されますので選択します。

WordPressテーマの有効化

WordPressテーマの有効化

左側にスクリーンショット、右側にstyle.cssに記述した情報が表示されます。[有効化]のボタンを押して、新しいテーマを有効化します。

 

子テーマを試しにカスタマイズしてみます。スタイルシートstyle.cssを次のように修正します。


@charset "utf-8";
/*
 Theme Name:  hpb20-child
 Template:    hpb20
 Description: ある計算機屋さんの子テーマ
 Author:      YUKI
 Version:     1.0
*/
body { background: orange; }

ブラウザからサイトを更新してみてください。背景色がオレンジ色に変わります。

子テーマの確認

ページのソースを表示すると、親テーマのスタイルシートの後に子テーマのスタイルシートを適応しています。


<link rel='stylesheet' 
      id='parent-style-css'
      href='http://○○/wp-content/themes/hpb20/style.css?ver=5.4' 
      type='text/css' media='all' />
<link rel='stylesheet' 
      id='child-style-css'   
      href='http://○○/wp-content/themes/hpb20-child/style.css?ver=5.4' 
      type='text/css' media='all' />

スタイルシートstyle.cssなどを修正して、子テーマのデザインを変更できます。