Error al llamar la función get_cart_subtotal() de woocommerce

¿En qué podemos ayudarte?
< Regresar
Estás aquí:
Imprimir

Descripción del problema

El error se puede observar en el log error de apache para el vhost (error.log) o si se tienen las notificaciones encendidas de wordpress es posible que los errores lleguen vía email.

A continuación se muestran ejemplos de ambas salidas

Email:

Hola!

Dado que WordPress 5.2 es una función incorporada que detecta cuándo un plugin o tema causa un error fatal en su sitio y lo notifica con este correo electrónico automatizado.

En este caso, WordPress encontro un error con tu tema, Easy Store.
 
Primero, visite su sitio web (https://www.amorcitocorazon.net/) y compruebe si hay problemas visibles. Luego, visite la página donde se detectó el error (https://www.amorcitocorazon.net/wp-login.php) y verifique si hay problemas visibles.

Póngase en contacto con su host para obtener ayuda con la investigación de este problema.

Si su sitio aparece roto y no puede acceder a su panel de control normalmente, WordPress ahora tiene un "modo de recuperación" especial. Esto le permite iniciar sesión de forma segura en su panel e investigar más a fondo.

https://www.amorcitocorazon.net/amor-login/?action=enter_recovery_mode&rm_token=Ep2y2b979QJ6QwJDs0m33K&rm_key=KbLeDZTRVnmFvHlb2ypLrU

Para mantener su sitio seguro, este enlace caducará en 1 día. Sin embargo, no se preocupe por eso: se le enviará un nuevo enlace por correo electrónico si el error ocurre nuevamente después de que caduque.

Cuando busque ayuda con este problema, es posible que se le solicite la siguiente información:
Versión de WordPress 6.1.1
Tema activo: Easy Shop (versión 1.0.3)
Plugin actual:  (version )
Versión de PHP: 7.4.3
 


Detalles Del Error
==================
Se produjo un error de tipo E_ERROR en la línea 216 del archivo /var/www/clients/client0/web1/web/wp-content/themes/easy-store/inc/woocommerce.php. Mensaje de error: Uncaught Error: Call to a member function get_cart_subtotal() on null in /var/www/clients/client0/web1/web/wp-content/themes/easy-store/inc/woocommerce.php:216
Stack trace:
#0 /var/www/clients/client0/web1/web/wp-content/themes/easy-store/inc/woocommerce.php(246): easy_store_woocommerce_cart_link()
#1 /var/www/clients/client0/web1/web/wp-includes/class-wp-hook.php(308): easy_store_woocommerce_header_cart()
#2 /var/www/clients/client0/web1/web/wp-includes/class-wp-hook.php(332): WP_Hook->apply_filters()
#3 /var/www/clients/client0/web1/web/wp-includes/plugin.php(517): WP_Hook->do_action()
#4 /var/www/clients/client0/web1/web/wp-content/themes/easy-store/header.php(89): do_action()
#5 /var/www/clients/client0/web1/web/wp-includes/template.php(783): require_once('/var/www/client...')
#6 /var/www/clients/client0/web1/web/wp-includes/template.php(718): load_template()
#7 /var/www/clients/client0/web1/web/wp-includes/general-template.php(48): locate_template()
#8 /var/www/clients/client0/web1/web/wp-content/themes/

Salida del error.log:


[Wed Feb 01 09:50:59.156994 2023] [proxy_fcgi:error] [pid 1779184] [client 187.188.55.133:53244] AH01071: Got error 'PHP message: PHP Fatal error: Uncaught Error: Call to a member function get_cart_contents_count() on null in /var/www/clients/client0/web1/web/wp-content/themes/easy-store/inc/woocommerce.php:217\nStack trace:\n#0 /var/www/clients/client0/web1/web/wp-content/themes/easy-store/inc/woocommerce.php(246): easy_store_woocommerce_cart_link()\n#1 /var/www/clients/client0/web1/web/wp-includes/class-wp-hook.php(308): easy_store_woocommerce_header_cart()\n#2 /var/www/clients/client0/web1/web/wp-includes/class-wp-hook.php(332): WP_Hook->apply_filters()\n#3 /var/www/clients/client0/web1/web/wp-includes/plugin.php(517): WP_Hook->do_action()\n#4 /var/www/clients/client0/web1/web/wp-content/themes/easy-store/header.php(89): do_action()\n#5 /var/www/clients/client0/web1/web/wp-includes/template.php(783): require_once('/var/www/client...')\n#6 /var/www/clients/client0/web1/web/wp-includes/template.php(718): load_template()\n#7 /var/www/clients/client0/web1/web/wp-includes/general-template.php(48): locate_template()\n#8 /va...

Replicación del problema

Para poder reproducir el problema es necesario entrar al siguiente enlace y estar monitoreando en tiempo real el archivo error.log, de tal manera que podamos entender por que y donde se genera el error.

https://www.amorcitocorazon.net/new/wp-json/wp/v2/posts

Workaround

Para evitar que este error se genere hay que editar el archivo woocommerce.php, ubicado en la carpeta del tema, un ejemplo de ubicación es: /var/www/clients/client0/web1/web/wp-content/themes/easy-store/inc/woocommerce.php, los mensajes de error nos dicen en que línea, se produce el error, en este caso la 216.
 
nano /var/www/clients/client0/web1/web/wp-content/themes/easy-store/inc/woocommerce.php

La línea 216 dice:

<?php echo wp_kses_data( WC()->cart->get_cart_subtotal() ); ?>

debe quedar:

<?php echo wp_kses_data( ( !is_null( WC()->cart ) ? WC()->cart->get_cart_subtotal() : ‘$0.00’ ) ); ?>

La línea 217 dice:

<?php echo wp_kses_data( sprintf( _n( ‘%d item’, ‘%d items’, WC()->cart->get_cart_contents_count(), ‘easy-store’ ), WC()->cart->get_cart_contents_count() ) );?>

y debe quedar:

<?php echo wp_kses_data( sprintf( _n( ‘%d item’, ‘%d items’, ( !is_null( WC()->cart ) ? WC()->cart->get_cart_contents_count() : ‘0’ ), ‘easy-store’ ), ( !is_null( WC()->cart ) ? WC()->cart->get_cart_contents_count() : ‘0’ ) ) );?>

Probar el cambio y monitorear el log.

Es importante mencionar que este cambio, puede ser sobre escrito al actualizar el tema, por lo que después de la actualización, checar el log.

Este error se ha visto en al menos 2 temas por lo que se puede presentar en cualquier otro.

 

Table of Contents

Deja un comentario