Twenty Ten 1.1で子テーマに挑戦

WordPress3.0の新標準テーマtwentytenが1.0から1.1にバージョンアップしていた。大きく外観が変わったわけではないので、あくまでもマイナーチェンジの模様。WordPress.orgのフォーラムによれば、1.1で変更になったファイルは次のとおり。

attachment.php
functions.php
header.php
loop.php
style.css

WordPress3.0にバージョンアップする際、Twenty Tenを下敷きにしてテーマを書き換えたサイトがあるので、そういうサイトでは、1.1になってどこがどう変わったのかをきっちりと確認しておかなければならないだろう。

現在、仕事で管理しているサイトのうち、WordPressで構築したサイトには、すでにWordPress3.0の新機能を追加している。確認作業を必要とするサイトは、今のところ、2つか3つに過ぎないが、それでも今後、Twenty Tenを下敷きにしたテーマを使用したサイトの数が増えてくると、管理作業かなり面倒なことになる。そこで、こうしたサイトを、WordPress3.0から機能強化された子テーマ機能を利用して書き換えられないか検討してみた。

WordPressの子テーマの使用法

WordPressの子テーマの利用法については、WordPress日本語ローカルサイトに詳しいドキュメントが置かれている。例えばTwenty Tenの子テーマを作る手順は次のとおり。

  1. Twenty Tenと同じ階層(wp-content/themes内)に子テーマのフォルダ(ここではhoge)を作る。
  2. 子テーマフォルダにstyle.cssを作る。子テーマ用のstyle.cssのヘッダーに記述する必須項目はTheme NameとTemplateのふたつ。
  3. 親テーマのstyle.cssをインポートする。ここまでの子テーマのstyle.cssは次のとおり。
    /*
    Theme Name: hoge
    Template: twentyten
    */
    
    @import url('../twentyten/style.css');
    
    
  4. 上記の子テーマstyle.cssに親テーマのstyle.cssでオーバーライドしたい項目を追加する。例えば、サイトのタイトルのリンクの色を変更したい場合は、子テーマのstyle.css次のとおり。
    /*
    Theme Name: hoge
    Template: twentyten
    */
    
    @import url('../twentyten/style.css');
    
    .site-title a {
    	color: #ccc;
    }
    
    

スタイルシート以外のPHPファイルは、原則として、子テーマのファイルが親テーマのファイルをオーバーライドすることになっている。例えば、子テーマのファルダにheader.phpを置くと、子テーマのheader.phpが優先的に実行され、親テーマのheader.phpは実行されない。唯一の例外はfunction.phpで、このファイルは、子テーマのfunction.phpが優先的に実行された後、親テーマのfunction.phpが実行される。

DrupalのサブテーマとGeeklogのcustom.css

なお、子テーマそのものは、WordPress3.0から新たに追加された機能ではない。ただし、3.0から親テーマのindex.phpをオーバーライドできるようになり、機能が強化されているのだ。今年のWordCampでも、各地でTwenty Tenと子テーマを利用したテーマ作りが取り上げられていた。

私もテーマのいくつかを、Twenty Tenと子テーマの機能を使って書き換えてみようとしたのだが、結局、途中で断念してしまった。仕事で管理しているサイトなので、細かいことは書けないが、既存のサイトを子テーマで書き換えるにはいろいろと無理があった。もちろん、最初からTwenty Tenの子テーマとして、テーマを書くなら話は別だと思う。

WorddPressの子テーマは、概念的にはDrupalのサブテーマやGeeklogにおける標準テーマProffesionalCSSとcustom.cssの組み合わせに近いと思うが、こうした汎用CMSに比べると、WordPressの子テーマは、まだまだ発展途上の段階だという印象が強い。

けれども、今後、Twenty Tenがバージョンアップを重ねて、GeeklogのProffesionalCSSのようなテーマメーカーのような存在になるとしたら、WordPressのカスタマイズは劇的に易しくなることは間違いない。