WordPressのコアファイルを直接修正するような記事は良くないよ、add_filter使おうよ。
こんにちは、@9ensanです。
最近、WordPressを触っていて色々なサイトを参考にしているのですが、WordPressのコアファイルを直接修正しているような記事をたまに見かけます。
1つ見つけると、その記事と同じ修正方法の記事が、別のサイトでも見つかります。
コピペしているからだと思うのですがこれって、WordPressがバージョンアップしたらまた同じ修正しないといけなくなると思うのですが、他にいい方法ないかとか疑問にならないのかな???って思ってしまいます。
例えば、「wp-include/meta.php」にある「is_protected_meta」という関数を修正する場合、
元々は、
ですが、以下のように修正してね!
みたいな感じです。
これは、間違いでは無いですが、直接修正したら後々面倒なことになるのでやめましょう!
ということで、正しい修正方法の紹介です。
apply_filtersとadd_filter
まず、WordPressには、apply_filtersとadd_filterっていう便利な関数が容易されています。
どういう関数かというと、それぞれの関数リファレンスの説明では
apply_filters
フィルターフックに追加された関数を呼び出します。フィルターフックの一覧は プラグイン API をごらんください。
この関数により、フィルターフック $tag に付加されたコールバック関数が呼び出されます。この関数を、$tag パラメータを使用して新しく指定したフックの名前と一緒に呼び出すことで、フィルターフックを新規作成することができます。
add_filter
指定したフィルターフックに、関数をフックします。
フィルターは、様々な種類のテキストがデータベースまたはブラウザ画面に送信される前に WordPress が変更を行うフックです。プラグインは、フィルター API を利用して、指定したテキストをその時点で変更する PHP 関数を実行できます。フィルターフックの一覧は プラグイン_API/フィルターフック一覧 を参照してください。
と書かれています。
読んでも分かりづらいので何ができるのか説明すると、
「apply_filters」で、フィルターフックに追加された関数の呼び出しを行っている関数は、「add_filter」を利用してフィルターフックに関数を追加することで、関数の動作を拡張する事が可能になります。
なので、「apply_filters」が利用されている関数に修正が必要場合は、直接修正せずに「add_filter」を利用して拡張しましょうと言う事です。
では、実際にはどのように修正するのが理想的なのか説明します。
まず、自分のthemeフォルダにある、「function.php」に修正内容を記述します。
ここが重要なポイントなんです!
WordPressのコアファイルは、個人の管理外のソースなので、WordPressバージョンアップ毎に上書きされる可能性があります。
しかし、themeのファイルは、個人が管理しているファイルなのでWordPressのバージョンアップでも影響を受けないファイルです。
個人が基本修正して構わないのは、このthemeフォルダの中のファイルになります!
で、今回修正したい関数には、
return apply_filters( 'is_protected_meta', $protected, $meta_key, $meta_type );
この記述があるおかげで、themeフォルダの「function.php」で対象関数の機能拡張が出来ます。
実際に「function.php」に記載する内容は、
になります。※WordPressのコーディング規約に合わせて書いてみたけどなんか気持ち悪い…。
何が行われているか説明していくと、
1.フィルターフックの呼び出し
「meta.php」の中の「apply_filters」が記載されている行で「is_protected_meta」という名称の、フィルターフックに追加されている関数の呼び出しが行われます。
呼び出される関数の、第1引数に$protected、第2引数に$meta_key、第3引数に$meta_typeの値が引き渡されます。
もし、「is_protected_meta」というフィルターフックに関数が追加されていない場合は、$protectedの値がそのまま戻ってきます。
2.拡張する関数の定義
「funtion.php」の中でフィルターフックで呼び出される関数「is_my_protected_meta」を定義します。
apply_filtersで渡されてくる引数を受け取るように定義し、拡張したい処理を記述します。
3.フィルターフックに関数の追加
「function.php」の中で「add_filter」を使って「is_protected_meta」フィルターフックで、「is_my_protected_meta」が呼び出されるよう関数を追加します。
第1引数にフィルターフック名、第2引数に登録する関数名、第3引数に優先度(デフォルト10なので、明確な理由がなければ10でOK)、第4引数に受け取る引数の数(ここを記載してないと1つしか引数が渡って来ないので注意)を記載します。
これで、直接コアファイルを修正しなくても、関数を拡張できました。
WordPressで、コアファイルや、プラグインを拡張したなと思った場合、直接拡張するのではなく、まず、「apply_filters」で拡張性が担保されていないか確認してみてはいかがでしょうか?
ブログや書籍を参考にするのもいいけど、なぜそういうようにしているのかを考えるようにしないと…。
そうしないと、間違いや、あまりオススメできない方法を鵜呑みにしてしまう可能性があるので危険です。
考える事をやめちゃうと成長しなくなるよ〜って話しでした。
.
関連する記事:
- 有力なPHPフレームワークのGoogle Insights結果 (FuelPHP,Laravel,CodeIgniter,Symfony,CakePHP)
- WPTouchでモバイルテーマ(iPhone用のテーマ)に戻すボタンが表示されない場合
- AndroidでNFCのIDmを読み取るサンプル
- MacのTime Machineで保存容量を制限する方法
- Androidのkeytoolで文字化けする場合の対処方法
コメント 0