Özel gönderi türü tek sayfa 404 hatası döndürüyor


17

Adında özel bir yazı türüm var slide. İçeriği ve bazı özel alanları vardır. Kullanıcı slayt tek sayfa bağlantısını tıklattığında WP'ninsingle.php temayı veya single-slide.phptemayı göstermesini istiyorum . Benim sorunum , tek slayt sayfasını görmek istediğinizde WP 404 hatası atar.

İşte benim kod 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' );

Yanıtlar:


42

Özel yayın türünüzü kaydederken publicly_queryablebağımsız değişkeninizi olarak ayarlamanız gerekir true.

NOT ALIN : flush_rewrite_rules()Sayfayı bir veya iki kez ekleyin , yenileyin ve HEMEN KALDIRIN. Sen tutmak should değil flush_rewrite_rules(), kodeks olarak hükümlerine göre sürece.

bu pahalı bir işlemdir, bu yüzden sadece kesinlikle gerekli olduğunda kullanılmalıdır


1
Oh vay, bu da burada çalıştı. Bu tamamen açık değildi. Teşekkür ederim!
Toby Deshane

Benim için çalıştı! Teşekkürler!
JamesHoux

Evet! Sonunda her ikisini de yaptıktan sonra çalıştı.
Eric

16

Yeniden yazma kuralını gösterge tablosundan -> Ayarlar-> Kalıcı bağlantı sayfasından temizleyin. Kaydet düğmesini tıklayın ve ardından slayt ayrıntıları sayfanızı kontrol edin. Şimdi çalışacak. Aksi takdirde bu kodu yazabilirsiniz flush_rewrite_rules()senin içinde create_slide_post_type()işlevi. Kodeks'e bakın


2
Permlinks'teki kaydet düğmesine tıklamak benim için çalıştı. Siteyi bir üretim sunucusuna taşıdıktan sonra, tüm özel gönderi türü bağlantıları kopuyordu. Bu sorunu düzeltti. Teşekkürler!
cbloss793

+1 Permalinks'te kaydet'e tıklamak da benim için çalıştı.
MarsAndBack

Kalıcı bağlantıların kaydedilmesi çalışır. Ancak , üretim kodundaki çağrılardan flush_rewrite_rules()sonra register_post_type()(yani içeride create_slide_post_type) eklemeyin . Yeni bir yazı türü eklediğinizi belirlemek için eklenti etkinleştirme kancasını veya bir seçenek değerini kullanın
Philipp

6

Kalıcı bağlantılarınızı yenileyin. Yönetici-> Ayarlar-> Kalıcı Bağlantılar'a gidin ve Kaydet'e basın. Kalıcı bağlantılarınızı yeniler ve özellikle yeniden yazmayı değiştiriyorsanız ('rewrite' => dizi ('slug' => 'slide'),)


1

Virtualhost apache'nizde aşağıdakileri ayarlamanız gerekir:

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

Ardından, kalıcı bağlantılarınızı yenileyin: wp-admin-> ayarlar-> kalıcı bağlantılar. Bu benim için çalıştı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.