WordPress Remove_action в классе - PullRequest
       8

WordPress Remove_action в классе

0 голосов
/ 18 октября 2018

Я пытаюсь удалить действие, добавленное плагином Woocommerce Memberships.Возвращение к действиям содержит функции, которые изначально добавляются в ловушку в

class WC_Memberships_Frontend {
    public function __construct() {
        add_action( 'woocommerce_thankyou', array( $this, 'maybe_render_thank_you_content' ), 9 );

Но этот класс вызывается частной функцией и защищен переменной, которую объявил родительский класс (насколько я могускажи)

class WC_Memberships extends Framework\SV_WC_Plugin  {

    protected $frontend;

    private function frontend_includes() {
        // init shortcodes
        require_once( $this->get_plugin_path() . '/includes/class-wc-memberships-shortcodes.php' );

        \WC_Memberships_Shortcodes::initialize();

        // load front end
        $this->frontend = $this->load_class( '/includes/frontend/class-wc-memberships-frontend.php', 'WC_Memberships_Frontend' );
    }

Я искал и пробовал несколько способов удалить эту

remove_action( 'woocommerce_thankyou', array( 'WC_Memberships', 'maybe_render_thank_you_content' ), 9 );
remove_action( 'woocommerce_thankyou', array( 'WC_Memberships_Frontend', 'maybe_render_thank_you_content' ), 9 );
global $WC_Memberships;
remove_action( 'woocommerce_thankyou', array( $WC_Memberships, 'maybe_render_thank_you_content' ), 9 );
global $WC_Memberships_Frontend;
remove_action( 'woocommerce_thankyou', array( $WC_Memberships_Frontend, 'maybe_render_thank_you_content' ), 9 );

Ни одну из вышеперечисленных работ, а также другие способы попытки вызвать WC_Memberships()->frontend; сгенерировать ошибкикак 'Невозможно получить доступ к защищенному свойству WC_Memberships :: $ frontend'

Я не уверен, мешают ли частная функция или защищенная переменная, или я просто не понимаю что-то об удалении действия в классе или вложенномклассы, но помощь будет очень приветствуется.

Редактировать: На основе кода, найденного здесь Я пытался

remove_action( 'woocommerce_thankyou', array( wc_memberships()->get_frontend_instance(), 'maybe_render_thank_you_content', 9 ) );

, но все еще безуспешно.

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Моя проблема пыталась выяснить, как сопоставить $this в исходной add_action add_action( 'woocommerce_thankyou', array( $this, 'maybe_render_thank_you_content' ), 9 );, чтобы удалить его.

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

Окончательный рабочий код:

remove_action( 'woocommerce_thankyou', array( wc_memberships()->get_frontend_instance(), 'maybe_render_thank_you_content', 9 ) );
0 голосов
/ 18 октября 2018

Как вы, вероятно, знаете, обычно не рекомендуется изменять файлы ядра или плагина.Используя модификацию ответа здесь , вы можете попробовать добавить в свои темы файл functions.php

function remove_aggravating_wcactions()
{
    remove_action( 'woocommerce_thankyou', 'maybe_render_thank_you_content', 19 );
    remove_action( 'woocommerce_thankyou', 'maybe_some_other_content', 20);
    ...
}
add_action('template_redirect','remove_aggravating_wcactions');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...