Tengo un sitio web comercial para alquileres de casas de vacaciones en el que el tema de WordPress tiene su propio sistema de reservas solo para reservas de casas y ¡ha sido genial!
También tengo Tour/Servicios (no Houses) que también se pueden reservar, pero para estos utilizo los complementos WooCommerce/WooCommerce Bookings, no el sistema de reservas House.
¡Todo ha sido genial!
Pero recientemente, la actualización del tema introdujo una opción de pago de WooCommerce para el sistema de reservas de Home que nunca existió antes de la actualización. Aunque tengo la opción de pago de WooCommerce de temas desactivada, el código aún se está ejecutando en el complemento principal del tema. He estado yendo y viniendo con un ticket de soporte abierto con el proveedor del tema durante algunas semanas para que pongan una declaración condicional para NO ejecutar el nuevo código cuando el usuario tiene la opción DESACTIVADA, pero no sé cuándo o si alguna vez se hará. Lo que sucede ahora es que el complemento principal del tema está manipulando el pago de WooCommerce y después del paso final de realizar el pedido de cualquier Tour/Servicio en el que siempre había estado usando WooCommerce por separado, ahora se agota después de realizar el pedido y genera más de 1,000 adicionales. Páginas de pago «fantasma» en el back-end.
Línea de fondo:
Cuando se comentan 3 líneas (líneas 27-29) del archivo del complemento principal del tema, todo funciona bien. Pero no quiero tener que comentar estas 3 líneas después de cada actualización del complemento.
//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');
Aquí está el código completo (con las líneas 27-29 comentadas): https://pastebin.com/jqtBpCpA
He intentado las instrucciones en las dos páginas a continuación sin éxito:
https://mekshq.com/remove-wordpress-action-filter-class
https://github.com/herewithme/wp-filters-extras
He insertado lo siguiente en el archivo functions.php
MÉTODO 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');
Luego usando el complemento, aquí: https://github.com/herewithme/wp-filters-extras
Probé ambos métodos:
MÉTODO 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' );
MÉTODO 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');
¿Alguien puede darme una idea de cómo puedo insertar una acción de eliminación y un filtro de eliminación para cada uno en functions.php para eliminar/desenganchar las 3 acciones/filtros que actualmente he comentado en el archivo del complemento?
.