wp_redirect () - tiêu đề đã được gửi


10

Tôi đang cố gắng sử dụng wp_redirect()để chuyển hướng người dùng sau khi gửi thành công mẫu đăng ký trên trang.

Nó không hoạt động và hiển thị lỗi sau:

Cảnh báo: Không thể sửa đổi thông tin tiêu đề - các tiêu đề đã được gửi bởi (đầu ra bắt đầu tại /Appluggest/MAMP/htdocs/theme/wp-content/theme/test/header.php:10) trong / Ứng dụng / MAMP / htdocs / theme / wp- bao gồm / pluggable.php trên dòng 1178

Tôi hiểu rằng đã có đầu ra trước đó, đó là lý do tại sao nó không hoạt động, nhưng tôi không biết làm thế nào để làm cho nó hoạt động.

Biểu mẫu đăng ký được hiển thị bởi một hàm và được gửi bởi một hàm khác, bên trong hàm.php của tôi.

if ( isset( $_POST['subscribe'] ) ) {
    // Submits the form and should then redirect
    wp_redirect("/thank-you/");
    exit;
}

Sau đó, cả hai chức năng này được sử dụng ở nơi tôi muốn hiển thị biểu mẫu đăng ký.

Tôi sợ đó không phải là điều tốt nhất để làm. Tôi nên tạo ra một số hành động thực hiện điều đó, nhưng tôi không biết làm thế nào để thực hiện điều đó. Hầu hết các hướng dẫn tôi tìm thấy hiển thị kết quả trực tiếp trên cùng một trang và không yêu cầu chuyển hướng bổ sung. Có lẽ đó là lý do tại sao họ làm việc với các hàm bên trong hàm.php

Câu trả lời:


15

Tìm thấy câu trả lời (thông qua)

Thay vì sử dụng chức năng tôi đã thêm một hành động vào "wp_loaded", điều đó đảm bảo rằng nó được tải trước khi bất kỳ tiêu đề nào được gửi.

<?php
add_action ('wp_loaded', 'my_custom_redirect');
function my_custom_redirect() {
    if ( isset( $_POST['subscribe'] ) ) {
        $redirect = 'http://example.com/redirect-example-url.html';
        wp_redirect($redirect);
        exit;
    }
}     
?>

Nó đã thoát khỏi lỗi nhưng bài viết đã không lưu!
Subrata Sarkar

6

Bạn phải sử dụng wp_redirect() trước get_header() Sau đó nó sẽ không hiển thị lỗi tiêu đề.


3
add_action('template_redirect', function(){
if(isset($_POST['subscriptio'])){// make this condition such that it only matches when a registraiotn form get submitted
/**
 * do your stuff here
 */
wp_redirect();//....
}
});

Cảm ơn sự giúp đỡ, nhưng mã đó đã không làm việc cho tôi. Cần thêm hành động vào "wp_loaded" để hoạt động (Xem câu trả lời của tôi)
Snowball

Hoạt động tốt nếu bạn cần thiết lập is_page_template()khi chuyển hướng có điều kiện.
Lawless

1

bạn cũng có thể làm điều này

Thay vì dòng dưới đây

wp_redirect ("$ url");

viết

echo("<script>location.href = '".$url."'</script>");

hoặc là

<?php <script><?php echo("location.href = '".$url."';");?></script>?>

Nó chắc chắn sẽ giải quyết vấn đề của bạn.

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.