Agregar enlace "Cerrar sesión" al menú de navegación

29 jul 2014, 21:54:34
Vistas: 85.3K
Votos: 19

¿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 manera de convertirlo en un enlace directo de cierre de sesión?

6
Comentarios

¿Has visto preguntas y respuestas existentes como esta?

fuxia fuxia
29 jul 2014 22:04:32

¿Has visto wp_loginout()?

kaiser kaiser
30 jul 2014 19:18:01

He eliminado la respuesta aceptada porque estaba plagiada de este sitio sin atribución.

fuxia fuxia
31 jul 2014 02:13:36

Terminé usando algo similar; al menos usando la función loginout(). Publicaré exactamente lo que hice la próxima vez que esté frente a mi computadora. Gracias @toscho

Zach Russell Zach Russell
31 jul 2014 05:30:36

Puedes usar este plugin gratuito https://wordpress.org/plugins/login-logout-register-menu/ para lograr lo mismo fácilmente.

Vinod Dalvi Vinod Dalvi
16 abr 2017 10:40:06

También puedes hacer uso de un plugin simple: https://wordpress.org/plugins/login-or-logout-menu-item/ No te lleva a la página de confirmación de cierre de sesión.

Ray Meyer Ray Meyer
27 may 2020 11:12:51
Mostrar los 1 comentarios restantes
Todas las respuestas a la pregunta 4
2
49

Puedes lograr esto usando el hook wp_nav_menu_items. Veamos el siguiente fragmento de código que muestra el enlace de login/logout 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() .'">'. __("Cerrar Sesión") .'</a></li>';
      } else {
         $items .= '<li class="right"><a href="'. wp_login_url(get_permalink()) .'">'. __("Iniciar Sesión") .'</a></li>';
      }
   }
   return $items;
}

Esto es lo que hemos implementado en el ejemplo anterior.

  1. Primero añadimos un filtro para el hook wp_nav_menu_items y adjuntamos una función a él.
  2. Después de verificar la ubicación del tema primary, comprobamos si el usuario ha iniciado sesión o no.
  3. Si ha iniciado sesión, mostramos el enlace Cerrar Sesión, de lo contrario mostramos el enlace Iniciar Sesión.
  4. Pasamos el enlace permanente (permalink) de la página actual a la URL de login para que el usuario sea redirigido a la página actual después de un inicio de sesión exitoso.
  5. Usamos class="right" en el código anterior para cumplir con tu requerimiento.

Puedes encontrar una explicación detallada sobre esto en este blog.

30 jul 2014 10:19:10
Comentarios

@timo-s En el tema hijo de Twenty Seventeen esto solo funcionará con una ubicación de menú top: if ($args->theme_location == 'top').

Iurie Iurie
2 sept 2017 23:59:25

para mí la ubicación necesaria era primary-menu

Toskan Toskan
3 sept 2017 07:08:05
1

Intenta agregar un enlace personalizado con http://example.com/wp-login.php?action=logout ¡Funcionó para mí!

13 nov 2016 21:12:32
Comentarios

Esto le presenta al usuario el mensaje "¿Estás seguro de que deseas cerrar sesión?", debido a que falta el nonce.

random_user_name random_user_name
10 jul 2017 21:28:34
0

Si tienes flexibilidad para agregar un plugin y obtener esta funcionalidad, podrías usar: https://wordpress.org/plugins/login-logout-register-menu/

Simplemente añade una sección muy conveniente en el constructor de menús. Puedes combinarlo con otro plugin para restringir qué elementos del menú se muestran a usuarios registrados, cuáles a usuarios no registrados y cuáles a todos.

Menú de inicio de sesión, cierre de sesión y registro en WordPress

16 jul 2020 21:01:50
0

Mi menú de pie de página es un widget, por lo que tuve dificultades al 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 lleva a una página de tu elección, el cierre de sesión permanecerá en la página actual o redirigirá a la página de inicio si la página actual es tu página de inicio de sesión (privada). Idealmente, verificaría si tu 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 = '/tu-pagina-privada';
            $logoutlink = get_permalink();
            if (strpos($logoutlink, $loginlink) !== false) {
                $logoutlink = '/';
            }
            $items .= '<li class="right"><a href="'. wp_logout_url($logoutlink) .'">'. __("Cerrar Sesión") .'</a></li>';
        } else {
            $items .= '<li class="right"><a href="'. wp_login_url($loginlink) .'">'. __("Iniciar Sesión") .'</a></li>';
        }
    }
    return $items;
}
3 sept 2018 16:17:31