โพสต์ที่กำหนดเองประเภทหน้าเดียวกลับข้อผิดพลาด 404


17

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

นี่คือรหัสของฉันในfunctions.php:

function create_slide_post_type() {
    $labels = array(
        'name'               => _x( 'اسلایدها', 'i2sa' ),
        'singular_name'      => _x( 'اسلاید', 'i2sa' ),
        'menu_name'          => _x( 'اسلایدها', 'i2sa' ),
        'name_admin_bar'     => _x( 'اسلاید', 'i2sa' ),
        'add_new'            => _x( 'افزودن', 'i2sa' ),
        'add_new_item'       => __( 'افزودن اسلاید جدید', 'i2sa' ),
        'new_item'           => __( 'اسلاید جدید', 'i2sa' ),
        'edit_item'          => __( 'ویرایش اسلاید', 'i2sa' ),
        'view_item'          => __( 'نمایش اسلاید', 'i2sa' ),
        'all_items'          => __( 'همه اسلایدها', 'i2sa' ),
        'search_items'       => __( 'جستجوی اسلایدها', 'i2sa' ),
        'parent_item_colon'  => __( 'اسلایدهای مادر:', 'i2sa' ),
        'not_found'          => __( 'اسلایدی پیدا نشد.', 'i2sa' ),
        'not_found_in_trash' => __( 'اسلایدی در زباله دان پیدا نشد.', 'i2sa' )
    );

    $args = array(
        'labels'             => $labels,
        'description'        => "اسلایدهای شرکت i2sa",
        'public'             => true,
        'exclude_from_search'=> true,
        'publicly_queryable' => false,
        'show_in_nav_menus'  => false,
        'menu_icon'          => 'dashicons-images-alt2',
        'show_ui'            => true,
        'show_in_menu'       => true,
        'query_var'          => true,
        'rewrite'            => array( 'slug' => 'slide' ),
        'capability_type'    => 'post',
        'has_archive'        => true,
        'hierarchical'       => false,
        'menu_position'      => null,
        'supports'           => array( 'title', 'editor', 'thumbnail', 'excerpt' ),
    );
    register_post_type( 'slide', $args );
    flush_rewrite_rules();
}
add_action( 'init', 'create_slide_post_type' );

คำตอบ:


41

คุณควรตั้งค่าpublicly_queryableอาร์กิวเมนต์ของคุณเป็นtrueเมื่อลงทะเบียนประเภทโพสต์ที่กำหนดเองของคุณ

ทำหมายเหตุ : เพิ่มflush_rewrite_rules()รีเฟรชหน้าหนึ่งหรือสองครั้งและลบออกทันที คุณไม่ควรเก็บflush_rewrite_rules()เว้นแต่ภายใต้บทบัญญัติเช่นเดียวกับใน codex

นี่เป็นการดำเนินการที่มีราคาแพงดังนั้นจึงควรใช้เมื่อจำเป็นจริงๆเท่านั้น


1
โอ้ว้าวที่ทำงานที่นี่ด้วย นั่นคือไม่ชัดเจนอย่างสมบูรณ์ ขอขอบคุณ!
Toby Deshane

ทำงานให้ฉัน! ขอบคุณ!
JamesHoux

ใช่ ในที่สุดหลังจากทำทั้งสองอย่างมันก็ใช้งานได้
Eric

16

ล้างกฎการเขียนซ้ำจากแดชบอร์ด -> การตั้งค่า -> หน้าความคิดเห็น คลิกที่ปุ่มบันทึกแล้วตรวจสอบหน้ารายละเอียดสไลด์ของคุณ มันจะทำงานตอนนี้ มิฉะนั้นคุณสามารถเขียนรหัสนี้flush_rewrite_rules()ในcreate_slide_post_type()ฟังก์ชั่นของคุณ ดูCodex


2
การคลิกที่ปุ่มบันทึกในลิงก์ถาวรทำงานสำหรับฉัน หลังจากที่ฉันย้ายไซต์ไปยังเซิร์ฟเวอร์ที่ใช้งานได้แล้วลิงค์ประเภทโพสต์ที่กำหนดเองทั้งหมดกำลังแตกหัก สิ่งนี้แก้ไขได้ ขอบคุณ!
cbloss793

+1 เพียงคลิกบันทึกในลิงก์ถาวรก็ใช้ได้สำหรับฉันเช่นกัน
MarsAndBack

การบันทึกลิงก์ถาวรทำงานได้ แต่โปรดอย่าเพิ่มflush_rewrite_rules()หลังจากการregister_post_type()โทรในรหัสการผลิต (เช่นภายในcreate_slide_post_type) ใช้ hook-activation hook หรือค่าตัวเลือกเพื่อตรวจสอบว่าคุณได้เพิ่มประเภทโพสต์ใหม่
Philipp

6

รีเฟรชลิงก์ของคุณ ไปที่ผู้ดูแลระบบ -> การตั้งค่า -> ลิงก์และกดบันทึก รีเฟรช permalinks ของคุณและควรช่วยโดยเฉพาะถ้าคุณเปลี่ยน rewrite ('rewrite' => array ('slug' => 'slide'),)


1

คุณควรตั้งค่าต่อไปนี้ใน apache virtualhost ของคุณ:

    <Directory /var/www/html/wordpress>
            AllowOverride All
    </Directory>

จากนั้นรีเฟรช Permalinks ของคุณ: wp-admin-> settings-> Permalinks นั่นใช้ได้สำหรับฉัน

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