wp_nav_menu + wpml + transients
wp_nav_menu
este o funcție din WordPress ce afișează un meniu. Problema este că, în combinație cu WPML*, este lent. Al dracului de lent! Dacă în producție nu e nici o problemă (caching), când dezvolți un site este o problemă să aștepți câteva secunde la încărcare. Prin urmare, orice optimizare se poate face, este binevenită.
Am dat azi de articolul ăsta care mi-a adus aminte de o chestie pe care am încercat-o și eu la un moment dat, dar de care am uitat cu desăvârșire (deh, am avut și norocul de a face câteva proiecte fără WPML).
Prin urmare, avem așa:
function wp_nav_menu_cached( $options = array() ){ $shouldNotEcho = ( isset( $options['echo'] ) && !$options['echo'] ); $options['echo'] = false; $cache_key = apply_filters( 'ntz/wp_nav_menu_cache_name', ( 'wp_nav_menu_cached' . ICL_LANGUAGE_NAME ) ); $cache = get_transient( $cache_key ); $cachedMenu = isset( $cache[ $options['menu'] ] ) ? $cache[ $options['menu'] ] : false; if( !$cachedMenu ){ $cache[ $options['menu'] ] = wp_nav_menu( $options ); set_transient( $cache_key, $cache, WEEK_IN_SECONDS ); } if( $shouldNotEcho ) { return $cache[ $options['menu'] ]; }else { echo $cache[ $options['menu'] ]; } } function wp_nav_menu_clear_cache() { $cache_key = apply_filters( 'ntz/wp_nav_menu_cache_name', ( 'wp_nav_menu_cached' . ICL_LANGUAGE_NAME ) ); delete_transient( $cache_key ); } add_action( 'wp_update_nav_menu', 'wp_nav_menu_clear_cache' );
Foarte ușor de folosit, în loc de wp_nav_menu
folosești wp_nav_menu_cached
. Opțiunile din codex rămân valabile.
*Pentru cine nu știe, WPML este singura soluție de luat în seamă când vine vorba de WordPress multilanguage. Din păcate este și extrem de prost scris: extrem de lent, clase interminabile (9500+ linii), metode pe măsură (500+ linii), aproape imposibil de extins fără a modifica și codul plugin-ului șamd.
EDIT
Dan a ridicat o problemă foarte importantă: având cache la meniuri va fi imposibil de indicat pagina curentă. Ăsta a fost și motivul pentru care am „uitat” de această metodă.
- Posted in:
- WordPress
- Tags:
- WordPress,
- WordPress tricks