Как выйти без подтверждения «Вы действительно хотите выйти?»?

13

Прямо сейчас, когда я выхожу через:

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

он перенаправляет меня на страницу, где мне нужно подтвердить выход из системы.

Как убрать подтверждение и перенаправить на домашнюю страницу после выхода?

Derfder
источник

Ответы:

30

Это происходит потому, что вы пропустили необходимый одноразовый номер в URL, который проверяется в wp-login.php

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

Используйте wp_logout_urlдля того, чтобы получить URL, включая nonce. Если вы хотите перенаправить на пользовательский 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
echo wp_loginout ('/ redirect / url / идет / здесь') работает нормально ..
Mayur Devmurari
1
Я пользуюсь wp_logout_url( get_permalink())и страница подтверждения не обойдена. Одноразовый номер генерируется как часть URL, но я все еще отправляюсь на страницу подтверждения
Ralphonz
Та же проблема здесь :(
Jarmerson
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
О, слишком много перенаправлений ...
Соломон Клоссон
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();

Ссылка ссылка

Гуфран Хасан
источник
-2

Это сработало для меня, добавив /?customer-logout=trueв конце.

http://www.website.com/?customer-logout=true

Стэнли Тан
источник