会員サイトを作った際に、ログインユーザーにはログアウト、ログアウトユーザーにはログインボタンを表示する方法の説明になります。
プラグインを使用せずに実装する方法なのでカスタマイズする際はバックアップを行ったうえで作業をしてください。
functions.phpに下記関数を追加
functions.php
add_filter( 'wp_nav_menu_items', 'add_loginout', 10, 2 );
function add_loginout( $items, $args ) {
if (is_user_logged_in() && $args->theme_location == 'メニュー名') {
$items .= '<li><a href="'. wp_logout_url(home_url()) .'">ログアウト</a></li>';
}
elseif (!is_user_logged_in() && $args->theme_location == 'メニュー名') {
$items .= '<li><a href="'. site_url('wp-login.php') .'">ログイン</a></li>';
}
return $items;
}
上記のコードのメニュー名の部分をご自身のメニューと合わせてください。
メニューは通常下記の様にfunctions.php内に記載してあるので下の例で説明するとmain-menuの部分と合わせる事で表示されるようになります。
functions.php
function register_my_menus(){
register_nav_menus(array(
'main-menu' => 'メインメニュー',
));
}
add_action('after_setup_theme', 'register_my_menus');
リダイレクトについて
その他、上記のログイン・ログアウト表示ではログアウト後にトップページにリダイレクトされますが、home_url()の部分をリダイレクト先に変更する事でどこに遷移させるか決める事も出来ますのでトップではなく別ページに遷移させたい場合は該当のURLを記入してください。
リダイレクト先URLを変更する別の方法
上記ではログインボタンを設置してリダイレクト先を変更する形ですが、functions.phpに下記関数を追加するとボタンを設置せずにリダイレクト先URLを変更する事が可能です。
functions.php
function login_redirect() {
wp_safe_redirect("https://example.com");
exit();
}
add_action('wp_login', 'login_redirect');
会員サイトなどを構築する際、管理者と購読者などで管理バー表示やログインページを表示させたくない時などに上記対策を試してみてはいかがでしょうか?
今回参考にさせて頂いた記事は下記になります。