Móc nào nên được sử dụng để thêm một hành động có chứa chuyển hướng?


16

Tôi muốn xây dựng một plugin lấy các tham số url nhất định từ chuỗi truy vấn để xây dựng chuỗi truy vấn mới cho cùng một trang. Tôi đang theo dõi cuốn sách Phát triển Plugin WordPress chuyên nghiệp xuất sắc, nhưng tôi không chắc nên sử dụng hook nào cho hành động này. Đây là chức năng hành động của tôi:

add_action( 'init', 'tccl_redirect' );
function tccl_redirect() {
    header ( "Location: http://www.mysite.com/$mypage?$newparam=$newvalue" );
?>

Những móc nào phù hợp cho chuyển hướng tiêu đề?


Bạn có thực sự muốn thay đổi URL cuối cùng hay chỉ các biến được sử dụng trong WP_Query?
Scribu

Mã bạn đã đăng về cơ bản sẽ chuyển hướng mọi trang, đó có phải là điều bạn muốn không? Trong những điều kiện nên chuyển hướng này xảy ra? LƯU Ý: Dù sao tôi cũng đã có 1 kaiser, template_redirectcũng sẽ là đề xuất của tôi.
t31os

scribu, tôi muốn thay đổi url và chuỗi truy vấn cuối cùng.
jnthnclrk

t31os, tôi đã đơn giản hóa mã của mình cho câu hỏi. Điều thực sự chứa nhiều điều kiện hơn.
jnthnclrk

Kết quả là gì? Đánh dấu một giải pháp xin vui lòng.
kaiser

Câu trả lời:



17

Tôi muốn nói template_redirect. Nhưng hãy xem Tham khảo hành động .

Thí dụ

Đừng quên exit()chuyển hướng.

/**
 * This example redirects everything to the index.php page
 * You can do the same for the dashboard with admin_url( '/' );
 * Or simply base the redirect on conditionals like 
 * is_*() functions, current_user_can( 'capability' ), globals, get_current_screen()...
 * 
 * @return void
 */
function wpse12535_redirect_sample() {

    exit( wp_redirect( home_url( '/' ) ) );

}

add_action( 'template_redirect', 'wpse12535_redirect_sample' );

8

Nhưng tôi sẽ nói ví dụ này từ kaiser không thể hoạt động, bởi vì sau khi chuyển hướng hook hook này template_redirect hoạt động lặp đi lặp lại, bạn sẽ có một chuyển tiếp vô tận !

Tốt hơn là kiểm tra, nếu bạn đã ở trên trang chủ, như thế này:

function wpse12535_redirect_sample() {

    $current_url = 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
    $site_url = get_bloginfo('siteurl') . "/";

    if($current_url != $site_url)       
      exit( wp_redirect( home_url( '/' ) ));    

}
add_action( 'template_redirect', 'wpse12535_redirect_sample');

Làm việc cho tôi tốt. Bất kỳ đề xuất? Trân trọng!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.