Добавить ссылку «Выход» в меню навигации


16

Как добавить ссылку в основное навигационное меню с class="right"атрибутом?

Я пытался добавить статическую ссылку, example.com/wp-logout.php?action=logoutно это приводит к странице подтверждения выхода из системы. Есть ли способ сделать ссылку выхода из системы?


1
Вы видели существующие вопросы и ответы, как этот ?
fuxia

Ты видел wp_loginout()?
Кайзер

2
Я удалил принятый ответ, потому что он был плагиат с этого сайта без указания авторства.
fuxia

Я закончил тем, что использовал что-то подобное; по крайней мере, используя функцию loginout (). Я опубликую точно, что я сделал в следующий раз, когда я нахожусь перед моим компьютером. Спасибо @toscho
Зак Рассел

Вы можете использовать этот бесплатный плагин wordpress.org/plugins/login-logout-register-menu, чтобы легко добиться того же.
Винод

Ответы:


39

Вы можете добиться этого с помощью wp_nav_menu_itemsкрючка. Давайте посмотрим на следующий фрагмент кода, который показывает ссылку на вход / выход из системы в 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;
}

Это то, что мы реализовали в приведенном выше примере.

  1. Сначала добавили фильтр для wp_nav_menu_itemsловушки и прикрепили к нему функцию.
  2. После проверки primaryместоположения темы мы проверили, вошел ли пользователь в систему или нет.
  3. Если вы вошли в систему, мы показали Log Outссылку в противном случае Log In ссылку.
  4. Мы передали постоянную ссылку просматриваемой в настоящее время страницы на URL-адрес входа в систему, чтобы пользователь был перенаправлен на текущую страницу после успешного входа.
  5. Мы использовали приведенный class="right"выше код для удовлетворения ваших требований.

Вы можете найти подробное объяснение в этом блоге .


@ Timo-s В (ребенок) тема двадцать Семнадцать это будет работать только с topадресом меню: if ($args->theme_location == 'top').
Юрий Малай,

место должно быть для меняprimary-menu
Toskan


0

Мое меню нижнего колонтитула является виджетом , поэтому я столкнулся с трудностями при использовании кода Читтаранджана. Следующая отредактированная версия работает для меня. Я также изменил ссылки и сделал их «динамическими»: вход в систему ведет на выбранную вами страницу, выход из системы либо останется на текущей странице, либо будет отправлен на домашнюю страницу, если текущая страница является вашей (частной) страницей входа. В идеале было бы проверить, является ли ваша страница входа на самом деле частной, но я не знаю, как это сделать, извините.

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

Вам необходимо отформатировать код, используя 4 пробела в начале каждой строки (см. Справку).
Peter HvD

Пожалуйста, не рекламируйте свой сайт. Пожалуйста, отредактируйте свой ответ с объяснением того, как этот блок кода отвечает на поставленный вопрос, где его добавить и что конкретно он делает.
Howdy_McGee
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.