Agregue el enlace "Cerrar sesión" al menú de navegación

14

¿Cómo puedo agregar un enlace al menú de navegación principal con el atributo class="right" ?

Intenté agregar un enlace estático a example.com/wp-logout.php?action=logout pero eso lleva a una página de confirmación de cierre de sesión. ¿Hay alguna forma de convertirlo en un enlace de cierre de sesión?

    
pregunta Zach Russell 29.07.2014 - 20:54

4 respuestas

34

Puedes lograr esto usando el gancho wp_nav_menu_items . Echemos un vistazo al siguiente fragmento de código que muestra el enlace de inicio de sesión / cierre de sesión en la ubicación del menú primary .

add_filter( 'wp_nav_menu_items', 'wti_loginout_menu_link', 10, 2 );

function wti_loginout_menu_link( $items, $args ) {
   if ($args->theme_location == 'primary') {
      if (is_user_logged_in()) {
         $items .= '<li class="right"><a href="'. wp_logout_url() .'">'. __("Log Out") .'</a></li>';
      } else {
         $items .= '<li class="right"><a href="'. wp_login_url(get_permalink()) .'">'. __("Log In") .'</a></li>';
      }
   }
   return $items;
}

Esto es lo que hemos implementado en el ejemplo anterior.

  1. Primero agregó un filtro para wp_nav_menu_items hook y adjuntó un funciona para ello.
  2. Después de verificar la ubicación del tema primary , hemos verificado si el usuario ha iniciado sesión o no.
  3. Si ha iniciado sesión, hemos mostrado el enlace Log Out ; de lo contrario, Log In enlace.
  4. Hemos pasado el enlace permanente de la página que se está viendo actualmente a iniciar sesión url para que el usuario sea redirigido a la página actual después de inicio de sesión exitoso.
  5. Hemos utilizado el class="right" para el código anterior para cumplir con su requisito.

Puede encontrar una explicación detallada en este blog .

    
respondido por el Chittaranjan 30.07.2014 - 09:19
2

Intente agregar un enlace personalizado con enlace ¡Me funcionó!

    
respondido por el Marcelo Oliveira 13.11.2016 - 20:12
0

El menú de mi pie de página es un widget , por lo que tuve dificultades para usar el código de Chittaranjan. La siguiente versión editada funciona para mí. También cambié los enlaces y los hice "dinámicos": el inicio de sesión conduce a una página de su elección, el cierre de sesión se mantendrá en la página actual o se enviará a casa, si la página actual es su página de inicio (privada). Lo ideal sería verificar si su página de inicio de sesión es realmente privada, pero no sé cómo hacerlo, lo siento.

add_filter( 'wp_nav_menu_items', 'wti_loginout_menu_link', 10, 2 );

function wti_loginout_menu_link( $items, $args ) {
    //var_dump($args);
    if (($args->menu->slug == 'footer')) {
        if (is_user_logged_in()) {
            $loginlink = '/your-private-page';
            $logoutlink = get_permalink();
            if (strpos($logoutlink, $loginlink) !== false) {
                $logoutlink = '/';
            }
            $items .= '<li class="right"><a href="'. wp_logout_url($logoutlink) .'">'. __("Log Out") .'</a></li>';
        } else {
            $items .= '<li class="right"><a href="'. wp_login_url($loginlink) .'">'. __("Log In") .'</a></li>';
        }
    }
    return $items;
}
    
respondido por el Ralf 03.09.2018 - 15:17
-2
add_filter( 'wp_nav_menu_items', 'add_loginout_link', 15, 5 );

function add_loginout_link( $menus, $args ) {

  if (is_user_logged_in() && $args->theme_location == 'primary') {

   $menus .= '<li><a href="'. wp_logout_url( get_permalink( woocommerce_get_page_id( 'myaccount' ) ) ) .'">Log Out</a></li>';
    }

  elseif (!is_user_logged_in() && $args->theme_location == 'primary') {

   $menus .= '<li><a href="' . get_permalink( woocommerce_get_page_id( 'myaccount' ) ) . '">Log In</a></li>';
  }

  return $menus;
}
    
respondido por el Ankush Samyal 30.08.2018 - 12:00

Lea otras preguntas en las etiquetas