お問い合わせはコチラから

プラグインの中のフックを外部からremoveする方法

サイト運営

WordPressのadd_actionやadd_filterをremoveする時に、remove_actionやremove_filterを使えばよいというのは検索すると直ぐに出てきます。

テーマ内のフックの場合は、removeするのは簡単なのですが、プラグインの中のフックの場合、いつも通りに行うとエラーになるか、removeできなかったりします。

前から疑問に思っていた内容でもあり、重い腰を上げてremove方法を調べたら、わかったのでまとめておきたいと思います。

プラグイン内部のadd_actionでよく見かける記述

プラグインのソースコードを見て、hookが見つかったときにarray($this,function)というのが付いている時があります。

この部分をfunction.phpなどでそのまま書いて、remove_actionすると$thisがエラーになります。

if ( ! class_exists( 'XXX_plugin ' ) ) {
class XXX_plugin {

			public function __construct() {
				// この部分のフックをremove_actionしたい
  			add_action( 'wp' , array( $this, 'setup_xxxx' ) , 20);
      }
      function setup_xxx(){
      //何かの処理
      }
}
//最後にプラグインのインスタンスを作成した時に、global変数に入れる
$XXX_plugin = new XXX_plugin();
}

ダメな例

$thisのままfunctions.phpでremove_actionするとエラーになります。

function remove_my_action(){
    remove_action( 'wp' , array( $this, 'setup_xxxx' ) , 20);
}
add_action( 'init', 'remove_my_action', 99);

array($this,function)をfunctions.phpでどう扱えばよいか?

ダメな例:$thisをclass名に置き換えてみる

もともと$thisはclass名ということなので、以下のように$thisをXXX_pluginに置き換えます。

エラーは無くなりますが、removeは出来ないままです。

function remove_my_action(){
    remove_action( 'wp' , array( XXX_plugin, 'setup_xxxx' ) , 20);
}
add_action( 'init', 'remove_my_action', 99);

良い例:$thisを変数名に置き換えてみる

classのインスタンスが変数に入っているので、$XXX_pluginで$thisを置き換えます。

function remove_my_action(){
global $XXX_plugin;
    remove_action( 'wp' , array( $XXX_plugin, 'setup_xxxx' ) , 20);
}
add_action( 'init', 'remove_my_action', 99);

そうすると、エラーも無くなりremoveもできるようになります。

global宣言を追加しないと、変数が参照できないのでそこは注意。

まとめ

プラグインのadd_actionフックをremoveして、別の関数をフックできれば、プラグイン内部を書き換えなくてよいことは結構あります。

そんな時には、今回の記事を思い出すと役に立つかもしれません。

この記事を書いた人
ブーン

はるばる日本よりオランダ王国へやってまいりました。
自分の経験が少しでも参考になれば嬉しいです。
お問い合わせは、『こちら』からお願い致します。

\ブーンをフォロー/
スポンサーリンク
サイト運営
\シェアお願いします!/
\ブーンをフォロー/
こんな記事も読まれています

失敗しないレンタルサーバーランキング

mixhost

不正アクセスに強くて使いやすいおススメサーバー
\本サイトで利用中/
メリット①:自動ウィルス駆除対応
メリット②:サイトの表示速度が速い!
メリット③:転送量の上限が多い!
メリット④:自由にプラン変更ができ、アクセス増にも対応できる!
メリット⑤:バックアップデータが無料で復元できる!
メリット⑥:Wordpressが簡単にインストールできる!
メリット⑦:どのプランでも初期費用が無料!
メリット⑧:10日間の無料お試し期間と30日の返金保証!

Conoha Wing

国内Wordpress最速の最強サーバー
メリット①:圧倒的な表示速度
メリット②:レンタルサーバーと独自ドメインがセットでお得◎
メリット③:プラン変更はすべてのプランで自由自在
メリット④:一か月の利用転送量の制限が緩い(9TB~)
メリット⑤:WordPresサイトの移行が簡単

エックスサーバー

国内シェアNo1の安定性と実績が魅力。ALL SSDで死角なしの万能サーバー。
メリット①:サイトの表示速度が安定して速い!
メリット②:アクセス負荷に強くて安定性が高い!
メリット③:24時間365日の充実サポートで安心!電話サポートもあり!
メリット④:転送量が多い!
メリット⑤:自動バックアップ機能付き!
メリット⑥:WordPressが簡単にインストールできる!
メリット⑦:10日の無料お試し期間がある!

タイトルとURLをコピーしました