やまだもとやすのブログ

チャリ走社長@スパイシーソフト→山田元康→HTML5スタートアップ社長@Liberapp

ガチプログラマーがリファクタリンしたときに感じたWordpressでコーディングする際の注意点

最近、既存のWordpressを修正する機会がありました。デザインは崩れているし、ソースコードを触るのは辛い状態だったので、大幅にリライトしてリファクタリングしました。テーマを既存のテーマAffingerに切り替えて、機能を実装するために本当に必要な最小限のソースコードに書き換えた結果、メンテナンス対象のソースコード量は一桁どころから二桁ぐらい減らせた印象です。

いままでちゃんと技術的な品質の管理や指導をしていなかったと反省です。

せっかくいろいろいじったので、ガチプログラマーがリファクタリンしたときに感じた、Wordpressでコーディングする際の注意点をまとめてみました。

既存のテーマをベースにするなら既存のテーマの思想や機能を活かして必要最低限の実装をする。

フルスクラッチでWebサイトを制作する時のように、理想ベースでワイヤーフレーム、カンプを作って、開発・制作に入るならば、Wordpressのテンプレート階層などをしっかり理解して、必要十分にフルスクラッチでテーマを独自実装したほうがいいと思っています。

しかしながら本当に自分たちが作りたいWebサイトにそこまでのオリジナリティーが必要かどうかは立ち止まって考えたほうがいいです。既存のテーマを活かせば、多少独自機能をいれても数日でも終わってそこそこの見栄えになります。しかしながらフルスクラッチで書けば、しっかりやらないとデザインは残念になりますし、工数も数倍以上に膨れ上がる可能性があります。

また逆に、Stingerなどの既存のテーマを利用しているのに、既存のテーマの思想や機能を活かさずに開発や制作すると、思ったように動かすのに逆に既存のテーマの実装が足かせになって大変になります。既存のテーマを使うならば、既存のテーマの思想や機能を熟知して、どこまでカスタマイズできるかをしっかり把握すること。そのうえでそれを活かした自分たちのサイトの設計をすることが大事です。

子テーマを使う

これはやってあたりまえの話です。カスタム投稿タイプやタクソノミーなどを活用して独自機能を実装する場合は、どうしてもテーマのテンプレートファイル等のPHPファイルのカスタマイズが必要になります。

ここで絶対やってはいけないのが親テーマそのものの修正です。既存テーマは多機能なので当然コード量も多い。そこを直接様々な個所をいじるとメンテナンス対象のコード量が爆増します。また、既存テーマがアップデートされた際に、それを取り込むのが難しくなります。

子テーマを使えば、独自実装部分が明確にわかるし、また独自実装の範囲が狭くなるので、把握しなくてはいけないメンテナンス対象のコード量が劇的に減ります。

ExePHPは使わずにショートコードを使う。

これも常識の範囲の話で、とにかく ExePHPは絶対に使用しちゃダメ。プログラムを記載する部分は、ショートコードなどを使いCMSから書くコンテンツから必ず切り離して、プログラム部分はGitで管理できるようにしましょう。

テンププレートにロジックを記載しない

テンプレートには、可能な限り条件分岐などのロジックを記載しないのがベストです。例えば、新着フラグを表示したいようなケースで、下記のような記述をテンプレートに直接書くのはやめましょう。

template.php

<?php
    if (date('U', (date_i18n('U') - get_the_time('U'))) < 24 * 3600 ){
       echo '<span class="newlavel">New</span>';
    }
?>
<h2><?php the_title();?></h2>

こういった場合は、独自テンプレートタグを実装して、テンプレートは <?php the_xxx(); ?> のようなテンプレートタグを呼び出すコードを記載する。そして、functions.phpなどに独自テンプレートタグ関数を用意して、テンプレートからロジックを分離しましょう。

template.php

<?php the_new(24);?><h2><?php the_title();?></h2>

functions.php

function the_new($hour) {
    if (date('U', (date_i18n('U') - get_the_time('U'))) < 24 * 3600 ){
       echo '<span class="newlavel">New</span>';
    }
}

ショートコードの実装関数や独自テンプレートタグ関数にロジックとHTMLが混在させない

さっきの例は下記のようにするとむちゃくちゃメンテナンス性があがります。

functions.php

function the_new($hour) {
    if (date('U', (date_i18n('U') - get_the_time('U'))) < $hour * 3600 ){
       get_template_part('partials/new-labe.php');
    }
}

partials/new-label.php

<span class="newlavel">New</span>

ショートコードでも関数内にHTMLを直書きしないでget_template_partで外だししましょう。

空の固定ページ&テンプレートでHTML実装をやめる

例えばslugがhogeな空記事の固定ページを作成して、固定ページ用テンプレートpage-hoge.phpを用意して、すべてHTMLに直書きをするのは避けたいです。

絶対にダメなわけではありませんが、運用中に文章の変更などが、簡単にできなくなります。

こういう場合は、固定ページの記事に、エディターを使って静的な記述を行うこと。どうしても必要な動的な記述はショートコードに分離したほうがいいです。