Buenos días,
En el subdominio, donde tengo instalado Woocommerce, ayer tarde ví que empezó a funcionar de forma muy extraña todo el proceso de compra, bueno, mejor dicho, dejó de funcionar (no se actualizaban los cambios en el carrito, no se podía finalizar compra, no funcionaban las pasarelas de pago, ..). No daba error pero no funcionaba bien.
Al intentar entrar en el Panel de Administración me daba error (pantalla en blanco), así que mediante Wepanel he ido desactivando los plugins y probando hasta que he detectado que el que provoca el problema es Woocommerce v8.5.2. Lo he dejado desactivado y he sacado una copia mediante Wepanel-PhpMyAdmin he exportado copia de la base de datos (como precaución).
Antes de hacer nada he querido consultaros los pasos que me recomendais seguir.
Gracias
Contenido solo visible a usuarios registrados
Hola Gabriel.
Revisando los log veo el siguiete error:
[15-Feb-2024 09:41:49 UTC] PHP Fatal error: Uncaught Error: Call to a member function get_cart() on null in /home/espanolc/public_html/escuela/wp-content/themes/Divi-child/functions.php:186
Stack trace:
#0 /home/espanolc/public_html/escuela/wp-content/themes/Divi-child/functions.php(199): is_product_in_cart()
#1 /home/espanolc/public_html/escuela/wp-includes/class-wp-hook.php(324): payment_gateway_disable_product()
#2 /home/espanolc/public_html/escuela/wp-includes/plugin.php(205): WP_Hook->apply_filters()
#3 /home/espanolc/public_html/escuela/wp-content/plugins/woocommerce/includes/class-wc-payment-gateways.php(333): apply_filters()
#4 /home/espanolc/public_html/escuela/wp-content/plugins/woocommerce/src/Admin/Features/OnboardingTasks/Tasks/Payments.php(93): WC_Payment_Gateways->get_available_payment_gateways()
#5 /home/espanolc/public_html/escuela/wp-content/plugins/woocommerce/src/Admin/Features/OnboardingTasks/Tasks/Payments.php(71): Automattic\WooCommerce\Admin\Features\OnboardingTasks\Tasks\Payments::has_gateways()
#6 /home/espanolc/public_html/escuela/wp-content/plugins/woocommerce/src/Admin/Features/OnboardingTasks/Tasks/WooCommercePayments.php(125): Automattic\WooCommerce\Admin\Features\OnboardingTasks\Tasks\Payments->is_complete()
#7 /home/espanolc/public_html/escuela/wp-content/plugins/woocommerce/src/Admin/Features/OnboardingTasks/TaskList.php(304): Automattic\WooCommerce\Admin\Features\OnboardingTasks\Tasks\WooCommercePayments->can_view()
#8 [internal function]: Automattic\WooCommerce\Admin\Features\OnboardingTasks\TaskList->Automattic\WooCommerce\Admin\Features\OnboardingTasks\{closure}()
Este error hace referencia a un codigo que tienes en el archivo functions.php del tema hijo de tu plantilla, concretamente es este el que está dando el error:
/* Quitar métodos de pago
* Oculta las pasarelas de pago disponibles por producto
* Añade este codigo a tu plugin de funciones o el archivo functions.php del tema activo
* En el ejemplo se desactiva la pasarela de TRANSFERENCIA BANCARIA (bacs) pero
* tambien puedes desactivar otras como Paypal (paypal), contrareembolso (cod) o Stripe (stripe), por ejemplo
* Cambia los IDs de producto de ejemplo en el array $prodids, p.ej. $prodids=array(237737,237738);
*/
//Primero comprobamos si el producto esta disponible o no en el carrito.
function is_product_in_cart( $prodids ){
$product_in_cart = false;
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
$product = $cart_item['data'];
if ( in_array( $product->id, $prodids ) ) {
$product_in_cart = true;
}
}
return $product_in_cart;
}
// Luego ya desactivamos la pasarela que queramos por ID de producto. Cambia los números de ID en el array $prodids
function payment_gateway_disable_product( $available_gateways ) {
global $woocommerce;
//print_r( $available_gateways );
$prodids=array(237737,237738);
if ( isset( $available_gateways['bacs'] ) && is_product_in_cart( $prodids ) ) {
unset( $available_gateways['bacs'] );
}
return $available_gateways;
}
add_filter( 'woocommerce_available_payment_gateways', 'payment_gateway_disable_product' );
Prueba a eliminar o comentar este bloque de código y revisa si se soluciona.
Un Saludo
@pepesoler Sí, error mío, ya he eliminado esas líneas del functions.php y también otra en el wp-config.php por un comando duplicado DISALLOW_FILE_EDIT, ya puedo acceder al BackEnd y retomo el problema original que estoy teniendo desde hace un par de días con Woocommerce. No funciona correctamente el proceso de compra (no se actualizan los cambios en el carrito, no se puede finalizar compra, no funcionan las pasarelas de pago, ..). Ya no da error pero no se pueden realizar compras.
Cuando pulso en "¿YA eres cliente? no hace nada.
No se actualiza el carrito, ni se pueden eliminar los productos
No funciona stripe, no puedo introducir los datos d ela tarjeta...
No sé si me podeís orientar.
Gracias
Hola Gabriel.
Pues creo que el problema lo tienes en el plugin Wordfence.
Hemos desactiva el plugin y vemos que carga, lo hemos vuelta activar y al parecer se soluciono:
.- Actualiza el plugin que veo que no está actualizado.
Un Saludo
Sí, actualizaré el plugin. Ya parece que funciona pero veo que siguen existiendo errores por comandos obsoletos, intentaré ver de dónde pueden venir, a ver si puedo corregirlos.
Si veo que necesito más ayuda, abriré nuevo ticket, muchisimas gracias!
Hola Gabriel.
Genial !!! Me alegra que lo solucionaras.
Cualquier consulta que tengas no dudes en comunicarlo.
Un Saludo