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

29 июл. 2014 г., 21:54:34
Просмотры: 85.3K
Голосов: 19

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

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

6
Комментарии

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

fuxia fuxia
29 июл. 2014 г. 22:04:32

Вы видели функцию wp_loginout()?

kaiser kaiser
30 июл. 2014 г. 19:18:01

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

fuxia fuxia
31 июл. 2014 г. 02:13:36

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

Zach Russell Zach Russell
31 июл. 2014 г. 05:30:36

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

Vinod Dalvi Vinod Dalvi
16 апр. 2017 г. 10:40:06

Также можно использовать простой плагин: https://wordpress.org/plugins/login-or-logout-menu-item/ Он не перенаправляет на страницу подтверждения выхода.

Ray Meyer Ray Meyer
27 мая 2020 г. 11:12:51
Показать остальные 1 комментариев
Все ответы на вопрос 4
2
49

Вы можете реализовать это с помощью хука 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() .'">'. __("Выйти") .'</a></li>';
      } else {
         $items .= '<li class="right"><a href="'. wp_login_url(get_permalink()) .'">'. __("Войти") .'</a></li>';
      }
   }
   return $items;
}

Вот что мы реализовали в приведенном выше примере:

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

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

30 июл. 2014 г. 10:19:10
Комментарии

@timo-s В дочерней теме Twenty Seventeen это будет работать только с расположением меню top: if ($args->theme_location == 'top').

Iurie Iurie
2 сент. 2017 г. 23:59:25

в моем случае необходимо было указать расположение primary-menu

Toskan Toskan
3 сент. 2017 г. 07:08:05
1

Попробуйте добавить пользовательскую ссылку с http://example.com/wp-login.php?action=logout У меня сработало!

13 нояб. 2016 г. 21:12:32
Комментарии

Это выводит пользователю сообщение "Вы уверены, что хотите выйти?", так как отсутствует nonce.

random_user_name random_user_name
10 июл. 2017 г. 21:28:34
0

Если вы не против использования плагина для добавления этой функциональности, можно воспользоваться: https://wordpress.org/plugins/login-logout-register-menu/

Он просто добавляет удобный раздел в конструкторе меню. Его можно комбинировать с другим плагином для ограничения видимости пунктов меню: какие показывать вошедшим пользователям, какие — вышедшим, а какие — всем.

Плагин для входа, выхода и регистрации в меню WordPress

16 июл. 2020 г. 21:01:50
0

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

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) .'">'. __("Выход") .'</a></li>';
        } else {
            $items .= '<li class="right"><a href="'. wp_login_url($loginlink) .'">'. __("Вход") .'</a></li>';
        }
    }
    return $items;
}
3 сент. 2018 г. 16:17:31