У меня есть бизнес-сайт для аренды домов для отдыха, в котором тема 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 действия / фильтры, которые я сейчас закомментировал в файле плагина?