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...")
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

← ritorno a 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_%'");
});