Site logo

Archived topic

Dynamic login/logout item in menu

3 replies · Started by mkjj on July 28, 2021

Viewing posts 1–4 of 4

I would like to add a dynamic login/logout item to the main menu. Users that are logged-out should see "login", logged-in users should see "logout". The logout item has a submenu. This can easily be done with a standard WP filter:

function add_login_logout_register_menu( $items, $args ) {
  $login = home_url( '/login/' );
  $logout = home_url( '/login/' );
  if ( $args->theme_location == 68 ) {
    return $items;
  }
  if ( is_user_logged_in() ) {
    $items .= '<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children"><a href="' . $logout . '">' . __( 'Logout' ) . '</a>
    <ul class="sub-menu">
    <li class="menu-item menu-item-type-post_type menu-item-object-page"><a href="https://doriskirch.de/meine-kurse/">Meine Kurse</a></li>
    </ul></li>';
  }
  else {
    $items .= '<li><a href="' . $login . '">' . __( 'Login' ) . '</a></li>';
  }
  return $items;
} 
add_filter( 'wp_nav_menu_items', 'add_login_logout_register_menu', 199, 2 );

The only problem is that I don't see the dropdown arrow that opens the subitem.

The standard menu uses a SVG like so:

<span role="presentation" class="dropdown-menu-toggle">
<span class="gp-icon icon-arrow">
<svg viewBox="0 0 330 512" aria-hidden="true" role="img" version="1.1"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
width="1em" height="1em">
<path d="M305.913 197.085c0 2.266-1.133 4.815-2.833 6.514L171.087..."
</svg>
</span>
</span>

Can this be done automatically? Or would I have to put this into the filter? I guess, I would need a different code for the mobile menu.

I understand, if this is beyond the scope of a support forum. I could live with two top level items, if the submenu would be too messy.

Hi there,

just a suggestion but there is this filter:

https://developer.wordpress.org/reference/hooks/wp_setup_nav_menu_item/

Which allows you to change the Menu Title text ( amongst other things ) - and considering its only the text you want to change it may be better option to use this on a standard menu item, which should have no issues with the sub menu.

Tried finding an easy example of it in use - and this is 'simplest' i could find:

https://stackoverflow.com/a/62691239

It should give you some idea of its usage.

Hi,

pretty good idea. I hadn't thought of that. Your solution is better for this simple task.

As always, magnificent support! Thank you!

Glad to be of help!

This archived topic is closed to new replies.