Wp_redirect และการส่งตัวแปร


12

จะส่งตัวแปรที่มี wp_redirect () จากไฟล์ function.php ในโฟลเดอร์ธีมของฉันได้อย่างไร?

if ( $post_id ) {
    $variable_to_send = '1';
    wp_redirect( home_url(), $variable_to_send );
    exit;
}

และในหน้าแรกฉันจะตรวจจับตัวแปรในเงื่อนไข if-else เพื่อแสดงการยืนยันหรือไม่ขึ้นอยู่กับว่า$variable_to_send= '1' หรือไม่

วิธีทำใน WordPress?

คำตอบ:


10

ฉันกลัวว่าคุณจะทำแบบนี้ไม่ได้

wp_redirectเป็นวิธีแฟนซีในการส่งส่วนหัวLocationและอาร์กิวเมนต์ที่สองของฟังก์ชันนี้คือสถานะคำขอไม่ใช่ตัวแปรที่กำหนดเอง (404, 301, 302 และอื่น ๆ )

คุณสามารถส่งตัวแปรบางตัวเพื่อรับพารามิเตอร์ ดังนั้นคุณสามารถทำสิ่งนี้:

if ( $post_id ) {
        $variable_to_send = '1';
        wp_redirect( home_url() .'?my_variable='.$variable_to_send );
        exit;
}

จากนั้นคุณสามารถใช้ตัวแปรเหล่านี้เป็น$_GET['my_variable']หรือลงทะเบียนเป็นตัวแปรรับที่กำหนดเอง


1
คุณสามารถตั้งค่าคุกกี้ได้ฉันคิดว่า
Ben Polinsky

1
คุณต้องใช้ add_query_arg เพื่อทำมันด้วยวิธีของ WordPress
Shivanand Sharma

@ShivanandSharma คุณทำได้ แต่ไม่จำเป็นต้องใช้ add_query_arg เพื่อเพิ่มอาร์กิวเมนต์เพียงหนึ่งรายการลงใน URL โดยไม่ต้องมีอาร์กิวเมนต์อื่น ๆ
Krzysiek Dróżdż

10

ไปปาร์ตี้กับสายนี้ แต่ "วิธี Wordpress" เพื่อทำมันจะใช้add_query_argดังนี้:

if ( $post_id ) {
    wp_redirect( esc_url( add_query_arg( 'variable_to_send', '1', home_url() ) ) );
    exit;
}

http://my.website/?variable_to_send=1นี้จะเริ่มต้นการเปลี่ยนเส้นทางไปยัง คุณจะสามารถจับตัวแปรแล้วในหน้าแรก (หรือหน้าบล็อกขึ้นอยู่กับว่าคุณhome_url()ตั้งค่าอย่างไร) โดยการเข้าถึง$_GET['variable_to_send']ในรหัส PHP ของคุณ

หากคุณกำลังจะทำสิ่งนี้functions.phpให้ตรวจสอบให้แน่ใจว่าได้เชื่อมต่อinitหรือเชื่อมโยงกับตะขอก่อนหน้านี้มิฉะนั้นคุณจะได้รับข้อผิดพลาด "ส่วนหัวที่ส่งแล้ว"

หวังว่านี่จะช่วยให้คนที่สะดุดข้ามโพสต์นี้


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