Hosting WordPress Webempresa

Solucionar la carga lenta en tu sitio web a causa de wc-ajax=get_refreshed_fragments de WooCommerce

por | Ago 13, 2022 | WooCommerce

Solucionar la carga lenta en tu sitio web a causa de wc-ajax=get_refreshed_fragments de WooCommerce

WooCommerce sin duda es uno de los plugin más usados para crear y gestionar una tienda online, actualmente una gran cantidad de E-commerce en WordPress usan WooCommerce y en consecuencia una de las funcionalidades que se usan es el llamado a wc-ajax=get_refreshed_fragments.

Estas llamadas afectan el rendimiento y velocidad de nuestro sitio web llegando a retrasar la carga entre 5 y 10 segundos.

¿Qué es wc-ajax=get_refreshed_fragments?

Esto es una llamada de ajax que básicamente realiza WooCommerce para intentar recopilar los detalles del carrito de compras llamando al script llevándole mucho tiempo en realizar la tarea.

WooCommerce llama a ” /? Wc-ajax = get_refreshed_fragments ” para actualizar los elementos del carrito y el total del carrito de forma asincrónica, es decir, sin la necesidad de actualizar la página del sitio web que está visitando.

El Script que se visualiza en cada página de tu sitio web puede ser:

<script type='text/javascript'>
/* <![CDATA[ */
var wc_add_to_cart_params = {"ajax_url":"\/wp-admin\/admin-ajax.php","wc_ajax_url":"\/?wc-ajax=%%endpoint%%","i18n_view_cart":"View Cart","cart_url":"http:\/\/localhost\/shop\/cart\/","is_cart":"","cart_redirect_after_add":"yes"};
/* ]]> */
</script>

Es así como WooCommerce usa la llamada de Ajax de fragmentación del carrito para actualizar los elementos y el total que se tenga que estar actualizando la página, pero estas llamadas en cada página retrasan los tiempos de carga de cada página además que consumen grandes recursos del servidor.

Uno de los problemas es que WooCommerce actúa esto en cada página aunque en esta no se encuentre el carrito o detalles del producto ralentizando así la carga de todas las páginas de nuestro sitio web por lo que eliminar el carrito de estas páginas no funcionara.

Para solucionar este problema lo que tenemos que realizar es desactivar la actualización del carrito cuando no hay un carrito en sí o no se encuentran productos dentro de él.

Como podemos solucionar el problema con wc-ajax=get_refreshed_fragments

Pata solucionar este problema solo tenemos que desactivar este script de las páginas que nos sean estrictamente de la tienda.

Lo primero será desactivar la fragmentación del carrito en la portada de nuestro sitio web, para ello tenemos que acceder a nuestro cPanel -> Administrador de archivos -> public_html dentro de este debemos ubicar el archivo function.php (preferiblemente un tema hijo) que encontrarás en wp-content -> themes -> Tu_plantilla

/** Desactiva llamadas Ajax de WooCommerce en portada y entradas*/
add_action( 'wp_enqueue_scripts', 'dequeue_woocommerce_cart_fragments', 11);
function dequeue_woocommerce_cart_fragments() {
if (is_front_page() || is_single() ) wp_dequeue_script('wc-cart-fragments');
}

Una vez guardemos los cambios tenemos que ingresar a WooCommerce > Ajustes > Productos > General y activar la casilla «Redirigir a la página del carrito tras añadir productos con éxito» así como asegurarnos de desactivar la de «Activar botones AJAX de añadir al carrito en los archivos».

Desactivar ajax woocommerce

Esto permitirá que los usuarios vayan directamente a la página de carrito sin tener que esperar un largo tiempo una vez se añada un producto al carrito, de lo contrario aunque se añada un producto puede ser que no se muestren los detalles a estar en la misma página donde se desactivó el script de fragmentación.

Por último tenemos que desactivar todos los estilos y scripts de WooCommerce en todo el sitio, para ello solo necesitamos añadir el siguiente código en el archivo function.php de nuestro tema

/** Desactiva todos los scripts y estilos de WooCommerce excepto en las páginas de la tienda*/
add_action( 'wp_enqueue_scripts', 'dequeue_woocommerce_styles_scripts', 99 );
function dequeue_woocommerce_styles_scripts() {
if ( function_exists( 'is_woocommerce' ) ) {
if ( ! is_woocommerce() && ! is_cart() &&! is_account_page() && ! is_checkout() ) {
# Styles
wp_dequeue_style( 'woocommerce-general' );
wp_dequeue_style( 'woocommerce-layout' );
wp_dequeue_style( 'woocommerce-smallscreen' );
wp_dequeue_style( 'woocommerce_frontend_styles' );
wp_dequeue_style( 'woocommerce_fancybox_styles' );
wp_dequeue_style( 'woocommerce_chosen_styles' );
wp_dequeue_style( 'woocommerce_prettyPhoto_css' );
# Scripts
wp_dequeue_script( 'wc_price_slider' );
wp_dequeue_script( 'wc-single-product' );
wp_dequeue_script( 'wc-add-to-cart' );
wp_dequeue_script( 'wc-cart-fragments' );
wp_dequeue_script( 'wc-checkout' );
wp_dequeue_script( 'wc-add-to-cart-variation' );
wp_dequeue_script( 'wc-single-product' );
wp_dequeue_script( 'wc-cart' );
wp_dequeue_script( 'wc-chosen' );
wp_dequeue_script( 'woocommerce' );
wp_dequeue_script( 'prettyPhoto' );
wp_dequeue_script( 'prettyPhoto-init' );
wp_dequeue_script( 'jquery-blockui' );
wp_dequeue_script( 'jquery-placeholder' );
wp_dequeue_script( 'fancybox' );
wp_dequeue_script( 'jqueryui' );
}
}
}

Este código lo que hará es comprobar si tenemos activo el plugin de WooCommerce y luego desactivara los scripts y estilos en todas las páginas excepto en nuestras páginas de productos, carrito y pago.

Siempre ten en cuenta que antes de hacer cualquier cambio realizar una copia de seguridad de tu archivo original,

Con estas opciones podremos así mejorar la carga de nuestra página y evitar que estos scripts se ejecuten en páginas innecesarias.

¿Te ha resultado útil este artículo?

Hosting WPFácil