Adicione o link "Logout" ao menu de navegação


16

Como posso adicionar um link ao menu de navegação principal com o class="right"atributo?

Tentei adicionar um link estático, example.com/wp-logout.php?action=logoutmas isso leva a uma página de confirmação de logout. Existe alguma maneira de torná-lo um link de logout?


1
Você já viu perguntas e respostas existentes como esta ?
fuxia

Você viu wp_loginout()?
Kaiser

2
Eu removi a resposta aceita, porque foi plagiada deste site sem atribuição.
fuxia

Acabei usando algo semelhante; pelo menos usando a função loginout (). Vou postar exatamente o que fiz da próxima vez que estiver na frente do meu computador. Obrigado @toscho
Zach Russell

Você pode usar este plugin gratuito wordpress.org/plugins/login-logout-register-menu para obter o mesmo facilmente.
Vinod Dalvi

Respostas:


39

Você pode conseguir isso usando o wp_nav_menu_itemsgancho. Vamos dar uma olhada no seguinte trecho de código que mostra o link de login / logout no primarylocal do menu.

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

Isso é o que implementamos no exemplo acima.

  1. Primeiro adicionou um filtro para wp_nav_menu_itemsgancho e anexou uma função a ele.
  2. Após verificar a primarylocalização do tema, verificamos se o usuário está logado ou não.
  3. Se estiver logado, mostramos o Log Outlink, caso contrário, o Log In link.
  4. Passamos o link permanente da página atualmente visualizada para o URL de login, para que o usuário seja redirecionado para a página atual após o login bem-sucedido.
  5. Utilizamos class="right"o código acima para atender às suas necessidades.

Você pode encontrar uma explicação detalhada neste blog .


@ timo-S na (criança) tema Vinte Seventeen isso vai funcionar apenas com a toplocalização do menu: if ($args->theme_location == 'top').
Iurie Malai

local precisava ser para mimprimary-menu
Toskan


0

Meu menu de rodapé é um widget , portanto, tive dificuldades em usar o código de Chittaranjan. A seguinte versão editada funciona para mim. Também mudei os links e os tornei "dinâmicos": o login leva a uma página de sua escolha, o logout permanece na página atual ou é enviado para casa, se a página atual for sua página de login (privada). O ideal seria verificar se sua página de login é realmente privada, mas não sei como fazer isso, desculpe.

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

Você precisa formatar seu código usando 4 espaços no início de cada linha (consulte a ajuda).
precisa saber é o seguinte

Por favor, não anuncie seu site. Edite sua resposta com uma explicação sobre como esse bloco de código responde à pergunta em questão, onde adicioná-lo e o que especificamente ele faz.
Howdy_McGee
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.