どうしたらいいの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

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

  関連記事

【Crayon Syntax Highlighter】ショートコードで表示するとソースコードにCSSが反映されない原因
【Crayon Syntax Highlighter】ショートコードで表示するとソースコードにCSSが反映されない原因

WordPress上のブログでソースコードを紹介するのに、プラグインとしてCra …

【Wordpressプラグイン自作】自作プラグインをWordpressに登録し認識させる方法
【WordPressプラグイン自作】WordPressに自作プラグインを登録し認識させる方法

WordPressを使っていて、自作プラグインを作成したいと考えている人も多い事 …

【Quick Adsense】サイドバーに広告を追加する設定について
【Quick Adsense】サイドバーに広告を追加する設定について

WordPressでブログを運営している人で、広告を掲載している人は「サイドバー …

【Quick Adsense】記事の最初に自動で広告を掲載するQuick Adsenseの設定
【Quick Adsense】記事の最初に自動で広告を掲載するQuick Adsenseの設定

Google Adsenseや忍者Admaxといった広告をブログで掲載している人 …

【Stinger5】PCで記事下に2つ横並びの広告を表示する方法
【Stinger5】PCで記事下に2つ横並びの広告を表示する方法

WordPressでブログを運営していて、Stinger5のテーマを利用している …

【WordPress】ソースコードを綺麗に紹介したい! Crayon Syntax Highlighter

ブログ運営をしていてプログラムのソースコードを利用したいという人は、「Crayo …

【Wordpressプラグイン自作】投稿画面の不要なパーツを削除する(remove_meta_box)
【WordPressプラグイン自作】投稿画面の不要なパーツを削除する(remove_meta_box)

WordPressのプラグインを自作で開発している人はプラグイン上でカスタム投稿 …

【Wordpress開発環境】開発環境構築で必要なXamppの設定
【WordPress開発環境】開発環境構築で必要なXamppの設定

WordPressでテーマやプラグインの開発を進めるには、自分のパソコン上で開発 …

【Wordpressプラグイン自作】管理画面の任意画面のヘッダー作成時に処理を実行する方法
【WordPressプラグイン自作】管理画面の任意画面のヘッダー作成時に処理を実行する方法

WordPressのプラグインを自作していて、Wordpressの管理画面の任意 …

【Wordpress開発環境】Eclipseで開発をスムーズにするオススメの設定
【WordPress開発環境】Eclipseで開発をスムーズにするオススメの設定

WordPressの開発環境として統合開発環境のEclipseを利用している人も …