ควรใช้เบ็ดอันใดเพื่อเพิ่มการกระทำที่มีการเปลี่ยนเส้นทาง


16

ฉันต้องการสร้างปลั๊กอินที่คว้าพารามิเตอร์ URL จากสตริงการสืบค้นเพื่อสร้างสตริงการสืบค้นใหม่สำหรับหน้าเดียวกัน ฉันกำลังติดตามหนังสือการพัฒนาปลั๊กอินมืออาชีพ WordPress ที่ยอดเยี่ยม แต่ฉันไม่แน่ใจว่าจะใช้ตะขอแบบไหนกับการกระทำนี้ นี่คือฟังก์ชั่นการกระทำของฉัน:

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

ตะขอใดที่เหมาะสำหรับการเปลี่ยนเส้นทางส่วนหัว


คุณต้องการเปลี่ยน URL สุดท้ายหรือเพียงแค่ตัวแปรที่ใช้ใน WP_Query
scribu

รหัสที่คุณโพสต์นั้นจะนำหน้าทุกหน้านั่นคือสิ่งที่คุณต้องการ? การเปลี่ยนเส้นทางนี้จะเกิดขึ้นภายใต้เงื่อนไขใด หมายเหตุ:ฉันได้ +1 kaiser แล้วtemplate_redirectจะเป็นคำแนะนำของฉันด้วย
t31os

scribu ฉันต้องการเปลี่ยน URL สุดท้ายและสตริงแบบสอบถาม
jnthnclrk

t31os, ฉันทำให้รหัสของฉันง่ายขึ้นสำหรับคำถาม ของจริงมีเงื่อนไขมากขึ้น
jnthnclrk

ผลลัพธ์คืออะไร กรุณาทำเครื่องหมายวิธีแก้ปัญหา
ไกเซอร์

คำตอบ:


13

เช่นเดียวกับไกเซอร์ที่ตอบtemplate_redirectเบ็ดแน่นอนเหมาะสมสำหรับการเปลี่ยนเส้นทาง

นอกจากนี้คุณควรใช้wp_redirect()ฟังก์ชั่นแทนที่จะตั้งค่าส่วนหัว


ขอขอบคุณสำหรับคำแนะนำจะไม่ทราบว่าทำไม wp_redirect จึงดีกว่าที่นี่: wordpress.stackexchange.com/questions/12944/…
jnthnclrk

17

template_redirectผมว่า แต่จะดูที่การอ้างอิงการดำเนินการ

ตัวอย่าง

อย่าลืมexit()เปลี่ยนเส้นทาง

/**
 * 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

แต่ฉันจะบอกว่าตัวอย่างนี้จากไกเซอร์ไม่สามารถทำงานได้เพราะหลังจากการเปลี่ยนเส้นทางของ hook template_redirectนี้ทำงานอีกครั้งและอีกครั้งคุณจะมีการส่งต่อไม่มีที่สิ้นสุด !

ดีกว่าคือการตรวจสอบถ้าคุณอยู่ในหน้าแรกเช่นนี้:

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');

ทำงานได้ดีสำหรับฉัน ข้อเสนอแนะใด ๆ ความนับถือ!

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