WooCommerce

WooCommerce移除登出账户的确认提示

有时候,登出WooCommerce站点可能要分两步,先点登出链接,到一个确认登出界面,再点确认登出链接,才能退出账户。有点麻烦对吧,但这可能不是WooCommerce的锅。没错,WooCommerce确实设计了这个功能,但测试5.8.0版本,正常的退出是一次退出,没有确认过程,可能是你的主题代码没写对。

登出确认提醒

什么情况下会出现登出确认提醒

当你的登出链接如下所示,就会出现登出提醒

https://mysite.com/my-account/customer-logout

正常的登出链接是下面这样,后面带一个_wpnonce参数,有这个参数就会直接退出。这个链接可以通过wc_logout_url()函数获取。

https://mysite.com/my-account/customer-logout?_wpnonce=b9cae22851

说到底,就是WordPress要求用户的登出链接必须有一个用于安全检测的Nonce,Nonce是一个在加密通信只能使用一次的数字。你的链接里少了这个,通不过WordPress的检测,WooCommerce只好委婉的告诉你正确的链接是啥。

这段提醒的位置如下:

//class-wc-shortcode-my-account.php line 61
ob_start();

if ( isset( $wp->query_vars['customer-logout'] ) ) {
	/* translators: %s: logout url */
	wc_add_notice( sprintf( __( 'Are you sure you want to log out? <a href="%s">Confirm and log out</a>', 'woocommerce' ), wc_logout_url() ) );
}

// Collect notices before output.
$notices = wc_get_notices();

如何去掉登出确认提醒

如果你会读代码,可以看看主题是在哪把链接搞错的。实在找不到也可以硬来,在主题的functions.php里添加如下代码可以搞定。

// Source:https://wordpress.org/plugins/disable-woocom-logout-confirmation/
function disable_wc_logout_confirmation(){

    global $wp;
    
    if(isset($wp->query_vars['customer-logout'])){

        wp_redirect(str_replace('&amp;','&',wp_logout_url( wc_get_page_permalink('myaccount'))));
        
        exit;
    }
}

add_action('template_redirect', 'disable_wc_logout_confirmation');

参考文章:How to log out without confirmation ‘Do you really want to log out?”?