「本当にログアウトしますか?」という確認なしでログアウトする方法


13

すぐにログアウトするとき:

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

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

確認後、ログアウト後にホームページにリダイレクトする方法は?

回答:


30

これは、チェックインされているURLに必要なnonceがないために発生します wp-login.php

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

wp_logout_urlノンスを含む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')

1
エコーwp_loginout( '/リダイレクト/ URL / /ここに行く')罰金..取り組んでいる
マユールDevmurari

1
私が使用wp_logout_url( get_permalink())していますが、確認ページはバイパスされません。ナンスは、URLの一部として生成されるが、私はまだ確認ページに送信されています
Ralphonz

ここに同じ問題:(
ジャーマーソン

15

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


これは検証なしでログアウトするために機能しますが、必要なURLにリダイレクトしません。
プーグエン

@PhuNguyenコロンの後に ''引用符があるコードのリダイレクトリクエストにリダイレクトURLを追加するだけです。
NJENGAH

この検証を削除すると、セキュリティに影響がありますか?
ロク

@ user1264304ブラウザーにロードされた悪意のあるJSがログインページにリダイレクトされる可能性があると思いますが、ユーザーがログアウトするだけです。本当に悪意のあるコードは、おそらく有効なノンスの前にURLを置き換えようとします。ユーザーは、現在のサイトのログアウトページへのリンクがある別のサイトに移動できます-他のサイトがユーザーの関係を認識していると仮定します。繰り返しますが、ユーザーをログアウトする以外の結果はありません。私はこれを見たことがありません。したがって、あなたの質問に答えるために、検証を削除することにセキュリティ上の意味があるとは思わない。
TonyG

errは、リダイレクトが多すぎます...
ソロモンClosson

3

メニューでカスタムリンクを作成する場合は、ラベルを“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();

参照リンク


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.