Cache del menu di navigazione multilingua (WPML) (WordPress)
Versione del 6 ago 2026 alle 07:40 di Andrea (discussione | contributi) (Creata pagina con "← ritorno a WordPress Category:WordPress Questo codice implementa una cache del menu di navigazione multilingua (WPML) per ridurre le query al database...")
Questo codice implementa una cache del menu di navigazione multilingua (WPML) per ridurre le query al database.
Snippet di codice PHP, esegui ovunque
// Cache dell'HTML del menu multilingua per evitare le query ripetute WPML
add_filter('pre_wp_nav_menu', function($output, $args) {
$lang = apply_filters('wpml_current_language', null);
$cache_key = 'nav_menu_cache_' . md5(serialize($args) . $lang);
$cached = get_transient($cache_key);
if ($cached !== false) {
return $cached;
}
return null; // nessuna cache trovata, procede normalmente
}, 10, 2);
add_filter('wp_nav_menu', function($nav_menu, $args) {
$lang = apply_filters('wpml_current_language', null);
$cache_key = 'nav_menu_cache_' . md5(serialize($args) . $lang);
set_transient($cache_key, $nav_menu, 12 * HOUR_IN_SECONDS);
return $nav_menu;
}, 10, 2);
// Svuota la cache quando il menu viene modificato dal cliente
add_action('wp_update_nav_menu', function() {
global $wpdb;
$wpdb->query("DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_nav_menu_cache_%' OR option_name LIKE '_transient_timeout_nav_menu_cache_%'");
});