web-dev-qa-db-fra.com

Comment créer une navigation différente pour les utilisateurs enregistrés dans WooThemes Canvas?

Je construis un site Web avec Wordpress et le thème de toile (de WooThemes).

J'utilise la navigation du haut pour afficher les éléments lorsqu'un utilisateur est connecté. Lorsque l'utilisateur n'est pas connecté, vous ne pouvez voir que "devenir membre" et "se connecter". Lorsque l'utilisateur se connecte, il/elle voit une autre navigation avec d'autres éléments de menu.

J'ai pensé à la solution suivante:

  1. enregistrer une nouvelle navigation.
  2. appliquer un hook qui vérifie si un utilisateur est connecté ou non
  3. Selon le résultat, appliquez la navigation pour les utilisateurs enregistrés, sinon affichez autre.

Je mets ce code dans mon functions.php :

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 '<div id="top">';
    echo '<div class="col-full">';
    echo '<h3 class="top-menu">' . woo_get_menu_name( $top_menu ) . '</h3>';
    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 '</div>';
    echo '</div>';
    }
}

La première fonction enregistre la nouvelle navigation. La deuxième fonction contient la logique permettant de décider quelle navigation en haut doit être affichée.

Cependant: lorsque je regarde mon site, il affiche les deux menus (celui des utilisateurs non connectés et celui des utilisateurs connectés)  Two navigation menu's displayed

Comment puis-je modifier le code afin qu'il affiche un menu de navigation supérieur, en fonction du type d'utilisateur connecté ou non?

1
Nazeem

J'ai résolu le problème moi-même. Je ne connais pas la cause exacte, mais je vais expliquer exactement ce que j'ai fait.

J'utilisais Wordpress 3.5. Après avoir mis à jour la version 3.6, mon code de navigation a commencé à fonctionner. Il est également important de mentionner que j'ai utilisé le cache total du W3C, mais que je l'ai supprimé (avant d'appliquer ce code), et que l'indicateur WP_DEBUG a pour valeur false. J'ai supprimé le cache total du W3C uniquement parce que je l'expérimentais.

C'est le code final:

/* = 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 '<div id="top">';
        echo '<div class="col-full">';
        echo '<h3 class="top-menu">' . woo_get_menu_name($top_menu) . '</h3>';

        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 '</div>';
        echo '</div>';
    }
}
0
Nazeem
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' );
}
}

Afficher un menu de navigation différent pour les utilisateurs connectés et déconnectés

Source: 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;
}
0
Brad Dalton