Перенаправляет логин и регистрацию — не перенаправляет логин на странице оформления заказа в WooCommerce

#php #wordpress #redirect #woocommerce #checkout

#php #wordpress #перенаправление #woocommerce #Оформить покупку

Вопрос:

Мой код работает должным образом, но он не должен перенаправлять пользователя при входе на страницу оформления заказа.

Я использовал is_checkout() , чтобы попытаться обнаружить это, но это работает не так, как ожидалось.

 add_filter( 'woocommerce_login_redirect', 'bbloomer_customer_login_redirect', 9999, 2 );

function bbloomer_customer_login_redirect( $redirect ) {

    if ( is_checkout() ) {
        return '/checkout';
    } else {
        $redirect = '/my-account'; // custom URL same site
        return $redirect;
    }
}

// define the woocommerce_registration_redirect callback 
function filter_woocommerce_registration_redirect( $redirect ) { 
        $redirect = '/my-account'; // custom URL same site

        return $redirect;
 }

// add the filter 
add_filter( 'woocommerce_registration_redirect', 'filter_woocommerce_registration_redirect', 9999, 2 );
  

Ответ №1:

Этого должно быть достаточно

 function filter_woocommerce_login_redirect( $redirect, $user ) {
    // Checkout 
    if ( $redirect == wc_get_checkout_url() ) {
        $redirect = '/checkout';
    } else {
        // Get the "My account" url
        $redirect = get_permalink( wc_get_page_id( 'myaccount' ) );
    }
    
    return $redirect;
}
add_filter( 'woocommerce_login_redirect', 'filter_woocommerce_login_redirect', 10, 2 );

function filter_woocommerce_registration_redirect( $redirect ) {
    // Get the "My account" url
    $redirect = get_permalink( wc_get_page_id( 'myaccount' ) );
    
    return $redirect;
}
add_filter( 'woocommerce_registration_redirect', 'filter_woocommerce_registration_redirect', 10, 1 );
  

Комментарии:

1. Это не работает. Перенаправляет на белую страницу с тем же URL, на котором пользователь уже был. Проблема с моим кодом if ( is_checkout()) — по какой-то причине он не может определить, что он уже находится на странице оформления заказа.

2. $redirect == wc_get_checkout_url() будет true, если вы находитесь на странице оформления заказа, так что вы могли бы использовать это вместо is_checkout() . Что вы имеете в виду под «не перенаправлять» ? после входа вы все еще остаетесь на той же странице (оформления заказа), разве это не намерение? как уже применялось в вашем исходном коде