Отмена add_action при настройке внутри класса плагина - PullRequest
0 голосов
/ 05 марта 2019

Я унаследовал следующую установку с проблемой PHP, о которой я хотел бы подумать: мы используем плагин Отзывы клиентов для WooCommerce от ivole с WooCommerce Bookings от Automattic.

Customer Revierws for WooCommerce содержит следующий конструктор класса, который устанавливает действие для отправки электронного письма клиенту, когда заказ завершен (т.е. оплачен в этом случае):

class Ivole_Sender {
    public function __construct() {
        :
        add_action( 'woocommerce_order_status_completed_notification', array( $this, 'sender_trigger' ) );
        :
    }
    :
}   

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

add_action( 'woocommerce_booking_complete', array( $this, 'sender_trigger' ) );

Как правило, с использованием remove_action в function.php (или аналогичный), а затем повторное добавление действия было бы хорошо, но в этом случае, когда add_action происходит внутри класса, как я могу remove_action без физической модификации класса в плагине?

Порядок загрузки плагинов выглядит следующим образом:

ivole.php (загрузчик плагинов):

require_once( 'class-ivole.php' );

class-ivole.php:

require_once('class-ivole-sender.php');

class-ivole-sender.php:

class Ivole_Sender {
    public function __construct() {
        :
        add_action( 'woocommerce_order_status_completed_notification', array( $this, 'sender_trigger' ) );
        :
    }
    :
 }  

1 Ответ

1 голос
/ 05 марта 2019

Вам нужно найти, где создается экземпляр класса:

$ivole_sender = new Ivole_Sender();

Таким образом, вы можете использовать эту переменную в действии удаления.

global $ivole_sender;
remove_action( 'woocommerce_order_status_completed_notification', array( $ivole_sender, 'sender_trigger' ), 10 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...