WordPressを使っていて「こんな機能がほしい!」と思って検索してよく出てくる記事として「プラグインを使用せずfunctions.phpに記述するだけで◯◯を実装!」というものがあります。
functions.phpを編集することによるリスクや、いざというときの対処法をしっかり理解して機能を追加できるのであれば大きな問題ではないのですが、自作プラグインにするほうがリスクも少なく管理ができます。
functions.phpとは?
そもそもfunctions.phpとはなんなのかというと、WordPressテーマで使用する関数を定義するためのファイルです。
このファイルに記述された関数は自動でサイト全体に読み込まれ機能させることができます。
functions.phpを編集するときの注意
functions.phpはサイト全体に読み込まれているため、エラーが発生するとサイト全体が真っ白になったりエラー画面が表示されるようになってしまいます。
そのため、functions.phpを直接編集するときは必ず手元にバックアップを取る必要があります。
親テーマのfunctions.phpは絶対に編集してはダメ!
自分専用で自作したテーマであれば勝手がわかっているので良いのですが、一般公開されている有料・無料のテーマの場合、functions.phpには複雑な関数が多く記述されており、直接編集することは絶対に避けましょう。
一般公開されているテーマをそのまま使用(親テーマ状態で使用)している場合、使用しているテーマが更新されたときに、functions.phpの中身も一緒に更新されてしまうため、せっかく追記した機能が消えてしまいます。
それを避けるために子テーマやfunctions.phpに機能を追加する用のプラグインを使うことが必須になります。
追加機能を自作プラグイン化
自作プラグインを作る方法
プラグイン名を決め、wp-content/plugins/
直下にプラグイン用のフォルダを配置します。
このとき、命名規則などは無いようなのでそのプラグインの機能に由来する名前をつけましょう。
ドメインディレクトリ └ wp-content └ plugins └ hoge(自作プラグインを入れるフォルダ) └ hoge.php(自作プラグインの機能を記述するファイル)
次に、自作プラグインの機能を記述するファイル(上記ではhoge.php)にfunctions.phpに追記する予定だったプログラムと標準プラグイン情報を追記します。
<?php
/*
Plugin Name: (プラグインの名前)
Plugin URI: (プラグインの説明と更新を示すページの URI)
Description: (プラグインの短い説明)
Version: (プラグインのバージョン番号。例: 1.0)
Author: (プラグイン作者の名前)
Author URI: (プラグイン作者の URI)
License: (ライセンス名の「スラッグ」 例: GPL2)
*/
// ここにコードを記述
冒頭の2~10行目が標準プラグイン情報となっています。
この中で必須なものは「Plugin Name」だけで、それ以外の部分はよくわからなければ削除してしまってもプラグインとして機能させることができます。
詳細なプラグイン作成方法はCodexを参考にしてください。
プラグインの作成 - WordPress Codex 日本語版
自作プラグイン化することのメリット
テーマを将来的に変更しても機能を維持できる
ショートコードを追加する機能だと、テーマを変更した直後ではただの文字となって機能しない状態になってしまいます。
通常であれば、変更後のテーマに合わせて子テーマを作成しfunctions.phpに記述するといった手順を踏む必要がありますが、予め自作プラグインとして有効にしておけばそのような面倒な手順を踏む必要がありません。
別のサイトを立ち上げるときの横展開が容易
制作会社などでWordPressを使って新規サイトを多く立ち上げるといった仕事をしている方だと、functions.phpの中身がいわゆる「秘伝のタレ」化していきがちです。(自分がそうでした)
「最近追加した機能を以前作ったサイトにも実装したい!」「これから制作するサイトを見越して汎用的な機能を作ろう」といった要件が発生したときに、自作プラグインとしてGit管理などを行っていれば、簡単に横展開&バージョン管理が可能になります。
エラーなどでサイトが表示されなくなったときの復旧作業が簡単
functions.phpを編集したことが原因のエラーはfunctions.php内の記述を修正し再アップする必要があります。
その際に、誤って既存で必要な機能部分を変更してしまうと復旧が難しくなってしまいます。
自作プラグインが原因によるエラーの場合は、該当プラグインのフォルダ名を変更するといった作業を行いプラグインを無効化するだけで復旧作業が完了します。
まとめ
「プラグインを自作する」というとものすごくハードルが高いように感じていましたが、実際にはコメントを数行追加するだけで簡単にプラグイン化することができました。
「プラグインが多いと読み込み速度に影響が出る」といった意見もありますが、個人的には、functions.phpに追記できるレベルのものであればそこまで読み込み速度に大きな影響はないのではと思っています。
更に言えばShifterを利用していればプラグインが動作することによる読み込みは執筆中の管理画面上でしか基本発生しないので、完全に無視できるリスクになります。
みなさんもよく使う機能をプラグイン化し、管理してみてはいかがでしょうか?