Plugin Territory – WordPressのその処理はテーマでやるべきかプラグインでやるべきか?

WordBench串本(おれだけ)アドベントカレンダー18日目の記事です。

そろそろネタギレしてきて、その日のネタをその日にひっしこいてひねり出すという感じになりつつあります。

今日は、Plugin Territoryという話です。

その処理はプラグインでやるべきか?テーマでやるべきか?

WordPressの多くの処理は、その仕組み上プラグインでもテーマのfunctions.phpでも全く同じことができます。

たとえば記事の上部にアドセンスとかの広告を入れたい場合はこんな感じ。

add_filter( 'the_content', function( $content ){
    return '<div>広告コード</div>' . $content;
} );

これってテーマのfunctions.phpでも動くんですよね。

じゃあ、どっちでもいいのか?って話になるとそうではなくて、例えば公式ディレクトリにテーマを登録するときには、審査の段階でこの機能はPlugin Territoryだからテーマから外してくださいみたいなことを言われます。

上のスクショは実際のテーマレビューの時のやりとりで、ソーシャルボタンを消してくださいと指摘されています。

そんなわけで、公式ディレクトリ上のテーマにはガイドラインがあって、これは公式ディレクトリに登録しなくても考え方としては大事なので紹介します。

WordPress › Plugin Territory « Theme Review Team

(Dprecatedって出てるけど内容はあんま変わらないから気にしないで。笑)

ガイドラインで紹介されているプラグインテリトリーの例

Analytics scripts

Google Analytics等のアクセス解析用のコードは、テーマ側で入れるなと。

これはテーマが変わった時に、こういうコードが消えるのはまずいですよね?という趣旨ですね。

SEO options (meta tags, page title, post titles, robots.txt, etc.)

SEOのために、<meta />とかタイトル等をゴニョゴニョするような処理はテーマでやるなと。

これも、テーマが変わったときにそれらがぶっ飛んだらダメでしょ?っていう意味ですね。

Content Sharing buttons/links

ソーシャルボタン。

うーん、これはどうなんでしょうね。テーマのデザインに合わせたものを予め組み込んでほしいという要望はありそうなんですけどね。

ただ、どうせコードを書くなら再利用したいというのがあるので、僕はプラグインでやるかな。

WordPress › Simple Share « WordPress Plugins

Custom post-content shortcodes

ショートコードですね。

これはテーマでやってしまうとテーマが変わった時に修羅場になりますね。

それまで、なんらかのコンテンツが表示されてたとこが[oreore foo="bar"]みたいに生のショートコードが表示されるようになってしまいますし、ショートコードが使用されているとこを探すのがめんどくさい!

それにこれも再利用できるようにしたほうが幸せになりますよね。

Custom Post Types

カスタム投稿タイプはヤバイですね。リニューアルの時に超めんどくさいし、開発中のテストもめんどくさいし、テーマでこれをやるとろくなことにならないです。

「お知らせ」とかで毎回やるなら、それをプラグインにして公開しといたほうがよくない?

Custom Taxonomies

これも同じくですね。うきーってなります。

Removing or modifying non-presentational core hooks

これ、意味がよくわかんないんですけど、でもテーマであんまりフックをごにょごにょすると、何かあった時に検証が大変なので、フィルターフックやアクションフックに処理を追加する場合はプラグインのほうがメンテナンスはしやすいと思います。

ほれ、プラグインならそれだけを無効化すれば終わりますけど、テーマを無効化したら身も蓋もないというか。笑

Disabling the admin toolbar

アドミンバーの無効化。これはそうだ。おせっかい。笑

Resource compression/caching

キャッシュとかミニファイとか。

これは影響範囲が大きいですし、キャッシュ系のプラグインは、ほんと開発が難しいのでオレオレ実装なのは信用出来ないです。笑

これをテーマに実装してる時点で、ちょっと疑う感じですね。

その他

ファビコンとか、ウィジェットとか。

ウィジェットはデフォルトのものを削除する場合は、それの代替になるものを用意しろとなっていますね。

まとめ

以上ざくっとまとめると以下のような感じで判断していくべきだと思います。

  • 将来のリニューアルやテーマの変更でぶっとんだら困るようなものはプラグインで実装すること。
    • カスタム投稿タイプやカスタムタクソノミー
    • Google Analyticsのコード
    • ファビコンなど
  • 再利用を考慮する
    • Don’t repeat yourself!!
    • ソーシャルボタンとか。
  • メンテナンス性
    • キャシュ系の処理など高度な処理は、プラグイン側でやってPHPUnitなどのテストをきちんとやるべき。

僕はわりとプラグインに分けたいと考える方で、さらに公式ディレクトリに登録して自動アップデートを便利に使わせてもらってます。

プラグインなんて自分のために作って、ついでに誰かが使ってくれればラッキーって感じで公開すればオッケーだと思いますよ。

公開すればスキルも上がりますしね。