Как динамически изменить только основное меню Wordpress при входе в систему? - PullRequest
0 голосов
/ 11 июня 2018

Я использую приведенный ниже код, чтобы показать меню, называемое «вход в систему», когда пользователь вошел в систему, и меню, названное «выход из системы», когда они вышли из системы.Но на моих страницах у меня есть главное меню и дополнительное меню.Этот код меняет оба меню на идентичные.Я хотел бы, чтобы мое вторичное меню не менялось в зависимости от статуса входа в систему, и менялось только мое основное меню.Спасибо.

function my_wp_nav_menu_args( $args = '' ) {

if( is_user_logged_in() ) { 
    $args['menu'] = 'logged-in';
} else { 
    $args['menu'] = 'logged-out';
} 
    return $args;
}
add_filter( 'wp_nav_menu_args', 'my_wp_nav_menu_args' );

Мне кажется, что это находится в этой части кода, но я не уверен, что поместить в часть $ args [''].

$args['menu'] = 'logged-in';

1 Ответ

0 голосов
/ 12 июня 2018

Вам нужно указать местоположение меню, которое вы хотите изменить, иначе оно будет работать везде, где wp_nav_menu_args запущено.Для этого просто оберните код в оператор if, проверяя наличие установленного theme_location.

В зависимости от вашей темы, название местоположения может измениться, поэтому подтвердите это;Обычно это будет что-то вроде primary.

function my_wp_nav_menu_args( $args = '' ) {

if( $args['theme_location'] == 'primary' ){
    if( is_user_logged_in() ) { 
        $args['menu'] = 'logged-in';
    } else { 
        $args['menu'] = 'logged-out';
    }
}
    return $args;
}
add_filter( 'wp_nav_menu_args', 'my_wp_nav_menu_args' );

Ниже я сделал вашу функцию более лаконичной, но она выполняет то же самое:

add_filter( 'wp_nav_menu_args', 'logged_in_out_menu' );
function logged_in_out_menu( $args ){
    if( $args['theme_location'] == 'primary' ){
        // Only run this modification on the `primary` nave menu
        $args['menu'] = is_user_logged_in() ? 'logged-in' : 'logged-out';
    }

    return $args;
}
...