Avisos
Vaciar todo

WORDPRESS - TRANSIENTS  

 
Jose Carlos
 Jose Carlos
Usuario eminente

Hola buenas tardes.

Llevamos ya bastante tiempo teniendo problemas con las cantidades de algunos productos que tenemos en venta ya que sucede que de repente desaparecen las cantidades de determinados productos lo que los anula para su venta. Hemos detectado que realizando la siguiente accion en nuestra base de datos a traves de phpMyAdmin - SQL las cantidades vuelven a aparecer de inmediato!!!!;

 

DELETE FROM `wp_options` WHERE `option_name` LIKE '%_transient%';

 

Como podemos solucionar este problema? A que se debe?

Hemos insertado el siguiente codigo en el archivo functions teniendo igualmente activado el plugin Delete Expired Transients y tambien programada la limpieza de transients en Woocomerce - Herramientas pero no vemos que funcione correctamente;

 

// Función para limpiar transients de WooCommerce caducados
function clean_expired_woocommerce_transients() {
global $wpdb;

// Eliminar transients de WooCommerce caducados
$sql = "
DELETE FROM $wpdb->options
WHERE option_name LIKE '_transient_wc_%'
AND option_name NOT LIKE '_transient_timeout%'
AND option_value < NOW();
";
$wpdb->query($sql);

// Eliminar los tiempos de expiración de los transients de WooCommerce caducados
$sql = "
DELETE FROM $wpdb->options
WHERE option_name LIKE '_transient_timeout_wc_%'
AND option_value < UNIX_TIMESTAMP();
";
$wpdb->query($sql);
}

// Añadir intervalos personalizados al cron
function add_custom_cron_intervals( $schedules ) {
// Añadir un intervalo de 1 hora
$schedules['hourly'] = array(
'interval' => 3600, // 3600 segundos = 1 hora
'display' => __( 'Cada Hora' ),
);

// Añadir un intervalo de 6 horas
$schedules['six_hours'] = array(
'interval' => 21600, // 21600 segundos = 6 horas
'display' => __( 'Cada 6 Horas' ),
);

return $schedules;
}
add_filter( 'cron_schedules', 'add_custom_cron_intervals' );

// Programar un evento de Cron para limpiar transients de WooCommerce cada 6 horas
function schedule_woocommerce_transient_cleanup() {
if ( ! wp_next_scheduled( 'cleanup_woocommerce_transients_event' ) ) {
wp_schedule_event( time(), 'six_hours', 'cleanup_woocommerce_transients_event' );
}
}
add_action( 'wp', 'schedule_woocommerce_transient_cleanup' );

// Asociar la función de limpieza con el evento programado
add_action( 'cleanup_woocommerce_transients_event', 'clean_expired_woocommerce_transients' );

// Desprogramar el evento al desactivar el plugin o tema
function unschedule_woocommerce_transient_cleanup() {
$timestamp = wp_next_scheduled( 'cleanup_woocommerce_transients_event' );
if ( $timestamp ) {
wp_unschedule_event( $timestamp, 'cleanup_woocommerce_transients_event' );
}
}
register_deactivation_hook( __FILE__, 'unschedule_woocommerce_transient_cleanup' );

 

Muchas gracias

 

Saludos

 

Jose Carlos

Contenido solo visible a usuarios registrados

Citar
Respondido : 06/09/2024 5:06 pm
Argenis
 Argenis
Soporte CMS Webempresa Moderator

Hola Jose,

Veo que tienes wp rocket en tu lista de plugins instalados, verifica también con ingresar a WPRocket > database > Transients Cleanup, de igual forma parece que es un tema no muy común y que han tratado en otros foros por ejemplo:

https://stackoverflow.com/questions/31116753/delete-woocommerce-customer-sessions-and-transients-automatically

Indican tanto el plugin que tienes activo como el código, aunque un poco más corto que el que tienes, también uno que otro como este:

Contenido solo visible a usuarios registrados

De igual forma, si necesitas algún código personalizado para tu sitio, puedes consultar con nuestros colaboradores con gusto, pueden ingresar a tu sitio y proveerte de uno que funciona específicamente para lo que buscas.

Un saludo 🖐️ 

ResponderCitar
Respondido : 06/09/2024 6:40 pm

Cursos Gratuitos WordPress