プラグインの競合について

WordPressの最大の魅力は、何といっても豊富なテーマ、プラグインを利用できることです。そのため、プラグイン同士で処理が被り、思わぬ結果になることがあります。

現在(2013-08-30)、こちらへご連絡いただいた競合プラグインは以下の通りです。

  • Welcart
  • Customer Permalinks
  • Ajax Event Calendar
  • Shortcodes Ultimate
  • WP-OliveCart
  • アメブロ自動投稿プラグイン「アメーバプレス」(2014-07-29)
    このプラグインを利用すると時刻が9時間ズレます。

現象として、予約入力フォーム処理が正常に動作しなかったりします。他にもありましたらご連絡いただけると幸いです。随時更新したいと存じます。

さて回避方法ですが、どちらか一方のプラグインを利用しなければいいのですが、プログラムを修正して回避することができる場合もあります。

以下に回避方法の1つをご紹介します。この回避方法は、以下で説明する競合の原因の対策として有効です。ただし確実に回避できるかどうかは状況によりますのでご了承下さい。

競合が起こる原因

プラグインがあたかも WordPress の機能のように動作するのは、WordPress の処理に「フック」と呼ばれる仕掛けが組み込まれているおかげです。

フックは様々な場所に存在し、プラグインは目的とする処理を実行するため、最適なフックを選択して処理を組み込みます。

競合が起こる原因の1つが、異なるプラグインが同じフックを利用して処理を実行した結果に発生することです。

予約入力フォームの処理

MTS Simple Bookingの予約入力フォーム処理は、スラッグ名に「booking-form」と名付けた固定ページを表示する際に、「the_content」フックを利用して入力チェック、フォーム内容の出力を実行します。

ですので、もし「the_content」フックを利用したプラグインが別の処理を実行すると、思わぬ結果になることがあります。

the_content 競合の回避

このフック処理は実行に際し、優先順位を付けることができます。つまり、競合するプラグインより先に処理をするか、後に処理をするかを決めることができるのです。

先か後かは、入力データに影響があるのか出力データに影響があるのかで判断することができます。両方に影響がある場合は回避できないかもしれません。

例えば「Welcart」との競合の場合出力データに影響があるようなので、本プラグインの処理を後回しにすることで競合を回避することができました。

その方法は次の通りです。なお、プログラムを直接変更するため、作業はご自身の判断と責任で実施して下さい。

・実施内容は、フックの登録処理で優先順位を下げるため数値を変更します。

・対象のバージョンとプログラムは、Ver.1.2の「mts-simple-booking.php」です。

・対象行は、「フォームのフロント処理ディスパッチャー」とコメントされた149行目です。

以下のように書き換えて保存して下さい。

// フォームのフロント処理ディスパッチャー
add_filter('the_content', array($this, 'form_dispatcher'), 11);

ご注意

プログラムの修正を誤ると画面が白くなったりして正常に動作しなくなることがあります。その場合、お問い合わせをいただいてもお答えできませんのでご了承下さい。

それでは WordPress のサイト作りをお楽しみ下さい。