Đoạn mã của bạn sẽ hoạt động tốt.
Trước hết, hình thức đăng nhập tùy chỉnh của bạn có thể không tôn trọng redirect_to
. wp-login.php
không, nhưng bạn cũng sẽ phải gửi redirect_to
đối số để wp-login.php
gửi biểu mẫu. Hiển thị mã cho mẫu đăng nhập của bạn.
Bạn cần cẩn thận với cách bạn sử dụng wp_redirect
. Nó hoạt động bằng cách gửi các tiêu đề:
<?php
/**
* Redirects to another page.
*
* @since 1.5.1
* @uses apply_filters() Calls 'wp_redirect' hook on $location and $status.
*
* @param string $location The path to redirect to
* @param int $status Status code to use
* @return bool False if $location is not set
*/
function wp_redirect($location, $status = 302) {
global $is_IIS;
$location = apply_filters('wp_redirect', $location, $status);
$status = apply_filters('wp_redirect_status', $status, $location);
if ( !$location ) // allows the wp_redirect filter to cancel a redirect
return false;
$location = wp_sanitize_redirect($location);
if ( !$is_IIS && php_sapi_name() != 'cgi-fcgi' )
status_header($status); // This causes problems on IIS and some FastCGI setups
header("Location: $location", true, $status);
}
Vì vậy, nếu các phần của trang của bạn đã được tải và bạn không sử dụng bộ đệm đầu ra , nó sẽ không hoạt động. Headers already sent
và tất cả các doanh nghiệp đó.
Nếu đó là trường hợp bạn có thể tốt hơn là chỉ hiển thị một thông báo có liên kết đến biểu mẫu đăng nhập hoặc hiển thị biểu mẫu đó (ví dụ. wp_login_form
).
Thứ hai, bạn phải luôn gọi exit
hoặc die
sau khi sử dụng wp_redirect
điều này khiến cho việc thực thi tập lệnh PHP (ví dụ: WordPress) kết thúc, gửi tiêu đề và bảo lãnh. Nếu không, những thứ tiếp theo xuống trang có thể giết chết các tiêu đề chuyển hướng của bạn.
<?php
wp_redirect(site_url('wp-login.php'));
exit;
Cuối cùng, nếu bạn định đưa máy chủ vào redirect_to
URL của mình, bạn nên bao gồm giao thức.
Bạn cũng có thể chỉ cần sử dụng $_SERVER['REQUEST_URI']
.
<?php
$url = add_query_arg('redirect_to', $_SERVER['REQUEST_URI'], site_url('wp-login.php'));
wp_redirect($url);
exit;
wp_redirect
để xem liệu đầu ra đã bắt đầu chưa, v.v.