Как отключить действия / фильтры в классе в плагине - PullRequest
0 голосов
/ 10 ноября 2019

У меня есть бизнес-сайт для аренды домов для отдыха, в котором тема WordPress имеет свою собственную систему бронирования только для бронирования домов, и это было здорово!

У меня также есть Тур / Услуги (не Дома) такжеможно бронировать, но для них я использую плагины WooCommerce / WooCommerce Bookings, а не систему бронирования House.

Все было замечательно!

Но недавно в обновлении темы появилась опция проверки WooCommerce для системы бронирования Home. который никогда не существовал до обновления. Хотя у меня отключена опция проверки тем WooCommerce, код все еще выполняется в основном плагине темы. Я ходил туда-сюда с открытым билетом поддержки у провайдера тем в течение нескольких недель, чтобы они поставили условное заявление, чтобы НЕ запускать новый код, когда у пользователя отключена опция, но я не знаю, когда или если онкогда-нибудь будет сделано. Что происходит сейчас, так это то, что основной плагин темы манипулирует оформлением заказа WooCommerce, и после последнего шага размещения заказа на любой Тур / Услуги, в котором я всегда ранее использовал WooCommerce отдельно, время ожидания после размещения заказа истекает, и генерируется более 1000 дополнительных«Призрачные» страницы оформления заказа в фоновом режиме.

Итог: Когда 3 строки (строки 27-29) закомментированы из основного файла плагина темы, все работает нормально. Но я не хочу комментировать эти 3 строки после каждого обновления плагина.

//add_action( 'woocommerce_thankyou', array($this,'order_attach') );

//add_filter( 'woocommerce_checkout_fields', array($this,'custom_override_checkout_fields') );

//add_filter('woocommerce_create_account_default_checked', '__return_true');

Вот полный код (закомментированные строки 27-29): https://pastebin.com/jqtBpCpA

Я пробовал инструкции на обеих страницах ниже безуспешно: https://mekshq.com/remove-wordpress-action-filter-class https://github.com/herewithme/wp-filters-extras

Я вставил следующее в файл functions.php

МЕТОД 1:

global $Wpestate_Global_Payments; //get access to the class object instance

remove_action( 'woocommerce_thankyou', array($Wpestate_Global_Payments,'order_attach') );
remove_filter( 'woocommerce_checkout_fields', array($Wpestate_Global_Payments,'custom_override_checkout_fields') ); 
remove_filter('woocommerce_create_account_default_checked', '__return_true');

Затем с помощью плагина, здесь: https://github.com/herewithme/wp-filters-extras Я попробовал оба метода:

МЕТОД 2:

remove_filters_with_method_name( 'woocommerce_thankyou', 'order_attach' );
remove_filters_with_method_name( 'woocommerce_checkout_fields', 'custom_override_checkout_fields' );
remove_filters_with_method_name( 'woocommerce_create_account_default_checked', '__return_true' );

МЕТОД 3:

remove_filters_for_anonymous_class( 'woocommerce_thankyou', 'Wpestate_Global_Payments', 'order_attach' );
remove_filters_for_anonymous_class( 'woocommerce_checkout_fields', 'Wpestate_Global_Payments', 'custom_override_checkout_fields' );
remove_filters_for_anonymous_class( 'woocommerce_create_account_default_checked', 'Wpestate_Global_Payments', '__return_true' );
class Wpestate_Global_Payments {

    public $stripe_payments;
    public $is_woo;  
    public $userID;
    public $user_email;

    function __construct() {

        $this->is_woo   =   wprentals_get_option('wp_estate_enable_woo','') ;
        $current_user   =   wp_get_current_user();

        $this->userID                  =    $current_user->ID;
        $this->user_email              =    $current_user->user_email;
        add_filter( 'woocommerce_cart_item_permalink','__return_false');
        add_action( 'wp_ajax_wpestate_woo_pay',                 array( $this, 'wpestate_woo_pay') );
        add_action( 'wp_ajax_mopriv_wpestate_woo_pay',          array( $this, 'wpestate_woo_pay') );
        add_filter( 'woocommerce_thankyou_order_received_text', array($this, 'wpestate_woocommerce_thankyou_order_received_text'),10,2 );
        add_action( 'woocommerce_before_single_product',        array($this, 'wpestate_product_redirect') );
        add_action( 'woocommerce_product_query',                array($this, 'wpestate_custom_pre_get_posts_query' ));  
        add_action( 'woocommerce_order_status_completed',       array($this, 'wpestate_payment_complete') );
        add_action( 'woocommerce_order_status_processing',      array($this, 'wpestate_payment_complete') );       
       //EVERYTHING WORKS ONLY WHEN THE 3 LINES BELOW ARE COMMENTED OUT 
       //add_action( 'woocommerce_thankyou', array($this,'order_attach') );
       //add_filter( 'woocommerce_checkout_fields', array($this,'custom_override_checkout_fields') );
       //add_filter('woocommerce_create_account_default_checked', '__return_true');

Может кто-нибудь дать представление о том, как я могу вставить remove_action & remove_filter для каждого в functions.php для удаления /снять 3 действия / фильтры, которые я сейчас закомментировал в файле плагина?

1 Ответ

0 голосов
/ 11 ноября 2019

Я не уверен на 100%, но я предполагаю, что ваши попытки удалить крючки вызываются перед классом Wpestate_Global_Payments. По сути, это означает, что их нельзя удалить, потому что они еще не были добавлены.

Я бы предложил повторить ваши методы, но когда срабатывает действие wp_loaded.

wp_loaded Этот хук срабатывает после того, как WP, все плагины и тема полностью загружены и созданы.

Так, например, в вашем файле functions.php ...

function remove_my_themes_actions() {
  remove_filters_with_method_name( 'woocommerce_thankyou', 'order_attach' );
  remove_filters_with_method_name( 'woocommerce_checkout_fields', 'custom_override_checkout_fields' );
  remove_filters_with_method_name( 'woocommerce_create_account_default_checked', '__return_true' );
}

add_action( 'wp_loaded', 'remove_my_themes_actions' );

Если вы используете PHP версии 5.3.0 или выше, вы можете использовать анонимную функцию ...

add_action( 'wp_loaded', function() {
  remove_filters_with_method_name( 'woocommerce_thankyou', 'order_attach' );
  remove_filters_with_method_name( 'woocommerce_checkout_fields', 'custom_override_checkout_fields' );
  remove_filters_with_method_name( 'woocommerce_create_account_default_checked', '__return_true' );
} );

Надеюсь, это поможет!

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