Cum să te deconectezi fără confirmarea 'Chiar vrei să te deconectezi?'?
În prezent când mă deconectez prin:
<a href="<?php bloginfo('url'); ?>/wp-login.php?action=logout">Deconectare</a>
sunt redirecționat către o pagină unde trebuie să confirm deconectarea.
Cum pot elimina confirmarea și să fiu redirecționat către pagina principală după deconectare?

Acest lucru se întâmplă pentru că lipsește nonce-ul necesar în URL, care este verificat în wp-login.php
case 'logout' :
check_admin_referer('log-out');
...
Folosește wp_logout_url
pentru a obține URL-ul care include nonce-ul. Dacă dorești să redirecționezi către un URL personalizat, pur și simplu treci acel URL ca argument.
<a href="<?php echo wp_logout_url('/redirect/url/goes/here') ?>">Deconectare</a>
De asemenea, poți folosi wp_loginout
care generează link-ul pentru tine, inclusiv traducerea:
echo wp_loginout('/redirect/url/goes/here')

echo wp_loginout('/redirect/url/goes/here') funcționează corect..

Folosesc wp_logout_url( get_permalink())
dar pagina de confirmare nu este ocolită. Nonce-ul este generat ca parte din URL dar tot sunt redirecționat către pagina de confirmare

Dacă nu poți folosi funcția wp_logout_url()
, poți dezactiva această validare folosind următorul cod:
add_action('check_admin_referer', 'logout_without_confirm', 10, 2);
function logout_without_confirm($action, $result)
{
/**
* Permite delogarea fără confirmare
*/
if ($action == "log-out" && !isset($_GET['_wpnonce'])) {
$redirect_to = isset($_REQUEST['redirect_to']) ? $_REQUEST['redirect_to'] : 'url-unde-dorești-redirecționarea';
$location = str_replace('&', '&', wp_logout_url($redirect_to));
header("Location: $location");
die;
}
}
Înlocuiește 'url-unde-dorești-redirecționarea'
cu URL-ul către care dorești să redirecționezi după delogare.
Adaugă acest cod în fișierul tău functions.php

Aceasta funcționează pentru deconectare fără validare, dar nu redirecționează către URL-ul dorit.

@PhuNguyen Trebuie doar să adaugi URL-ul de redirecționare la cererea de redirecționare în acel cod unde sunt ghilimelele ' ', după două puncte.

există implicații de securitate pentru eliminarea acestei validări?

@user1264304 Cred că un cod JS rău intenționat încărcat în browser ar putea face o redirecționare către pagina de login, dar tot ce va face este să deconecteze utilizatorul. Un cod cu adevărat rău intenționat ar încerca probabil să înlocuiască URL-ul înainte de un nonce valid. Utilizatorul ar putea naviga pe un alt site care apoi are un link către pagina de logout a site-ului curent - presupunând că celălalt site este conștient că utilizatorul are o relație. Din nou, nicio consecință în afară de deconectarea utilizatorului. Nu am văzut niciodată asta. Deci, ca răspuns la întrebarea ta, cred că Nu există o implicație de securitate pentru eliminarea validării.

Soluție excelentă pentru mine, mai ales pentru că nu necesită PHP suplimentar pe pagina mea de logout. Pur și simplu folosesc acest link: wp-login.php?action=logout Și ca redirecționare, folosesc home_url() așa că funcționează pe orice site.

Putem folosi cu siguranță wp_logout_url. Și iată ce ai nevoie:
$location = str_replace('&', '&', wp_logout_url($redirect_to));
Doar redirecționează către acea $location și te vei deconecta fără confirmare.

Aceasta este o soluție excelentă pentru mine, dar am observat că nu se face redirecționarea. Sunt pur și simplu trimis înapoi pe pagina principală...

Dacă creați un link personalizat în meniu, setați eticheta la „Logout”
și URL-ul la http://domeniultau.com/wp-login.php?action=logout
. Apoi adăugați această funcție în fișierul 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');
Dacă doriți să redirecționați către pagina de autentificare după deconectare, trebuie să adăugați URL-ul de autentificare astfel:
$item->url = $item->url . "&_wpnonce=" . wp_create_nonce( 'log-out' ).'&redirect_to='.wp_login_url();
** am încercat asta dar nu a funcționat. Chiar vreau să fie o pagină de deconectare, apoi 4 ceva nu a mers bine când am dat click pe buton.

Aceasta a funcționat complet pentru mine, inclusiv redirecționarea. Trebuie să fii atent să folosești formatarea corectă PHP pentru a adăuga un link. Iată codul meu pentru acea linie: $item->url = $item->url . "&_wpnonce=" . wp_create_nonce( 'log-out' ).'&redirect_to='.'https://google.com';

Dacă folosești tema WordPress roots/sage sau orice altă temă care utilizează motorul de template-uri Blade din Laravel, asigură-te că nu escape-ui URL-ul:
// nu face așa
<a href="{{ wp_logout_url(get_permalink()) }}">deconectare</a>
// ci așa
<a href="{!! wp_logout_url(get_permalink()) !!}">deconectare</a>
Primul exemplu escape-uiă toate caracterele HTML, în timp ce cel de-al doilea nu.

Foloseam funcția wp_logout_url()
pentru a obține URL-ul de deconectare, dar tot apărea confirmarea. Am descoperit că funcția convertesc caractere precum &
în &
, ceea ce strică parametrii din URL. Am rezolvat problema folosind:
html_entity_decode( wp_logout_url() )

Asta este mult hacking. Ce zici de asta: https://wpsandbox.net/wordpress/custom-logout-link-wordpress-p1498
