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


16

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

Intenté agregar un enlace estático example.com/wp-logout.php?action=logoutpero 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?


1
¿Has visto preguntas y respuestas existentes como esta ?
fuxia

¿Has visto wp_loginout()?
kaiser

2
He eliminado la respuesta aceptada, porque fue plagiada de este sitio sin atribución.
fuxia

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

Puede usar este complemento gratuito wordpress.org/plugins/login-logout-register-menu para lograr lo mismo fácilmente.
Vinod Dalvi

Respuestas:


39

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

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_itemshook y le asignó una función.
  2. Después de verificar la primaryubicación del tema, hemos verificado si el usuario inició sesión o no.
  3. Si ha iniciado sesión, hemos mostrado el Log Outenlace; de ​​lo contrario, el Log In enlace.
  4. Hemos pasado el enlace permanente de la página que está viendo actualmente a la URL de inicio de sesión para que el usuario sea redirigido a la página actual después de iniciar sesión correctamente.
  5. Hemos utilizado el class="right"código anterior para cumplir con sus requisitos.

Puede encontrar una explicación detallada en este blog .


@ timo-s En el tema Twenty Diecisiete (niño) sólo funcionará con una topubicación del menú: if ($args->theme_location == 'top').
Iurie Malai

ubicación debe ser para míprimary-menu
Toskan


0

Mi menú de pie de página es un widget , por lo tanto, tuve dificultades para usar el código de Chittaranjan. La siguiente versión editada me funciona. También cambié los enlaces y los hice "dinámicos": el inicio de sesión lleva a una página de su elección, el cierre de sesión permanecerá en la página actual o se enviará a inicio, si la página actual es su página de inicio de sesión (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;
}

-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;
}

Debe formatear su código usando 4 espacios al comienzo de cada línea (consulte la ayuda).
Peter HvD

Por favor no anuncie su sitio web. Edite su respuesta con una explicación sobre cómo este bloque de código responde la pregunta en cuestión, dónde agregarla y qué hace específicamente.
Howdy_McGee
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.