テーマ情報の変更 『wp2.71』


wordpress2.61の 「WordPress Default」 テーマをアレンジしてましたが、かなり修正して別物になってきたのでテーマ名を変更しようと思います。また、オリジナルテーマを作成する場合の基本部分にもなります。

themes01

「WordPress Default」 テーマは、「wp-content/themes/default」にありました。このディレクトリをコピーして「wp-content/themes/arrange」というディレクトリを作成します。この段階で新規のテーマとして認識し、「テーマの管理」画面では一覧に表示され選択できるようになっていますが、テーマ名や説明などは「WordPress Default」のままです。

【style.css】
/*
Theme Name: テーマの名前(※必須
Theme URI: テーマのホームサイトの URI
Description: テーマの概要
Author: 作者の名前
Author URI: 作者の URI
Template: 親テーマの定義(オプション)
Version: バージョン番号(オプション)
.
コメント/利用許諾の記述(あれば)
.
*/

「style.css」内でテーマの情報を記入します。項目内容は上記のようになっていますが、「Theme Name(テーマ名)」さえ記入されていればテーマとして認識してくれるようです。「テーマの管理」ではテーマのサンプル画像が表示されていますが、テーマディレクトリ内に「screenshot.png(gif,jpg.jpeg)」画像を置いとけば表示されます。

▼※以下はプログラム解析です。特に知らなくてもテーマの情報は変更できます。

【theme.php =>  function get_themes() 】

get_themes()関数でテーマの情報を取得できます。登録されている全てのテーマ情報を多次元配列で返します。詳しく解析の説明を書くと長くなるのでポイントだけまとめたいと思います。

①テーマディレクトリの判定は?

1. $theme_loc = $theme_root = get_theme_root();
2. $themes_dir = @ opendir($theme_root);
3. while ( ($theme_dir = readdir($themes_dir)) !== false ) {
4.    if ( is_dir($theme_root . '/' . $theme_dir) && ・・・・ ) { ・・・・ }
5. }


function get_theme_root() {
return apply_filters('theme_root', WP_CONTENT_DIR . "/themes");
}

各テーマのディレクトリを取得している部分のコード抜粋です。1.でテーマを管理しているディレクトリパスを求めています。「WP_CONTENT_DIR」は定数でデフォルトでは「wp-content」です。つまりパスは、「wp-content/themes」になります。
約束1: 「wp-content/themes」に各テーマはいれる!

2.で wp-content/themes のディレクトリハンドラを開いて3~5でループしながらディレクトリ内のディレクトリ、ファイルを取得しています。「is_dir関数」によりディレクトリだけを選んでいます。

②「style.css」のパスを取得する。

1. while ( ($theme_dir = readdir($themes_dir)) !== false ) {
2.     if ( is_dir($theme_root . '/' . $theme_dir) && ・・・・ ) {
3.             $stylish_dir = @ opendir($theme_root . '/' . $theme_dir);
4.             while ( ($theme_file = readdir($stylish_dir)) !== false ) {
5.                   if ( $theme_file == 'style.css' ) { $theme_files[] = ・・・・}
6.            }
7.     }
8. }

①の3~5の中身をみていきます。1.では「wp-content/themes」ディレクトリ内のディレクトリ・ファイル名を取得しながらループしています。そのうち 2.でディレクトリだけを選んでいます。「wp-content/themes」直下のディレクトリは各テーマをあらわしています。

例)「wp-content/themes/classic」 の 「classic」
「wp-content/themes/default」 の 「defaut」

3~6では、さらに各テーマ内のディレクトリ・ファイル名を取得しながらループしています。その中で、「style.css」があればそのパスを取得し配列に格納していきます。「style.css」からテーマ情報を取得する為です。

約束2: 各テーマには「style.css」が必ず必要!

③「style.css」からテーマ情報を取得する。

1. foreach ( (array) $theme_files as $theme_file ) {
2.        $theme_data = get_theme_data("$theme_root/$theme_file");
3.        $name              = $theme_data['Name'];
4.        $title                 = $theme_data['Title'];
5.        $description  = wptexturize($theme_data['Description']);
6.        $version          = $theme_data['Version'];
7.       $author            = $theme_data['Author'];
8.       $template       = $theme_data['Template'];
9.       $stylesheet    = dirname($theme_file);

10.       foreach ( array('png', 'gif', 'jpg', 'jpeg') as $ext ) {
11.               if (file_exists("$theme_root/$stylesheet/screenshot.$ext")) {
12.                       $screenshot = "screenshot.$ext";
13.                        break;
14.               }
15.        }
16. }

配列「$theme_files」には各テーマの「style.css」へのパスが格納されていました。ループしながら「style.css」内の情報を取得しています。2.の「get_theme_data」は「style.css」のファイルの中身を正規表現などを使いながら解析し、解析結果を配列で返します。この記事の最初の方で述べた次の箇所を解析しています。

/*
Theme Name: テーマの名前(※必須
Theme URI: テーマのホームサイトの URI

*/

10から14行目ではテーマのサンプル画像(サムネイル画像)を取得しています。ファイル名は「screenshot」固定であることがわかります。また拡張子は「'png', 'gif', 'jpg', 'jpeg'」限定されています。

約束3: テーマのサンプル画像(サムネイル画像)のファイル名は「scrennshot」!
拡張子は「png, gif, jpg, jpeg」のみ可能 !

今回はテーマの情報の取得と指定方法をみてきました。まだまだ「function get_themes」関数処理は続くのですが、とりあえずテーマ情報が取得できたので今回はここまでで終わりたいと思います。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です