我已经为我的函数编写了此登录/注销。我的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;
}
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;
}