web-dev-qa-db-ja.com

ナビゲーションメニューに[ログアウト]リンクを追加

class="right"属性を使用してプライマリナビゲーションメニューへのリンクを追加する方法を教えてください。

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

15
Zach Russell

wp_nav_menu_itemsフックを使ってこれを達成することができます。 primaryメニューの場所にあるlogin/logoutリンクを示す次のコードを見てみましょう。

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"を使用しています。

この blog に詳しい説明があります。

35
Chittaranjan
2

私のフッターメニューは widget なので、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;
}
0
Ralf