WooCommerce如何禁用重定向到我的帐户页面



我们有一个woodpress与WooCommerce(我们目前没有使用,但不想摆脱),当用户注册并按照设置密码说明,他们最终在oursite.com/wp-login.php

问题出现在他们登录时,因为他们被自动重定向到woocommerce的My Account页面。我们想把用户带到不同的页面。

是否可以禁用此WooCommerce功能?选择一个不同的页面,甚至去首页?

谢谢!

WooCommerce使用此过滤器强制重定向客户到my-account页面woocommerce_prevent_admin_access,因此您需要将false传递给此过滤器以禁用WooCommerce重定向

add_action(
'admin_init',
function() {
add_filter( 'woocommerce_prevent_admin_access', '__return_false', 100 );
},
1
);

之后可以使用login_redirect过滤器自定义登录后的wordpress重定向链接

WooCommerce有两个钩子用于注册和登录后的重定向:

<?php
/**
* Redirect to shop after login.
*/
add_filter( 'woocommerce_login_redirect', 'ywp_login_redirect', 1100, 2 );
function ywp_login_redirect( $redirect, $user ) {
if ( isset( $_GET['redirect_to'] ) ) {
$redirect = esc_url( $_GET['redirect_to'] );
} else {
$redirect = home_url();
}
return $redirect;
}
/**
* Redirect after registration.
*/
add_filter( 'woocommerce_registration_redirect', 'ywp_register_redirect' );
function ywp_register_redirect( $redirect ) {
if ( isset( $_GET['redirect_to'] ) ) {
$redirect = esc_url( $_GET['redirect_to'] );
} else {
$redirect = home_url();
}
return $redirect;
}

此代码也用于更改wp-admin/wp-login.php重定向:

add_filter( 'login_redirect', 'ywp_redirect_wp_login' );
function ywp_redirect_wp_login() {
if ( isset( $_GET['redirect_to'] ) ) {
$redirect = esc_url( $_GET['redirect_to'] );
} else {
$redirect = home_url();
}

return $redirect;
}

代码在您的活动主题/子主题的functions.php文件。测试和工作

我将使用它将用户重定向到主页:

add_filter( 'login_redirect', 'custom_login', 10, 3 );
function custom_login( ){
global $wp_query;
if (is_account_page()) {
wp_safe_redirect(home_url());
exit();
};
};

解决了,虽然我仍然不理解"架构"。…

为什么我必须在函数文件中使用额外的钩子强制重定向,而不是禁用WooCommerce的行为?

:)

/**
* Redirect user after successful login.
*
* @param string $redirect_to URL to redirect to.
* @param string $request URL the user is coming from.
* @param object $user Logged user's data.
* @return string
*/
function my_login_redirect( $redirect_to, $request, $user ) {
//is there a user to check?
if ( isset( $user->roles ) && is_array( $user->roles ) ) {
//check for admins
if ( in_array( 'administrator', $user->roles ) ) {
// redirect them to the default place
return $redirect_to;
} else {
//return home_url();
$redirect = get_page_link( 25159 );
return $redirect;
}
} else {
return $redirect_to;
}
}
add_filter( 'login_redirect', 'my_login_redirect', 10, 3 );

最新更新