Bagaimana cara keluar tanpa konfirmasi 'Apakah Anda benar-benar ingin keluar? "

13

Saat ini ketika saya keluar melalui:

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

itu mengarahkan saya ke halaman di mana saya perlu mengkonfirmasi logout.

Bagaimana cara menghilangkan konfirmasi dan mengalihkan ke beranda setelah keluar?

Derfder
sumber

Jawaban:

30

Hal ini terjadi karena Anda kehilangan data penting dalam URL, yang sedang diperiksa wp-login.php

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

Gunakan wp_logout_urluntuk mengambil kembali URL termasuk nonce. Jika Anda ingin mengarahkan ulang ke URL khusus, cukup kirimkan sebagai argumen.

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

Anda juga dapat menggunakan wp_loginoutyang menghasilkan tautan untuk Anda termasuk terjemahan:

echo wp_loginout('/redirect/url/goes/here')
ndm
sumber
1
echo wp_loginout ('/ redirect / url / goes / here') berfungsi dengan baik ..
Mayur Devmurari
1
Saya menggunakan wp_logout_url( get_permalink())dan halaman konfirmasi tidak dilewati. Nonce dihasilkan sebagai bagian dari URL tetapi saya masih dikirim ke halaman konfirmasi
Ralphonz
Masalah yang sama di sini :(
Jarmerson
15

Jika Anda tidak dapat menggunakan wp_logout_url()fungsi, Anda dapat mematikan validasi ini menggunakan kode ini:

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;
    }
}

Ganti 'url-you-want-to-redirect'dengan URL yang ingin Anda redirect setelah keluar.

Tambahkan di functions.php

Дмитрий Шишов
sumber
Ini berfungsi untuk keluar tanpa validasi, tetapi tidak mengarahkan ke url yang saya inginkan.
Phu Nguyen
@ PhuNguyen Anda hanya perlu menambahkan redirect URL ke permintaan redirect dalam kode di mana ada tanda kutip, setelah titik dua.
NJENGAH
Adakah implikasi keamanan untuk menghapus validasi ini?
rok
@ user1264304 Saya percaya JS jahat entah bagaimana dimuat ke dalam browser bisa melakukan redirect ke halaman login, tetapi semua yang akan dilakukan adalah logout pengguna. Kode yang benar-benar berbahaya mungkin akan berusaha untuk mengganti URL sebelum ada yang valid. Pengguna dapat menavigasi ke situs lain yang kemudian memiliki tautan halaman keluar situs saat ini - dengan asumsi situs lain sadar bahwa pengguna memiliki hubungan. Sekali lagi, tidak ada konsekuensi selain keluar dari pengguna. Saya belum pernah melihat ini. Jadi untuk menjawab pertanyaan Anda, Saya tidak berpikir ada implikasi keamanan untuk menghapus validasi.
TonyG
Err, Terlalu Banyak Pengalihan ...
Solomon Closson
3

Jika Anda membuat tautan khusus di menu Anda, atur label ke “Logout”, dan atur URL ke http://yourdomain.com/wp-login.php?action=logout. Kemudian tambahkan fungsi ini ke functions.phpfile Anda :

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');

Jika Anda ingin mengalihkan ke halaman login setelah logout maka Anda harus menambahkan URL login sebagai:

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

Tautan referensi

Gufran Hasan
sumber
-2

Ini berhasil bagi saya dengan menambahkan /?customer-logout=truedi akhir.

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

Stanley Tan
sumber