Como sair sem confirmação 'Deseja realmente sair? "?

13

Agora, quando eu sair através de:

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

ele me redireciona para a página em que preciso confirmar o logout.

Como eliminar a confirmação e redirecionar para a página inicial após o logout?

Derfder
fonte

Respostas:

30

Isso acontece porque você está perdendo o nonce necessário na URL, que está sendo registrada wp-login.php

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

Use wp_logout_urlpara recuperar o URL, incluindo o nonce. Se você deseja redirecionar para um URL personalizado, simplesmente passe-o como argumento.

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

Você também pode usar o wp_loginoutque gera o link para você, incluindo tradução:

echo wp_loginout('/redirect/url/goes/here')
ndm
fonte
1
echo wp_loginout ('/ redirecionar / url / vai / aqui') está funcionando bem. #
Mayur Devmurari
1
Estou usando wp_logout_url( get_permalink())e a página de confirmação não é ignorada. O nonce é gerado como parte da URL, mas eu ainda sou enviado para a página de confirmação.
Ralphonz
Mesmo problema aqui :(
Jarmerson 14/04/19
15

Se você não pode usar a wp_logout_url()função, você pode desativar esta validação usando este código:

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

Substitua 'url-you-want-to-redirect'pela URL que você deseja redirecionar após o logout.

Adicione no seu functions.php

Дмитрий Шишов
fonte
Isso funciona para sair sem validação, mas não redireciona para o URL que eu quero.
Phu Nguyen
@PhuNguyen Você só precisa adicionar o URL de redirecionamento à solicitação de redirecionamento no código em que há aspas '', após os dois pontos.
NJENGAH
existem implicações de segurança para remover essa validação?
quer
@ user1264304 Acredito que, de alguma forma, o JS mal-intencionado carregado no navegador possa redirecionar para a página de login, mas tudo o que isso fará é desconectar o usuário. Um código verdadeiramente malicioso provavelmente tentaria substituir o URL antes de um nonce válido. O usuário pode navegar para outro site que, em seguida, possui um link para a página de logout do site atual - supondo que o outro site esteja ciente de que o usuário tem um relacionamento. Novamente, não há outra conseqüência além de desconectar o usuário. Eu nunca vi isso. Portanto, para responder sua pergunta, acho que não há uma implicação de segurança para remover a validação.
18780 TonyG #
Err, muitos redirecionamentos ...
Solomon Closson
3

Se você criar um link personalizado no seu menu, defina o rótulo como “Logout”e defina o URL como http://yourdomain.com/wp-login.php?action=logout. Em seguida, adicione esta função ao seu functions.phparquivo:

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

Se você deseja redirecionar para a página de login após o logout, adicione o URL de login como:

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

Link de referência

Gufran Hasan
fonte
-2

Isso funcionou para mim adicionando /?customer-logout=trueno final.

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

Stanley Tan
fonte