Cache del menu di navigazione multilingua (WPML) (WordPress)
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_%'");
});