「ログアウト」リンクをナビゲーションメニューに追加します


16

class="right"属性を使用してプライマリナビゲーションメニューにリンクを追加するにはどうすればよいですか?

静的リンクを追加しようとしましたexample.com/wp-logout.php?action=logoutが、ログアウト確認ページが表示されます。ログアウトリンクにする方法はありますか?


1
このような既存の質問と回答を見たことがありますか?
fuxia

見たことあるwp_loginout()
カイザー14

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 Twenty Seventeen(child)テーマでは、これはtopメニューの場所でのみ機能しますif ($args->theme_location == 'top')
Iurieマライ

場所は私のために必要でした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つのスペースを使用してコードをフォーマットする必要があります(ヘルプを参照)。
ピーターHvD

ウェブサイトを宣伝しないでください。このコードブロックが当面の質問にどのように回答するか、どこに追加するのか、具体的に何をするのかについての説明を付けて、回答を編集してください。
Howdy_McGee
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.