WordPress

WordPress アンチパターン

TABLEofCONTENTS

実案件やネット上で散見されるバッドプラクティス/バッドノウハウをまとめてみました。

全部入りカテゴリー All in One Category

ジャンル,地域 … などサイトに必要となる各種の分類すべてをカテゴリーとして扱う。

解説

カスタム分類(タクソノミー)に対する無理解が原因のバッドプラクティスです。下記左側のような分類で設計されてしまうと、カテゴリー一覧などの何でもない処理が非常に混沌としてきます。ジャンル,地域 をカテゴリーのタームではなく、下記右側のようにカスタム分類として定義すると色々とスッキリします。

Bad
  • カテゴリー
    • ジャンル
      • 和風
      • 洋風
      • 中華風
    • 地域
      • 北部
      • 中部
      • 南部
Good
  • カテゴリー
  • ジャンル
    • 和風
    • 洋風
    • 中華風
  • 地域
    • 北部
    • 中部
    • 南部

ベストプラクティス

  • カスタム分類(タクソノミー) を使う。
  • 参考

    EXEC-PHP最高 EXEC-PHP Awesome

    テンプレートファイル(以下テンプレート)に PHP を書くことに慣れてくると記事本文にも PHP を書きたくなってくるという必然の欲求をズバリ解決するプラグインをネット上で礼賛する。

    解説

    誰もが通る道なのでいたしかたないのですが、ネット上での礼賛は炎上必至です。当該のプラグインは長らく更新されておらず、炎上をきっかけに「入力フォームにコードを書ける = セキュリティリスク」ということが周知されたと思われるので、このアンチパターンを目にすることは無くなるでしょう。

    ベストプラクティス

    参考

    関数キライ Function Hater

    WordPress に用意されている便利な関数の数々を一切使わない。

    解説

    ビルトイン関数を使うのは負けだと思っているのか、単に関数の存在を知らないのか詳しい原因は不明ですが、中途半端に「PHP できますよ」というエンジニアによく見られます。以下はコーディングの例です。グローバル変数を多用するのも特徴です。

    // トップページ判定
    // is_home(), is_front_page() を使おう
    if ( $_SERVER['REQUEST_URI'] == '/' )
    
    // カスタム投稿タイプアーカイブ判定
    // is_post_type_archive( 'info' ) を使おう
    if ( $wp_query->is_archive && $wp_query->query_var['post_type'] == 'info' )
    
    // フォームのチェック状態を設定
    // checked() を使おう
    <input type="checkbox" name="cb1" value="val1">
    

    ベストプラクティス

    • 車輪を使う。

    オプション多過ぎ Options Hell

    テーマやプラグインで可能な限りの「設定」を用意する。

    解説

    GUI で簡単設定できて嬉しい反面、コードでの設定や設定のインポート/エクスポートが簡単にできない場合、毎度 GUI 操作による設定に時間を取られることになります。ユーザーのためにと何でもできるようにし過ぎるのが原因ですが、まずは本当にそれをユーザーが必要としているかを考えると良いでしょう。

    ベストプラクティス

    • 減らす。
    参考

    固定テンプレート Rage Template

    カスタムページテンプレート
    カスタムページテンプレートを指定

    デザイン・レイアウトが異なる固定ページに対して各々カスタムページテンプレートを作成し、編集画面からいちいちそのテンプレートを指定してめんどくさい固定ページ爆発しろとなる。

    解説

    固定ページの表示にはデフォルトで page.php などのテンプレートが使用されますが、個別にカスタムページテンプレートを指定することもできます。カスタムページテンプレートを作成するには、テンプレートの初めに下記のように PHP のコメントでテンプレート名を指定 します。

    
    

    このカスタムページテンプレートは、テンプレート内に書くべき HTML や PHP が他と異なり、かつ、ひな形として複数の固定ページに適用する場合に使います。それを「デザインが違う固定ページ毎に必要」と誤解しているのがこのバッドプラクティスの原因です。
    特定の1ページ専用のテンプレートを作るなら page-{ページスラッグ}.php, page-{ページID}.php といったファイル名にするだけで、編集画面から指定しなくても自動で適用されます。

    ベストプラクティス

    • 特定の1ページのみに適用するテンプレートは 特定ページテンプレート (適切な日本語訳求む)にする。
    • スタイルの変更だけで済むなら body_class() が出力する page-id-{ID} クラスを利用する。
      ID が扱いづらいなら body_class フィルタで page-{slug} クラスを追加すれば良い。
    参考

    プラグイン入れ過ぎ Tons of Plugins

    20個以上のプラグインをインストール・有効化してサイトを構築する。

    解説

    クライアントへの提案はプラグインでできることに限られ、プラグイン選定の時間が開発の大部分を占めます。過ぎたるは猶及ばざるが如し、レスポンスが著しく悪いサイトで有効化されていた各種キャッシュ系プラグインをすべてアンストールしたところ常識的なレスポンスに改善された、というネタのような実話もあります。なお、プラグイン依存度は下記のように分類されます。

    プラグイン数 呼称
    20〜 Junkie
    30〜 Mad
    40〜 Insane
    50〜 Psycho

    ベストプラクティス

    • 入れ過ぎない。

    まとめ

    固定テンプレートと言いたいだけのエントリですが、いかがでしたでしょうか。問題は多くの場合システムではなく使う側にあるのだと理解することが大事ですね。