web-dev-qa-db-ja.com

確認せずにログアウトするには「本当にログアウトしますか?」

今ログアウトしたとき:

<a href="<?php bloginfo('url'); ?>/wp-login.php?action=logout">Log out</a>

ログアウトを確認する必要があるページにリダイレクトされます。

ログアウト後に確認を削除してホームページにリダイレクトする方法

11
Derfder

これは、wp-login.phpでチェックインされているURLに必要なナンスがないために起こります。

case 'logout' :
    check_admin_referer('log-out');
    ...

Nonceを含むURLを取得するためにwp_logout_urlを使用してください。カスタムURLにリダイレクトしたい場合は、単にそれを引数として渡します。

<a href="<?php echo wp_logout_url('/redirect/url/goes/here') ?>">Log out</a>

翻訳を含むリンクを生成するwp_loginoutを使用することもできます。

echo wp_loginout('/redirect/url/goes/here')
27
ndm

wp_logout_url()関数を使用できない場合は、次のコードを使用してこの検証を無効にすることができます。

add_action('check_admin_referer', 'logout_without_confirm', 10, 2);
function logout_without_confirm($action, $result)
{
    /**
     * Allow logout without confirmation
     */
    if ($action == "log-out" && !isset($_GET['_wpnonce'])) {
        $redirect_to = isset($_REQUEST['redirect_to']) ? $_REQUEST['redirect_to'] : 'url-you-want-to-redirect';
        $location = str_replace('&amp;', '&', wp_logout_url($redirect_to));
        header("Location: $location");
        die;
    }
}

'url-you-want-to-redirect'をログアウト後にリダイレクトしたいURLに置き換えます。

functions.phpに追加してください

メニューにカスタムリンクを作成する場合は、ラベルを“Logout”に設定し、URLをhttp://yourdomain.com/wp-login.php?action=logoutに設定します。次に、この関数をあなたのfunctions.phpファイルに追加してください。

function change_menu($items){
  foreach($items as $item){
    if( $item->title == "Logout"){
         $item->url = $item->url . "&_wpnonce=" . wp_create_nonce( 'log-out' );
    }
  }
  return $items;

}
add_filter('wp_nav_menu_objects', 'change_menu');

ログアウト後にログインページにリダイレクトしたい場合は、ログインURLを次のように追加する必要があります。

$item->url = $item->url . "&_wpnonce=" . wp_create_nonce( 'log-out' ).'&redirect_to='.wp_login_url();

参照リンク

3
Gufran Hasan