remove_action: Исходная попытка не удалась, а попытка позже

Я надеюсь, что это подходящее место, чтобы опубликовать это, если нет, просто просто направьте меня в нужное место!

Недавно я наткнулся на плагин, который, помимо прочего, добавил мета-запись в заголовок. Мне нужно было удалить это действие. Запись add_action выглядела так:

add_action( 'wp_head', array( &$this, 'addMetaData' ) ); 

«это» относится к классу, называемому Vc_Base.

Моя первоначальная реакция заключалась в том, чтобы добавить к моим функциям следующее:

 function removeAddMetaData() { $vc = new Vc_Base(); remove_action('wp_head', array(&$vc, 'addMetaData'),10000); } add_action('init', 'removeAddMetaData', 10000); 

Это не сработало. Я также пытался изменить 10000 на другие значения.

Что DID в конечном итоге работает:

 function removeAddMetaData() { remove_action('wp_head', array(visual_composer(), 'addMetaData')); } add_action('init', 'removeAddMetaData'); 

Я отслеживал visual_composer () и имеет только одну строку:

 return vc_manager()->vc(); 

Я отслеживал vc_manager () -> vc () и, среди нескольких других вещей, он содержит следующие строки:

 $vc = new Vc_Base(); $this->factory['vc'] = $vc; return $this->factory['vc']; 

Итак, если это просто то, что я сделал (в кругу), почему моя первоначальная идея не работала? Я бы очень признателен за некоторые отзывы, поскольку я чувствую, что буду понимать WordPress / PHP намного больше, если я это пойму!

Заранее спасибо.

Solutions Collecting From Web of "remove_action: Исходная попытка не удалась, а попытка позже"

Ваш первый метод не работает, потому что вы создаете новый экземпляр класса и пытаетесь удалить действие из этого нового экземпляра. Этот новый экземпляр, который вы создали, не является тем же экземпляром, в который было добавлено действие, поэтому оно не работает.

Во втором примере вы получаете исходный экземпляр, который был создан плагином, поэтому удаление действия из этого экземпляра завершается успешно.

Посмотрите на этот вопрос для некоторых других способов, которые классы могут создавать в плагинах.