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
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:
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 🖐️