登录时使用其他菜单

时间:2013-08-30 作者:Steeven

在更新到WP 3.6之前,我可以在标题中添加此代码。主题的php,这使得登录时可以有另一个菜单:

        <?php
        if( is_user_logged_in() ) {
            $menu = \'logged-in\';
        } else {
            $menu = \'logged-out\';
        }

        wp_nav_menu( array(
            \'menu\'              => $menu,
            \'theme_location\'    => \'menu\',
            \'sort_column\'       => \'menu_order\',
            \'menu_class\'        => \'sf-menu\',
            \'fallback_cb\'       => \'default_menu\'
        )); ?>
我已经在WP管理面板中创建了两个名为“登录”和“注销”的菜单。

但在更新之后,这就不起作用了。以正确的方式登录时,如何更改菜单?

(附言:主题是WPExplorer的Adapt主题。)

Note:

实际上,我所需要的只是更改菜单中的一个特定按钮,因此用户登录时会有所不同-在这种情况下,菜单按钮将是“成员配置文件”按钮,而不是“登录”按钮。如果可以在不改变整个菜单的情况下完成,那就更好了。

2 个回复
最合适的回答,由SO网友:gmazzap 整理而成

实际上,我所需要的只是更改菜单中的一个特定按钮,因此用户登录时会有所不同-在这种情况下,菜单按钮将是“成员配置文件”按钮,而不是“登录”按钮

是的,您只能使用一个菜单,假设它的slug是“my\\u menu”,请不要添加到它的成员配置文件或登录url,而是使用wp_nav_menu_{$menu_slug}_items 过滤器:

// \'my_menu\' in filter name is the slug of the menu
add_filter(\'wp_nav_menu_my_menu_items\', \'menu_add_admin_buttons\', 20, 2); 

function menu_add_admin_buttons( $items, $args ) {
  $btn_format = \'<li><a href="%s">%s</a></li>\';
  if ( is_user_logged_in() ) {
    $btn = sprintf($btn_format, admin_url(\'profile.php\'), __(\'Your Profile\') );
  } else {
    $btn = sprintf($btn_format, wp_login_url(), __(\'Log In\') );
  }
  return $items . $btn;
}
$items 是当前菜单项的当前html,该字符串包含一系列<li><a ... </a></li>.

菜单的slug等于sanitize_title($menu_name) i、 e.它删除所有特殊字符,将重音字符转换为非重音字符,并将空格转换为-.

E、 g.如果名称为“Main Menu”,则slug为“Main Menu”。

菜单的名称是创建菜单时在wp后端写入的名称,请参见下图。

enter image description here

当然可以使用sanitize_title 从名称创建过滤器,例如。

$menu_filter = \'wp_nav_menu_\' . sanitize_title("Main Menu") . \'_items\';
add_filter($menu_filter, \'menu_add_admin_buttons\', 20, 2); 

SO网友:ferne97

还可以尝试更改主题位置。您如何注册菜单?你可以试试这个。。

功能。php

<?php
function register_menus() {
    register_nav_menus(array(
        \'logged-in\'  => \'Logged In Nav\',
        \'logged-out\' => \'Logged Out Nav\'
    ));
}

add_action( \'init\', \'register_menus\' );
?>
标题。php

<?php
if ( is_user_logged_in() ) {
    $menu      = \'logged-in\';
    $menu_name = \'Logged In Nav\';
} else {
    $menu      = \'logged-out\';
    $menu_name = \'Logged Out Nav\';
} ?>

<nav role="navigation">
    <?php
    wp_nav_menu( array(
        \'menu\'              => $menu_name,
        \'theme_location\'    => $menu,
        \'sort_column\'       => \'menu_order\',
        \'menu_class\'        => \'sf-menu\',
        \'fallback_cb\'       => \'default_menu\'
    ));
    ?>
</nav>
没有测试,只是一个想法。

此外,如果您想使用您提到的一个菜单进行尝试,您可以使用body类来定位这些特定的链接。

<body <?php body_class(); ?>>
这将向正文中添加类,如果用户登录,则会添加“登录”类。没有注销类,因此您可以隐藏只向登录用户显示的类,然后在用户登录时显示。

.menu-item-101 { /* hide for logged out users */
    display: none;
}

.logged-in .menu-item-101 { /* show for logged in users */
    display: block;
}

.logged-in .menu-item-102 { /* only show to logged out users */
    display: none;
}

结束

相关推荐

Redirect After Login Error

我为不同的语言设置了三个登录页面(这就是我们为了各种原因而设置网站的方式)。我们已登录wp。php,wp-login\\u cn。php(中文)和wp-login\\u jp。php(日语)。除了出现登录错误外,一切正常。例如,如果用户输入了错误的密码,他们将被重定向到“wp login”。php“无论他们在哪个登录页面上。我很确定它在WordPress的后端/核心文件中,因为我在wp登录的实际PHP代码中再也看不到这种重定向。php文件。有人知道我如何防止页面重定向到wp登录吗。php何时出现在其他语言