Як вийти без підтвердження "Ви дійсно хочете вийти?"


13

Зараз, коли я виходжу через:

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

він перенаправляє мене на сторінку, на якій мені потрібно підтвердити вихід.

Як усунути підтвердження та перенаправити на головну сторінку після виходу?

Відповіді:


31

Це трапляється тому, що вам не вистачає потрібного поняття в URL-адресі, в яку ви перевіряєтесь 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
echo wp_loginout ('/ redirect / url / go / here') працює нормально ..
Mayur 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.
Phu Nguyen

@PhuNguyen Вам просто потрібно додати URL-адресу переадресації до запиту на переадресацію в тому коді, де є двокрапки після двокрапки.
NJENGAH

Чи є якісь наслідки для безпеки для видалення цієї перевірки?
rok

@ 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.