仅限WordPress登录/注销单一菜单

时间:2014-09-12 作者:TheDizzle

我已经为我的函数编写了此登录/注销。我的wordpress主题中的php。问题是,它在所有主菜单和次菜单中都显示了登录/注销链接。有没有办法让它只出现在次要位置?

add_filter(\'wp_nav_menu_items\', \'add_login_logout_link\', 10, 2);
function add_login_logout_link($items, $args) {

    ob_start();
    wp_loginout(\'index.php\');
    $loginoutlink = ob_get_contents();
    ob_end_clean();

    $items .= \'<li>\'. $loginoutlink .\'</li>\';

return $items;
}
这就是我最终使用的:

add_filter(\'wp_nav_menu_items\', \'add_login_logout_link\', 10, 2);
function add_login_logout_link($items, $args) {
if( $args->theme_location == \'top-menu\' ) {
    ob_start();
    wp_loginout(\'index.php\');
    $loginoutlink = ob_get_contents();
    ob_end_clean();
    $items .= \'<li>\'. $loginoutlink .\'</li>\';
}
return $items;
}

3 个回复
SO网友:Gabriel

将过滤器挂钩更改为wp_nav_menu_{menu-name}_items, 因此,它只能在特定菜单上运行。例如,如果菜单名为“Secondary”,请使用挂钩wp_nav_menu_secondary_items, 或者,如果菜单名为“Top Navigation”,请使用wp_nav_menu_top-navigation_items (将菜单名称中的空格替换为破折号)。

假设菜单名为“Secondary”(菜单名,而不是主题位置),则更新后的代码为:

add_filter(\'wp_nav_menu_secondary_items\', \'add_login_logout_link\', 10, 2);
function add_login_logout_link($items, $args) {    
    ob_start();
    wp_loginout(\'index.php\');
    $loginoutlink = ob_get_contents();
    ob_end_clean();         
    $items .= \'<li>\'. $loginoutlink .\'</li>\';    
    return $items;
}

SO网友:eyoung100

Nilamber建议:

/**
 * Add Login/Logout to Menu
 */
function add_login_logout_link($items, $args) {
    if( $args->theme_location == \'primary\' ) {
        $loginoutlink = wp_loginout(\'index.php\', false);
        $items .= \'<li>\'. $loginoutlink .\'</li>\';
    }

    return $items;
}
add_filter(\'wp_nav_menu_items\', \'add_login_logout_link\', 10, 2);
另请注意,使用此功能,theme_location 不能为空。arg检查消除了在过滤器中更改菜单名称的需要。

SO网友:Domain

正如Nilamber所建议的,您必须检查$args中定义的参数。下面的代码可以工作,但您可以轻松地修改它。

add_filter( \'wp_nav_menu_items\', \'add_loginout_link\', 10, 2 );

function add_loginout_link( $items, $args ) {
if (is_user_logged_in() && $args->theme_location == \'primary\') {
    $items .= \'<li><a href="\'. wp_logout_url() .\'">Log Out</a></li>\';
}
elseif (!is_user_logged_in() && $args->theme_location == \'primary\') {
    $items .= \'<li><a href="\'. site_url(\'wp-login.php\') .\'">Log In</a></li>\';
}
return $items;
}

结束

相关推荐

有没有办法完全绕过wp-login.php登录?

我有一个WP安装,在过去的几天里,它一直受到暴力登录尝试的打击。该站点安装了限制登录尝试插件。当我开始频繁收到关于停工的通知时,我决定,因为我只访问wp-login.php 文件和wp-admin 从一个地方屏蔽除我自己的via之外的所有IP.htaccess. 我已经测试了.htaccess 通过从例外列表中删除我的IP来阻止,它确实阻止了对wp登录的访问。php。因此,从这一方面来看,这似乎是可行的。然而,即使IP被阻止,限制登录尝试仍会报告(频繁)来自IP的锁定。我觉得这很奇怪,因为.htacces