Как удалить действие в конструкторе класса в плагине через функции. php в теме? - PullRequest
0 голосов
/ 07 марта 2020

Я пытаюсь не редактировать файлы непосредственно в плагине, но я не хочу, чтобы действия плагина выполнялись. Вот код: -

class YITH_WC_Points_Rewards_Earning {
       public static function get_instance() {
            if ( is_null( self::$instance ) ) {
                self::$instance = new self();
            }
            return self::$instance;
        }

        /**
         * Constructor
         *
         * Initialize plugin and registers actions and filters to be used
         *
         * @since  1.0.0
         * @author Emanuela Castorina
         */
        public function __construct() {
            add_action( 'woocommerce_payment_complete', array( $this, 'add_order_points' ) );
            add_action( 'woocommerce_order_status_processing', array( $this, 'add_order_points' ) );
            add_action( 'woocommerce_order_status_completed', array( $this, 'add_order_points' ) );

        }
}
function YITH_WC_Points_Rewards_Earning() {
    return YITH_WC_Points_Rewards_Earning::get_instance();
}

Я не хочу, чтобы действия в классе плагина выполнялись, поэтому я попытался сделать это в своем пользовательском файле, который был в функциях. php

remove_action( 'woocommerce_payment_complete', array( YITH_WC_Points_Rewards_Earning(), 'add_order_points' ) );
remove_action( 'woocommerce_order_status_processing', array( YITH_WC_Points_Rewards_Earning(), 'add_order_points' ));
remove_action( 'woocommerce_order_status_completed', array( YITH_WC_Points_Rewards_Earning(), 'add_order_points' ));

Но все же действия плагина выполняются, я проверил wc_logger, что YITH_WC_Points_Rewards_Earning () это успешно вызывается в моем пользовательском файле. Итак, как сделать так, чтобы действия плагина не работали? Спасибо

Ответы [ 2 ]

1 голос
/ 07 марта 2020

Используйте приоритет около 20 (или, возможно, выше), чтобы remove_action выполнялось после создания экземпляра класса, предполагая, что ваш код может получить доступ к экземпляру класса, созданному плагином. Из wordpress function description - "Если действие было добавлено из класса, например, с помощью плагина, для его удаления потребуется доступ к переменной класса. Также стоит отметить, что вам может потребоваться расставить приоритеты удаление действия с ловушкой, которое происходит после добавления действия. Невозможно успешно удалить действие до его добавления. "

remove_action( 'woocommerce_payment_complete', array( YITH_WC_Points_Rewards_Earning(), 'add_order_points' ), 20 );
remove_action( 'woocommerce_order_status_processing', array( YITH_WC_Points_Rewards_Earning(), 'add_order_points' ), 20);
remove_action( 'woocommerce_order_status_completed', array( YITH_WC_Points_Rewards_Earning(), 'add_order_points' ), 20);
0 голосов
/ 11 марта 2020
function labtag_yith_remove_actions() { //removing actions of yith plugin
    remove_action( 'woocommerce_payment_complete', array( YITH_WC_Points_Rewards_Earning(), 'add_order_points' ) );
    remove_action( 'woocommerce_order_status_processing', array( YITH_WC_Points_Rewards_Earning(), 'add_order_points' ) );
    remove_action( 'woocommerce_order_status_completed', array( YITH_WC_Points_Rewards_Earning(), 'add_order_points' ) );
    remove_action( 'woocommerce_order_status_completed', [ YITH_WC_Points_Rewards_Earning(), 'remove_points']);


}
add_action( 'init', 'labtag_yith_remove_actions' );

Добавление всех удаленных объектов в функцию закрытия действия 'init' сделало свою работу:).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...