มีตะขอใดบ้างที่เปลี่ยนลอจิก 404 หรือไม่?


27

หากคุณมีหน้า 404 ที่กำหนดไว้ในชุดรูปแบบของคุณ Wordpress จะแสดงหน้า 404 หากมีการกำหนด "แท็ก" ใน $ wp_query-> query_vars และไม่มีโพสต์ที่ตรงกับแท็กนั้น

ฉันกำลังเขียนปลั๊กอินที่แสดงข้อมูลบางอย่างในแต่ละหน้านอกเหนือจากการโพสต์ ฉันต้องการแก้ไขตรรกะ 404 เพื่อให้หน้า 404 ปรากฏขึ้นหากไม่มีโพสต์ที่ตรงกับแท็กและปลั๊กอินไม่สามารถดึงข้อมูลที่ตรงกับแท็กนั้นขึ้นมาได้ หากปลั๊กอินสามารถค้นหาข้อมูลได้ฉันต้องการแสดงหน้าปกติไม่ว่าจะมีโพสต์ในหน้านั้นหรือไม่ ...

ฉันได้รับ Googling อ่านรหัสอ่าน codex และแหย่ที่นี่และไม่สามารถคิดได้ว่า Wordpress จะเรียกใช้ที่ 404 ได้อย่างไรและฉันจะลบล้างมันได้อย่างไร (ฉันมีความรู้สึกว่าอาจมีบางอย่างที่เกี่ยวข้องกับ status_header () ใน function.php แต่มันไม่ชัดเจนว่าจะต้องทำอย่างไรและเมื่อใด

ความช่วยเหลือ / ความคิด / การตรัสรู้ชื่นชมใด ๆ

ขอขอบคุณ,

~ Patch

คำตอบ:


29

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

add_filter('template_redirect', 'my_404_override' );
function my_404_override() {
    global $wp_query;

    if (<some condition is met>) {
        status_header( 200 );
        $wp_query->is_404=false;
    }
}

โปรดทราบว่าคุณจำเป็นต้องตั้งค่า "is_404" เป็นเท็จก่อนที่ PHP จะแสดงผลส่วนหัวซึ่งเป็นสาเหตุที่ทำให้การเชื่อมต่อในตรรกะ template_redirect เป็นความคิดที่ดี

~ Patch


5

ฉันต้องทำเช่นเดียวกันสำหรับโครงการที่กำหนดเองที่มีหน้า 200 และพบว่าคุณสามารถเพิ่มได้ที่ด้านบนสุดของไฟล์เทมเพลตของคุณ (ด้านบน get_header ();)

global $wp_query;
status_header( 200 );
$wp_query->is_404=false;

1
ที่ดี! สิ่งนี้ใช้ได้สำหรับฉัน ฉันสร้างสคริปต์ของฉันและสร้าง 404 ฉันลองใช้สคริปต์ runnig จาก wp-> main แต่นั่นไม่ใช่วิธีแก้ปัญหาที่ดี สิ่งนี้ได้ผลกับฉัน:// configuration require('./wp-load.php'); // init WP (inits objects, language and stuff). wp(); // fix title (this is not 404) $wp_query->is_404 = false; // doesn't fix the actual 404 status status_header( 200 ); // but this does :-)
Nux

1

สร้าง404.phpไฟล์เทมเพลตในธีมของคุณและปรับแต่งได้ตามต้องการ (เพิ่มเอาต์พุตปลั๊กอินหรืออะไรก็ได้) คุณพูดถึงการกำหนดไว้ในชุดรูปแบบของคุณมีอะไรผิดปกติกับวิธีนี้สำหรับคุณ?

Codex การสร้างหน้าข้อผิดพลาด 404


สิ่งที่ฉันกำลังมองหาคือวิธีที่จะเปลี่ยนสถานการณ์ภายใต้การเรียกใช้หน้า 404 ตอนนี้ถ้า Wordpress ไม่สามารถหาโพสต์ใด ๆ ที่ตรงกับแท็กใน vars แบบสอบถามหน้า 404 จะปรากฏขึ้น ฉันต้องการวางรหัสเพิ่มเติมบางอย่างเพื่อให้แน่ใจว่าหน้า 404 จะปรากฏขึ้นก็ต่อเมื่อ Wordpress ไม่สามารถค้นหาโพสต์ใด ๆและปลั๊กอินของฉันไม่สามารถหาข้อมูลเพิ่มเติมใด ๆ ที่จะแสดง
Patch

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

1
สิ่งที่ฉันกำลังมองหาคือวิธีการเปลี่ยนคำจำกัดความของหน้าเว็บที่ "ผิด" ไซต์ที่ฉันกำลังสร้างมีส่วนประกอบของบล็อก แต่นั่นไม่ใช่ไซต์ทั้งหมด ฉันใช้แท็ก Wordpress ทั้งสองเพื่อแสดงโพสต์ Wordpress และดึงเนื้อหาเพิ่มเติมผ่านทางปลั๊กอิน ฉันต้องการส่งคืนรหัสสถานะ 200 ถ้ามีก) มีโพสต์หรือข) ปลั๊กอินของฉันสามารถค้นหาสิ่งที่จะแสดงที่ตรงกับแท็ก ดังนั้นความจำเป็นในการวนซ้ำตรรกะ ขอบคุณสำหรับการสละเวลาในการเขียนคำตอบ - ขอโทษที่ปัญหาของฉันแปลกมากพอที่จะต้องการคำตอบที่เกี่ยวข้องมากขึ้น :-)
Patch
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.