wp_redirect () - ส่งส่วนหัวแล้ว


10

ฉันพยายามใช้wp_redirect()เพื่อเปลี่ยนเส้นทางผู้ใช้หลังจากส่งแบบฟอร์มการสมัครบนหน้าเว็บสำเร็จ

มันไม่ทำงานและแสดงข้อผิดพลาดต่อไปนี้:

คำเตือน: ไม่สามารถแก้ไขข้อมูลส่วนหัว - ส่วนหัวที่ส่งไปแล้ว (เอาต์พุตเริ่มต้นที่ /Applications/MAMP/htdocs/theme/wp-content/themes/test/header.php:10) ใน / Applications / MAMP / htdocs / theme / wp- รวมถึง / pluggable.php ในบรรทัด 1178

ฉันเข้าใจว่ามีการแสดงผลก่อนหน้านี้แล้วนั่นเป็นเหตุผลว่าทำไมมันไม่ทำงาน แต่ฉันก็ไม่รู้ว่าจะใช้งานอย่างไร

ฟอร์มการสมัครใช้งานแสดงผลโดยฟังก์ชั่นและส่งโดยฟังก์ชั่นอื่นภายในฟังก์ชั่นของฉัน

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

จากนั้นทั้งสองฟังก์ชั่นเหล่านี้จะใช้ในที่ที่ฉันต้องการแสดงแบบฟอร์มการสมัคร

ฉันกลัวว่าไม่ใช่สิ่งที่ดีที่สุดที่จะทำ ฉันควรจะสร้างการกระทำบางอย่างที่ทำเช่นนั้น แต่ฉันไม่รู้ว่าจะใช้งานอย่างไร บทเรียนส่วนใหญ่ที่ฉันพบแสดงผลลัพธ์โดยตรงในหน้าเดียวกันและไม่ต้องการการเปลี่ยนเส้นทางเพิ่มเติม อาจเป็นเพราะพวกเขากำลังทำงานกับฟังก์ชั่นภายในฟังก์ชั่น

คำตอบ:


16

พบคำตอบ(ผ่าน)

แทนที่จะใช้ฟังก์ชั่นฉันเพิ่มการกระทำไปที่ "wp_loaded" เพื่อให้แน่ใจว่าได้รับการโหลดก่อนที่จะส่งส่วนหัวใด ๆ

<?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;
    }
}     
?>

มันกำจัดข้อผิดพลาด แต่โพสต์ไม่ได้บันทึก!
Subrata Sarkar

6

คุณต้องใช้wp_redirect() ก่อนget_header() จากนั้นจะไม่แสดงข้อผิดพลาดส่วนหัว


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();//....
}
});

ขอบคุณสำหรับความช่วยเหลือ แต่รหัสนั้นไม่ได้ผลสำหรับฉัน ที่จำเป็นในการเพิ่มการกระทำที่ "wp_loaded" ที่จะได้รับมันทำงาน (ดูคำตอบของฉัน)
สโนว์บอล

ทำงานได้ดีหากคุณต้องการสร้างis_page_template()เมื่อเปลี่ยนเส้นทางแบบมีเงื่อนไข
ผิดกฎหมาย

1

คุณสามารถทำได้

แทนที่จะเป็นบรรทัดด้านล่าง

wp_redirect ( "$ URL");

เขียน

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

หรือ

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

มันจะแก้ปัญหาของคุณอย่างแน่นอน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.