Chuyển hướng người dùng đến URL trước đó sau khi login thành công

Đoạn code sau đây sinh ra để giải quyết vấn đề sau khi login thành công thì sẽ điều hướng người dùng về trang trước đó, ví dụ bạn đang ở trang giới thiệu , sau đó bạn click vào đăng nhập, đăng nhập xong thì nó sẽ quay về lại trang giới thiệu.

Như mọi người đang dùng là khi đăng nhập, hay đăng ký thành công xong thì sẽ điều hướng trực tiếp đến trang quản lý tài khoản hoặc điều hướng đến một đường dẫn cố định mà người quản trị đó muốn.

Nếu như bạn đang ở trang chuyên mục sản phẩm, mà chuyên mục đó có nhiều phân trang cho sản phẩm đó, khách của bạn đang xem sản phẩm ở page 10 thì khi login sẽ về trang tài khoản hoặc trang bất kì, điều đó sẽ gây khó chịu cho người dùng. Thay vì về trang quản lý tài khoản thì sẽ đến ngay lại trang vừa xem sản phẩm đó.

add_action('woocommerce_login_form_end', 'bbloomer_actual_referrer');
function bbloomer_actual_referrer()
{
  if (!wc_get_raw_referer()) return;
  echo '<input type="hidden" name="redirect" value="' . wp_validate_redirect(wc_get_raw_referer(), wc_get_page_permalink('myaccount')) . '" />';
}

 

Trên thực tế, WooCommerce đã in một trường nhập ẩn (“_wp_http_referer“) trong biểu mẫu đăng nhập nhờ wp_nonce_field (), nhưng vì một số lý do, điều này không đủ để cho phép chuyển hướng thực sự.

Rất may, hàm WooCommerce process_login () cung cấp một giải pháp khác: nếu $ _POST [‘redirect’] được đặt, biểu mẫu sẽ xem xét chuyển hướng đến URL này thay vì Trang tổng quan tài khoản của tôi mặc định! Điều này có nghĩa là chúng tôi có thể chỉ cần thêm một trường ẩn mới vào biểu mẫu đăng nhập với tên chính xác đó (“chuyển hướng”), để chúng tôi có thể làm cho chức năng đó kích hoạt chuyển hướng mà chúng tôi muốn.