現在はWordPressを使用してのWebサイト制作の需要が高く、小~中規模のコーポレートサイトをWordPressのオリジナルテーマでCMS化するといった案件が多くあります。
僕が得意なのはこの分野で、何十件ものサイトのWordPressオリジナルテーマを作ってきました。
その中で、やはりだいたいどのサイトでも使うコードというものが存在していて、これを毎回「あれ、どうすんだっけ…」と調べて書くのは非常に効率が悪いしめんどくさいです。
そんなときは、テンプレート内やfunctions.phpに全てのコードを書くのではなく、関数を作って関数ごとにphpファイルを作って管理することで、以降同じような処理を書くときにぐっと時間が短くなります。
今回は、僕が普段行っているファイルの管理方法を紹介します。
テーマの雛形を作る
プログラミングの時短のコツは、なんといっても「最低限必要なソースがあらかじめ用意されている」ということが基本になります。
bootstrapやLaravelなどのフレームワークと呼ばれるものも原理は同じです。ただ、これらは「人様が用意してくれたフレームワーク」なので、学習に時間がかかる、拡張しづらい、自由が利かないなどのデメリットがあります。
ただ、チームでの開発のときに、マニュアルが用意されているため自分以外の人が全く何を書いてあるかわからないといった状況にならないため、主に大規模な開発を行ったり、デザインの段階からフレームワークを用いることを前提としているのであれば非常に便利ですが、逆に小規模だけどデザイン性を重視していて、小回りが利いたほうがいいという状態のときは使いづらいです。
そこで、「人様が作ったフレームワーク」ではなく、「自分のために、自分で作る、自分のためのフレームワーク」を作っていこうぜというわけです。
拡張性に優れている雛形ができれば、サイトを作れば作るほどどんどん使い勝手がよくなっていきます。最初は数時間かかっていた作業も、雛形があれば数分で終わります。
WordPressテーマの雛形の例
ここで僕の雛形をざっと紹介します。
こんな感じ。
themeというフォルダ内にテーマファイルを保管していて、WordPressサイトを作るときはこのthemeフォルダごとコピペしてフォルダ名を変更、あとはstyle.cssの中のテーマ名を変更すればテーマの基本は完成。あっというまですね。
custumizerフォルダはテーマカスタマイザーという機能を使うのに必要なソース、
tplフォルダは、各ページ共通で読み込まれるテンプレート(ナビとか)
functionsフォルダはfunctions.phpに書くところの関数を、関数ごとにファイルにして分けてます。
なんでfunctions.phpを分ける必要があるの?
ひとえに、管理、拡張のしやすさが理由です。
例えば、title.phpとcategory_list.phpの中身を見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php /** * タイトル文字数制限 * * @param integer $limit 表示させる文字数。引数を指定しない場合は20 */ function show_limit_title($limit = 20) { global $post; $title = $post->post_title; if( mb_strlen( $title ) > $limit) { $title= mb_substr( $title , 0 , $limit ) ; $show_title = $title. ・・・ ; } else { $show_title = $title; } echo $show_title; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<?php /** * 一覧とか詳細にその記事のカテゴリーを表示させるやつ * * @param string $delimiter 区切り文字を指定できる。引数を指定しない場合は区切り文字なし。 */ function show_category( $delimiter = null ) { $cats = get_the_category(); $tmp = $cats; if( !$cats ) { return false; } foreach( $cats as $cat) { $cat_id = $cat->term_id; $cat_link = get_category_link( $cat_id ); // 出力部分 echo '<a href="' .$cat_link. '">' .$cat->name. '</a>'; if( $delimiter && next($tmp) ) { echo $delimiter; } } } |
各関数については以下の記事で紹介しています。
関数ごとにファイルを分け、それぞれの関数にドキュメントで説明を加えています。ドキュメントはWordPressの規約にのっとっているつもりですが、もしできてなかったらごめんなさい。
今のとこ紹介したのは2つですが、これが10個とか20個になったらfunctions.phpどうなると思いますか?どこに何が書いてあるか探すのも時間かかるし、拡張するのも大変になってきます。
関数ごとにファイルを分けてやることで、拡張したいときは各ファイルを触ればいいし、関数を追加したいときはファイルを追加すればいいだけです。シンプルでわかりやすいですね。
ちなみにこのブログ書いてて思ったんですが、関数の名前とファイル名を一緒にしたほうがもっとわかりやすいですよね。まだまだ修行が足りてませんでした
functions.phpの書き方
functions.phpの中身は非常にシンプル。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
<?php /** * Add Theme Supports * WordPressのテーマ拡張機能の有効化 */ // add_theme_support('menus'); // メニュー機能 // add_theme_support('post-thumbnails'); // サムネイル機能 /** * Include Functions * いろんな関数を個々に読み込む * いらないものはできればコメントアウトしておきたい * 使わないのに入れておくと邪魔なものは最初からコメントアウトしてある */ get_template_part('functions/editor'); // エディターに関するカスタマイズ // get_template_part('functions/menu'); //メニュー機能のカスタマイズ用 get_template_part('functions/mobile'); // スマホ分岐 get_template_part('functions/short_code'); // ショートコード集 // get_template_part('functions/widgets'); // ウィジェットの設定 get_template_part('functions/category_list'); // カテゴリー表示させたりする get_template_part('functions/new'); // Newマーク get_template_part('functions/pagenation'); // ページネーション // get_template_part('functions/thumbnails'); // サムネイルのあれこれ get_template_part('functions/title'); // タイトルの文字数制限 get_template_part('functions/body_class'); // bodyのclassの表示 /** * Theme Customizer * テーマカスタマイザーを使うときに。 */ // get_template_part('customizer/customize'); // カスタマイザーの記述はここ // get_template_part('customizer/style'); // 色を変えたりするときのstyleの記述 // get_template_part('customizer/customizer-repeater/functions'); // repeaterのプラグイン // get_template_part('customizer/repeater'); // repeaterのカスタマイズ |
こんな感じで、各phpファイルをget_template_part();という関数を使って呼び出し、使わない関数はコメントアウトしているだけ。
get_template_part();については公式Codexをどうぞ。
おわり
今回は、WordPressテーマ開発の効率化のため、テーマの雛形作りとfunctions.phpの分け方について紹介しました。
雛形を作るときは苦労するんですが、慣れれば拡張もさくさくいけるようになるし、自分で自分のためになるツールを育てるというのはすごく楽しいです。
同じような作業を繰り返し行う場合は、その作業をいかに短縮するかというのは我々エンジニアの重要なテーマです。
それでは、良いエンジニアライフを。
いちばんやさしいWordPressの教本第3版 人気講師が教える本格Webサイトの作り方 (「いちばんやさしい教本」)