Wie erstelle ich eine andere Navigation für registrierte Benutzer in WooThemes Canvas?

Ich baue eine Website mit WordPress und dem Canvas Theme (von WooThemes).

Ich verwende die Top-Navigation zur Anzeige von Objekten, wenn ein Benutzer angemeldet ist. Wenn der Benutzer nicht angemeldet ist, können Sie nur “Mitglied werden” und “Anmelden” sehen. Wenn sich der Benutzer anmeldet, sieht er / sie eine andere Navigation mit anderen Menüpunkten.

Ich dachte an folgende Lösung:

  1. Registrieren Sie eine neue Navigation.
  2. Wenden Sie einen Haken an, der prüft, ob ein Benutzer angemeldet ist oder nicht
  3. Entsprechend dem Ergebnis, wenden Sie die Navigation für registrierte Benutzer an, sonst zeigen Sie andere.

Ich habe diesen Code in meine functions.php eingefügt:

add_action( 'init', 'register_top_menu_myisa', 10 ); function register_top_menu_myisa() { $menus = array( 'top-menu-myisa' => __( 'Top Menu MyISA', 'woothemes' ) ); register_nav_menus( $menus ); } add_action( 'woo_top', 'custom_top_navigation', 10 ); function custom_top_navigation() { if ( function_exists( 'has_nav_menu' ) && has_nav_menu( 'top-menu' ) ) { if(is_user_logged_in()) { $top_menu = 'top-menu-myisa'; } else { $top_menu = 'top-menu'; } echo '
'; echo '
'; echo '

' . woo_get_menu_name( $top_menu ) . '

'; wp_nav_menu( array( 'depth' => 6, 'sort_column' => 'menu_order', 'container' => 'ul', 'menu_id' => 'top-nav', 'menu_class' => 'nav top-navigation fl', 'theme_location' => $top_menu ) ); echo '
'; echo '
'; } }

Die erste function registriert die neue Navigation. Die zweite function enthält die Logik zur Entscheidung, welche Top-Navigation angezeigt werden soll.

Allerdings: Wenn ich meine Website anschaue, werden beide Menüs angezeigt (das Menü für nicht eingeloggte Benutzer und das für eingeloggte Benutzer). Zwei Navigationsmenüs werden angezeigt

Wie kann ich den Code so ändern, dass er ein oberes Navigationsmenü anzeigt, abhängig davon, ob der Benutzer angemeldet ist oder nicht?

Solutions Collecting From Web of "Wie erstelle ich eine andere Navigation für registrierte Benutzer in WooThemes Canvas?"

 add_action('init','wpsites_members_menu'); function wpsites_members_menu(){ if(is_user_logged_in()){ add_filter( 'wp_nav_menu_args' , 'logged_in_nav_menu' ); } } 

Anzeigen eines anderen Navigationsmenüs für angemeldete und angemeldete Benutzer

Quelle: http://wpsites.net/web-design/members-nav-menu-logged-in-members/

 function logged_in_nav_menu( $args ) { if ( $args['theme_location'] == 'primary' ) { $args['menu'] = 'members'; } return $args; } 

Ich habe das Problem selbst getriggers. Ich kenne die genaue Ursache nicht, aber ich werde genau erklären, was ich getan habe.

Ich habe WordPress 3.5 verwendet. Nachdem ich auf 3.6 aktualisiert habe, begann mein Navigationscode zu arbeiten. Es ist auch wichtig zu erwähnen, dass ich W3C Total Cache verwendet habe, diesen jedoch entfernt habe (bevor ich diesen Code WP_DEBUG ) und das WP_DEBUG Flag auf false . Ich habe W3C Total Cache nur deshalb entfernt, weil ich damit experimentiert habe.

Dies ist der endgültige Code:

 /* = Register the MyISA top navigation. ------------------------------------------------------------------------------------ */ add_action( 'init', 'isa_register_top_menu_myisa'); function isa_register_top_menu_myisa() { if(function_exists('has_nav_menu') && !has_nav_menu('top-menu-myisa')) { $menus = array( 'top-menu-myisa' => __('Top Menu MyISA', 'woothemes') ); register_nav_menus($menus); } } /* = Determine the top navigation to display. When a user is logged in, the MyISA top navigation is displayed. Otherwise the default top navigation wil be visible. ------------------------------------------------------------------------------------ */ add_action('woo_top', 'woo_top_navigation'); function woo_top_navigation() { if (function_exists('has_nav_menu') && has_nav_menu('top-menu')) { if(is_user_logged_in()) { $top_menu = 'top-menu-myisa'; } else { $top_menu = 'top-menu'; } echo '
'; echo '
'; echo '

' . woo_get_menu_name($top_menu) . '

'; wp_nav_menu( array( 'depth' => 6, 'sort_column' => 'menu_order', 'container' => 'ul', 'menu_id' => 'top-nav', 'menu_class' => 'nav top-navigation fl', 'theme_location' => $top_menu ) ); echo '
'; echo '
'; } }