如何在没有确认的情况下注销?您真的要注销吗?

时间:2012-10-06 作者:Derfder

现在,当我通过以下方式注销时:

<a href="<?php bloginfo(\'url\'); ?>/wp-login.php?action=logout">Log out</a>
它会将我重定向到需要确认注销的页面。

如何在注销后取消确认并重定向到主页?

5 个回复
最合适的回答,由SO网友:ndm 整理而成

发生这种情况的原因是您在正在签入的URL中缺少必要的noncewp-login.php

case \'logout\' :
    check_admin_referer(\'log-out\');
    ...
使用wp_logout_url 以检索包含nonce的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\')

SO网友:Дмитрий Шишов

如果你不能使用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

SO网友:Gufran Hasan

如果在菜单中创建自定义链接,请将标签设置为“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();

Reference link

** 尝试了但没有成功。真的想注销第4页,然后单击按钮时出现问题。

SO网友:JKL

如果您使用的是roots/sage wordpress入门主题,或任何其他使用Laravel刀片模板引擎的主题,请确保不要转义url:

// don\'t do
<a href="{{ wp_logout_url(get_permalink()) }}">log out</a>

// but instead
<a href="{!! wp_logout_url(get_permalink()) !!}">log out</a>
第一个示例转义所有html字符,而后者不转义。

SO网友:Stanley Tan

通过添加/?customer-logout=true 在最后。

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

结束