どうしたらいいのNAVI

どうしたらいいの?にお答えするサイト

【WordPressプラグイン自作】フックに登録する関数を他プラグインの関数と衝突させない方法

      2015/11/07


WordPressのプラグインを自作する上で気を付けなければいけないのが自作したプラグインに登録する関数を他のプラグインの関数と衝突させない事です。

 
Wordpressに自分のプラグインで実装した処理を実行させるには、アクションフックやフィルターフックを使って特定のタイミングや条件でWordpressにプラグインの関数を実行してもらうよう依頼する事でプラグインの処理を実行する事ができるのですが、自作したプラグインの関数が他プラグインの関数と衝突するとWordpressはプラグインの関数をうまく実行する事が出来ずに、不具合を起こしてしまいます。

 
開発したプラグインのフックに登録する関数を他プラグインの関数と衝突させない方法について簡単でわかりやすく詳しく紹介しているのでチェックしていってくださいね。

 

 
【Wordpressプラグイン自作】フックに登録する関数を他プラグインの関数と衝突させない方法
 

 

フックに登録する関数を他プラグインの関数と衝突させない方法とは

WordPressのプラグインを開発する上で、フックに登録する関数を他プラグインの関数と衝突させない方法というのは、プラグイン内で実装した関数を他のプラグインで実装されている関数と衝突させる事を避けて、開発したプラグインの関数をWordpressに正しく認識させ、実行させる方法のことを指します。

 
自作したプラグインの処理をフィルターフックやアクションフックに登録しても「あれ?この処理だけ実行されないぞ?」という事がある場合は、まずフックに登録した関数が他プラグインの関数と衝突しているのではないか?という事を疑ってみましょう。

 
フックに登録する関数を他プラグインの関数と衝突させない方法は、処理原理なども含めて次の事を知っておく必要があります。

  • 関数が衝突するという事はどういう事なのか
  • フックに登録した自作プラグインの関数が他プラグインの関数と衝突する原因
  • フックに登録する関数を他プラグインの関数と衝突させない方法

フックに登録する関数を他プラグインの関数と衝突させない方法を使っていく上では、関数が衝突する事はそもそもどういう事なのかという事を知る必要があります。
また、フックに登録した自作プラグインの関数が他プラグインの関数と衝突する原因を知る事も衝突させない方法を理解する上で必要な知識です。
関数が衝突するという事はどういう事か?フックに登録した自作プラグインの関数が他プラグインの関数と衝突する原因を踏まえて、フックに登録する関数を他プラグインの関数と衝突させない方法を知る必要があるでしょう。

 
では、フックに登録する関数を他プラグインの関数と衝突させない方法について、各項目を具体的に見ていきましょう。

 

 

 

 

関数が衝突するという事はどういうことなのか?

関数の衝突というのは、同じ関数名、同じ引数の関数が存在する状態の事を指します。
PHPはプログラムを処理するときに関数を関数名と引数の数を見て、他のプログラムから関数が呼び出された時にどの関数を呼び出せばよいのか判断するので、同じ関数名、引数の数の関数が存在すると関数が衝突し、正しくプログラムを実行する事が出来ません。

 
例えば、一つのPHPファイルの中でも同じ関数が存在する場合はエラーとなり正しく処理が実行されません。
同じ「do_test」の関数名を指定し「引数1、引数2」をとる関数というのはPHPファイル内に一つしか定義する事が出来ないのです。

 

 

 

 

フックに登録した自作プラグインの関数が他プラグインの関数と衝突する原因

自作プラグインの関数が他プラグインの関数と衝突した状態というのは、自作プラグインと他プラグインの双方でプラグインで構造上の考慮不足があり、Wordpressの各フックに関数を登録した際に関数が衝突してしまった状態です。

 
Wordpressは各アクション、例えば「コンテンツをブラウザに表示する前に」というタイミングでフックをかけて「do_test(引数1,引数2)」という関数を実行する事を依頼する事が出来ます。
しかし、自作プラグインで「コンテンツをブラウザに表示する前に」のフックに対し「do_test(引数1,引数2)」関数を登録した際に、他のプラグインがすでに「do_test(引数1,引数2)」という今回用意した関数と衝突するものをフックで処理依頼を出していた場合は、Wordpress上で正しく処理できなくなってしまうのです。

 
つまり、一つのPHPファイルで例えるならば「do_test」の関数名を指定し「引数1、引数2」をとる関数が2つも存在する!という状態になってしまうのです。

 
Wordpressはアクションフックやフィルターフックを使う事で、特定のタイミングでプラグインの関数を実行するよう依頼する事で、プラグインで実装した処理をWordpressに実行してもらう事ができるのですが、関数が衝突すると関数を正しく認識できず、処理が実行されなくなります。

 

 

 

 

フックに登録する関数を他プラグインの関数と衝突させない方法

フックに登録する関数を他プラグインの関数と衝突させない方法は、結論から言うと「自作プラグインでクラスを用意し、クラス内で関数を用意する」という物です。
そして、Wordpressの各フックに関数を登録する場合は、クラス名も含めて処理を依頼します。

フックに登録する際に、クラスを含めて登録する事によって、Wordpressは実行する関数をクラス内から探して実行する事が出来るようになるので、関数が衝突するという事が無くなります。

例えば、Wordpressのフィルターフックを例にとると、クラスを含めて関数を登録するには「静的なクラス名の指定」と「インスタンス化したクラスの指定」の二つの方法があります。

静的なクラス名の指定ではクラス名を「文字列」で指定し、自分自身のクラス名を記述する事でどのクラスの関数を実行するのか指定する事が出来ます。

インスタンス化したクラスの指定では、クラスを「$this」でインスタンス化された自分自身の関数を実行してほしいとWordpressにフック実行時に呼び出しを依頼すると関数の衝突を避ける事が出来ます。

この方法では、プラグインのグローバルフィールドでクラスをインスタンス化し、クラスの初期化処理の中でフックを登録する必要があります。

 

 

 

 

スポンサーリンク


WordPressプラグイン自作でフックに登録する関数を他プラグインの関数と衝突させない方法 あとがき

WordPressプラグイン自作でフックに登録する関数を他プラグインの関数と衝突させない方法について紹介しました。
Wordpressプラグインを自作していると一度はやってしまう関数の衝突。

 
プログラム上の記述に問題はないのに、なぜかうまく処理がされない・・・
自作したプラグインをいくつかつかっていたら動作がやたら不安定になった・・・

 
複数プラグインを自作していて、自作したプラグインとプラグイン同士の関数が衝突してしまうなんて事もあります。
一つのPHPファイル内で関数が衝突しているのであれば、すぐに気付けるかとおもいますが、プラグインを隔ててしまうと、関数の衝突になかなか気づけないものです。

 
ましてやフィルターフックやアクションフック毎に関数が衝突しているかどうかなんてとてもじゃないけれど調べる気にもなれません。

 
Wordpressプラグイン自作でフックに登録する関数を他プラグインの関数と衝突させない方法を使って、安定的なプラグイン開発を行っていって下さいね。

 

 

 

 

WordPressプラグイン自作でフックに登録する関数を他プラグインの関数と衝突させない方法 まとめ

WordPressのプラグインを開発する上で、フックに登録する関数を他プラグインの関数と衝突させない方法というのは、プラグイン内で実装した関数を他のプラグインで実装されている関数と衝突させる事を避けて、開発したプラグインの関数をWordpressに正しく認識させ、実行させる方法のことを指します。

 
自作したプラグインの処理をフィルターフックやアクションフックに登録しても「あれ?この処理だけ実行されないぞ?」という事がある場合は、まずフックに登録した関数が他プラグインの関数と衝突しているのではないか?という事を疑ってみましょう。

 
フックに登録する関数を他プラグインの関数と衝突させない方法は、処理原理なども含めて次の事を知っておく必要があります。

  • 関数が衝突するという事はどういう事なのか
  • フックに登録した自作プラグインの関数が他プラグインの関数と衝突する原因
  • フックに登録する関数を他プラグインの関数と衝突させない方法

 
フックに登録する関数を他プラグインの関数と衝突させない方法を使っていく上では、関数が衝突する事はそもそもどういう事なのかという事を知る必要があります。
また、フックに登録した自作プラグインの関数が他プラグインの関数と衝突する原因を知る事も衝突させない方法を理解する上で必要な知識です。
関数が衝突するという事はどういう事か?フックに登録した自作プラグインの関数が他プラグインの関数と衝突する原因を踏まえて、フックに登録する関数を他プラグインの関数と衝突させない方法を知る必要があるでしょう。

 
関数の衝突というのは、同じ関数名、同じ引数の関数が存在する状態の事を指します。
PHPはプログラムを処理するときに関数を関数名と引数の数を見て、他のプログラムから関数が呼び出された時にどの関数を呼び出せばよいのか判断するので、同じ関数名、引数の数の関数が存在すると関数が衝突し、正しくプログラムを実行する事が出来ません。

 
自作プラグインの関数が他プラグインの関数と衝突した状態というのは、自作プラグインと他プラグインの双方でプラグインで構造上の考慮不足があり、Wordpressの各フックに関数を登録した際に関数が衝突してしまった状態です。

 
フックに登録する関数を他プラグインの関数と衝突させない方法は、結論から言うと「自作プラグインでクラスを用意し、クラス内で関数を用意する」という物です。
そして、Wordpressの各フックに関数を登録する場合は、クラス名も含めて処理を依頼します。

フックに登録する際に、クラスを含めて登録する事によって、Wordpressは実行する関数をクラス内から探して実行する事が出来るようになるので、関数が衝突するという事が無くなります。

 

 
最後までお読みいただきありがとうございました。

スポンサーリンク





 - Wordpress , , ,

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  関連記事

【Autoptimize】HTMLを縮小化するAutoptimizeの基本設定 初心者でも簡単!
【Autoptimize】HTMLを縮小化するAutoptimizeの基本設定 初心者でも簡単!

AutoptimizeはWordpressのプラグインで、HTMLを縮小化する機 …

【Autoptimize】JavaScriptを縮小化するAutoptimizeの高度な設定
【Autoptimize】JavaScriptを縮小化するAutoptimizeの高度な設定

Autoptimizeには基本設定と高度な設定があり、高度な設定については技術的 …

【Wordpress】Head Cleanerが原因でSearch Consoleが使えない?!
【WordPress】Head Cleanerが原因でSearch Consoleが使えない?!

WordPressを使ってブログを運営している人で「Head Cleaner」を …

【Wordpress】データ通信を削減してブログを高速化! Head Cleaner
【WordPress】データ通信を削減してブログを高速化! Head Cleaner

WordPressでブログを運営している人で、「もっとブログのパフォーマンスを上 …

【W3 Total Cache】ページキャッシュ(Page Cache)を設定しよう!
【W3 Total Cache】ページキャッシュ(Page Cache)を設定しよう!

WordPressのページキャッシュにW3 Total Cacheを使っている人 …

【Head Cleaner】Autoptimize効果なしを解消するカスタマイズ
【Head Cleaner】Autoptimize効果なしを解消するカスタマイズ

WordPressを運営していて、AutoptimizeとHead Cleane …

【Quick Adsense】moreタグの後に自動広告挿入!Quick Adsenseの設定
【Quick Adsense】moreタグの後に自動広告挿入!Quick Adsenseの設定

WordPressのブログで、広告を掲載してブログの収益化に挑戦している人も居る …

【Autoptimize】HTMLを縮小化するAutoptimizeの高度な設定
【Autoptimize】HTMLを縮小化するAutoptimizeの高度な設定

AutoptimizeはWordpressのプラグインで、HTMLを縮小化する機 …

【Quick Adsense】画像の後に広告を自動挿入するQuick Adsenseの設定
【Quick Adsense】画像の後に広告を自動挿入するQuick Adsenseの設定

画像の後に広告を掲載したいな~なんて考えている人も居るのではないでしょうか。 ブ …

【Wordpress】ブログを高速化するプラグイン特集! 高速化の果てへ
【WordPress】ブログを高速化するプラグイン特集! 高速化の果てへ

WordPressでブログを高速化する上で、プラグインの導入は今や必須となってい …