Додайте посилання "Вихід" у меню навігації


16

Як я можу додати посилання на основне меню навігації з class="right"атрибутом?

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


1
Ви бачили наявні питання та відповіді, як цей ?
fuxia

Ви бачили wp_loginout()?
кайзер

2
Я видалив прийняту відповідь, оскільки вона була плагіатована з цього сайту без атрибуції.
фуксія

Я в кінцевому рахунку використовував щось подібне; принаймні за допомогою функції loginout (). Я опублікую саме те, що я зробив наступного разу, коли я перебуваю перед комп'ютером. Дякуємо @toscho
Zach Russell

Ви можете використовувати цей безкоштовний плагін 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
Тоскан


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) .'">'. __("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 пробіли на початку кожного рядка (див. Довідку).
Пітер HvD

Будь ласка, не рекламуйте свій веб-сайт. Будь ласка, відредагуйте свою відповідь з поясненням того, як цей блок коду відповідає на відповідне питання, куди його додати та що конкретно він робить.
Howdy_McGee
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.