Adding a login/logout link to any WP menu is very easy using the wp_nav_menu_items hook. In the Chamber Dashboard Member Manager plugin, we wanted to give our users an option to add the login/logout link to the selected menu of their choice.
There was an option to enable the login/logout link which would add the link to all the available menu’s on the site, but this was not ideal. So, I added another option where the admins can select the menu they want the link to be added to.
There are a couple of steps involved in this process.
Displaying the list of available menus
The first step was to display a list of registered nav menus’ on the site using get_registered_nav_menus() and display them as checkboxes.
[php]
function selected_menu_render($args){
$options = get_option( ‘plugin_options’ );
if(isset($options[‘selected_menu’])){
$selected_menu = $options[‘selected_menu’];
}else{
$selected_menu = array(); //This is important because if there are no menu’s selected, we want to initialize it to an empty array instead of a string.
}
$nav_menus = get_registered_nav_menus(); //gets the registered menu’s on the site
//Adding name="plugin_options[selected_menu][] – this is important because, if we don’t mention it as an array, multiple checkbox values will not be stored
//checked( in_array( $menu_name, $selected_menu ), 1 ) – This checks to see if the menu name is in the selected_menu array and if yes, the box is checked
if(!empty($nav_menus) && $nav_menus != ”){
foreach($nav_menus as $menu_name => $menu){
?>
<input id="cdashmm_selected_menu" type="checkbox" class="cdashmm_selected_menu" name="cdashmm_options[cdashmm_selected_menu][]" value=<?php echo $menu_name; ?> <?php checked( in_array( $menu_name, $cdashmm_selected_menu ), 1 ); ?> /><label name="cdashmm_selected_menu_label"><?php echo $menu; ?></label><br />
<?php
}
?>
<br />
<span class="description"><?php echo $args[0]; ?></span>
<?php
}
}
[/php]
How to add custom posts in WordPress using Ajax
Displaying the login/logout link
The second step is to check which menu location has been selected and add the login/logout link to that particular location.
[php]
function cdashmm_add_login_logout_link($items, $args){
$site_url = cdashmm_get_login_page_url(); //getting the login page url that has been set in the options page.
$options = get_option( ‘cdashmm_options’ ); //getting the plugin options
if(isset($options[‘cdashmm_selected_menu’])){
$selected_menu_locations = $options[‘cdashmm_selected_menu’];
}else{
$selected_menu_locations = ”;
}
if(cdashmm_enable_login_logout_link()){ //checking to see if the login/logout item needs to be added to the menu
if($site_url !=”){ //We wanted to add the link only if the login page url is set in the options page
if(isset($selected_menu_locations) && is_array($selected_menu_locations) && $selected_menu_locations != ”) {
foreach($selected_menu_locations as $location){
$menu_location = $location;
if( $args->theme_location == $menu_location ){
$items .= cdashmm_login_logout_link($site_url);
}
}
}else{
$items .= cdashmm_login_logout_link($site_url);
}
}
}
return $items;
}
[/php]
Here is the function that actually adds the link based on whether the user is logged in or not.
[php]
function cdashmm_login_logout_link($site_url){
if(!isset($items)){
$items = ”;
}
if ( cdashmm_is_user_logged_in() ){
$items .= ‘<li class="right cdashmm_login_logout_link"><a href="’. wp_logout_url(‘index.php’) .’">’. __("Log Out") .’</a></li>’;
} else {
$items .= ‘<li class="right cdashmm_login_logout_link"><a href="’. $site_url .’">’. __("Log In") .’</a></li>’;
}
return $items;
}
add_filter(‘wp_nav_menu_items’, ‘cdashmm_add_login_logout_link’, 10, 2);
[/php]
Get tips and tutorials on using the new block editor, WordPress themes and plugins!
[popup_trigger id=”10843″ tag=”button” classes=”button freebie_download”]Sign Up Now![/popup_trigger]