WordPress Cache ein Menü mit Transient API

Ich möchte ein Seitenmenü zwischenspeichern, das beim Laden der Seite ungefähr 50 Abfragen benötigt.

Im Moment habe ich Cache-Einstellungscode mit Transient API

 $housemenu = get_transient('housemenu_key'); if (!$housemenu) { $housemenu = wp_nav_menu( array( 'menu' => '', 'menu_class' => 'sf-menu', 'menu_id' => 'nav', 'walker' => new description_walker() ) ); echo 'not-set'; set_transient( 'housemenu_key', $housemenu, 60*60*3 ); } echo $housemenu; 

$housemenu = get_transient('housemenu_key'); gibt ein Nichts zurück. Wenn ich folgendes setze:

 $housemenu = 'return corrent'; echo 'not-set'; 

Alles funktioniert perfekt. Warum funktioniert dieses Menü nicht? Menü kann eine vorübergehende Gehhilfe sein?

Benutzen Sie: WordPress 3.8

Solutions Collecting From Web of "WordPress Cache ein Menü mit Transient API"

wp_nav_menu() gibt standardmäßig nichts zurück, es gibt nur formatierten HTML- wp_nav_menu() aus.

Für wp_nav_menu() , um einen Wert zurückzugeben, müssen Sie 'echo' => false in seine Argumente übergeben:

 $housemenu = wp_nav_menu( array( 'menu' => '', 'menu_class' => 'sf-menu', 'menu_id' => 'nav', 'walker' => new description_walker(), 'echo' => 'false' )); 

Es sollte angemerkt werden, dass durch das Zwischenspeichern des gesamten Menüs in einem Übergangszustand die dynamische Natur verloren geht. Zum Beispiel, wenn es auf Ihrer Homepage im Cache gespeichert wurde, werden alle aktiven classn, die auf die Menüpunkte angewendet wurden, IMMER die Homepage wiedergeben. Wenn Sie also eine andere Seite besuchen würden, wären die aktiven classn auf den Menüpunkten falsch.

Dies wird eine Menge Schmerzen verursachen, wenn Sie über CSS vermitteln möchten, auf welcher Seite der aktuelle Benutzer gerade ist.

Standardmäßig gibt wp_nav_menu() das Ergebnis zurück und gibt nichts zurück. Sie müssen in seinen Argumenten 'echo' => false , um das Verhalten umzukehren und das Ergebnis einer Variablen zuweisen zu können.

ein Problem existiert dort … WordPress hat eingebaute Seitenerkennung, um die CSS-classn der aktuellen Seite im Menü zu geben … und wenn zwischengespeichert wird, dann werden deine Navigationsmenü-Elemente niemals die “aktuelle-Seite” -class oder etc. bekommen. .

Es gibt jedoch 2 Lösungen:

Lösung 1

Fügen Sie vor dem Caching classn zu Elementen hinzu:

 function add_menu_atts( $atts, $item, $args ) { $atts['class'] = $item->type.'-'.$item->ID; return $atts; } add_filter( 'nav_menu_link_attributes', 'add_menu_atts', 8, 3 ); 

und dann das Menü zwischenspeichern … es wird eine solche Ausgabe haben:

  

Also, fügen Sie “current-item” -class von javascript (in der Seite Körper sollten Sie Variable an Javascript übergeben, um herauszufinden, ob Sie auf einem Post, Seite, Kategorie oder etc .. sind).

  

Lösung 2

für typische, nicht wp-Seiten. Ich habe versucht, ein JS-Skript zu kodieren, das das Problem lösen kann. Also, wenn Sie das Menü zwischenspeichern und “aktuelle-Menü-Element” -class erhalten möchten, dann legen Sie diese function in Ihrer Seite Quelle / Cache (besser am Ende des Körpers sein):

  or  

Fügen Sie diesen Code zunächst in den Header (besser in der .js-Datei) ein:

  

und bestimmen Sie den gewünschten Stil für die angehängte class