如果检测到用户未登录,则默认的Woocommerce结帐行为会通过在结帐页面上显示“创建帐户”框来打破许多网络约定。新用户可能不知道该做什么而没有任何添加的说明。
我想要的顺序是:
用户结帐>检查登录>
这完全是在WooCommerce login redirect based on cart的情况
但是,我感到不舒服的是,在上述情况下,一旦用户登录,如果购物车不为空,他/她将被重定向到结账页面。如果用户的购物车不是空的,即使他/她不想结帐,他/她也根本无法去MyAccount。
对这一个有什么想法吗?谢谢大家先进。
在第二个答案中有一个问题,在登录用户总是重定向结帐页面后,它不会站在我的帐户页面上,直到购物车变空! 这是DEMO的解决方案。 如果用户未登录,此代码会将用户重定向到我的帐户页面以进行登录而不是结帐,然后在登录后自动重定向到结帐页面。 步骤1: 在function.php中添加此代码
add_action('template_redirect','check_if_logged_in');
function check_if_logged_in()
{
$pageid = 68; // your checkout page id
if(!is_user_logged_in() && is_page($pageid))
{
$url = add_query_arg(
'redirect_to',
get_permalink($pagid),
site_url('/my-account/') // your my acount url
);
wp_redirect($url);
exit;
}
}
第2步: 在/wp-content/plugins/woocommerce/templates/myaccount/my-account.php的末尾添加此代码
<?php
$quark_web_solution_redirect = $_GET['redirect_to'];
if (isset($quark_web_solution_redirect)) {
echo '<script>
window.location.href = "'.$quark_web_solution_redirect.'";
</script>';
}
?>
这篇文章来自Quark Web Solution的开发者。 谢谢!!
在function.php中添加此代码
add_action('template_redirect','check_if_logged_in');
function check_if_logged_in()
{
$pageid = 68; // your checkout page id
if(!is_user_logged_in() && is_page($pageid))
{
$url = add_query_arg(
'redirect_to',
get_permalink($pagid),
site_url('/my-account/') // your my acount url
);
wp_redirect($url);
exit;
}
}
在阅读了这篇文章以及Stackoverflow中的其他人之后,我想出了一个简单的解决方案(比起我想的更多)对我有用......也许是我在这个过程中错过的东西,但我测试了几个组合和这个对我有用。所以我们想:
首先,我使用[woocommerce_my_account]短代码创建了一个自定义页面。在这里我定制了文本等...在表单中,所以它与我的帐户页面有点不同。此页面的URL路径是 - > / iniciar-sesion-registrarse。
然后,我将此代码放在我的子主题的functions.php中:
function custom_woocommerce_login_redirect_to_checkout_page() {
// Caso 1: Usuario no identificado intenta acceder a Finalizar Compra
if ( !is_user_logged_in() && is_checkout() )
wp_redirect( get_permalink( get_page_by_path('iniciar-sesion-registrarse') ) );
// Caso 2: Si en la página de identificarse, el cliente ha accedido o se ha registrado, o tiene el carrito vacío, continuar a Finalizar Compra.
if ( is_page('iniciar-sesion-registrarse') ) {
if( is_user_logged_in() || WC()->cart->is_empty() ) {
wp_redirect( get_permalink( get_page_by_path('finalizar-comprar') ) );
}
}
}
add_action( 'template_redirect', 'custom_woocommerce_login_redirect_to_checkout_page' );
所以在案例1中:如果用户没有登录并尝试去结账,它会重定向到我的自定义登录页面'iniciar-sesion-registrarse'。然后在案例2中:如果用户登录或在此页面注册,我的帐户页面将显示在此页面中,然后我重定向登录并在此页面中的用户结帐。如果有人直接访问这个自定义页面并且在他们的购物车中没有任何内容,我也会将它们重定向到结帐(所以woocommerce消息:你不能在你的购物车中没有商品的结帐)。
这样,在此自定义页面中登录或注册时,错误消息将正常显示,就像它是真正的“我的帐户”页面一样,但一旦登录,它将重定向到结帐。
我希望有人可以告诉我,如果我在这个过程中遗漏了什么。谢谢