Пользовательский тип записи одной страницы возвращает ошибку 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()кроме случаев, предусмотренных в кодексе.

это дорогостоящая операция, поэтому ее следует использовать только в случае крайней необходимости


1
Ух ты, это тоже сработало. Это было совершенно не очевидно. Спасибо!
Тоби Дешане

Работал на меня! Благодарность!
JamesHoux

Да! Наконец после выполнения обоих это сработало.
Эрик

16

Сбросьте правило перезаписи с панели инструментов -> Настройки -> Постоянная ссылка. Нажмите на кнопку Сохранить, а затем проверьте страницу с информацией о слайде. Это будет работать сейчас. В противном случае вы можете написать этот код flush_rewrite_rules()в вашей create_slide_post_type()функции. Смотрите Кодекс


2
Нажатие на кнопку сохранения в Permlinks сработало для меня. После того, как я переместил сайт на рабочий сервер, все пользовательские ссылки на пост-типы перестали работать. Это исправило это. Благодарность!
cbloss793

+1 Простое нажатие кнопки «Сохранить» в постоянных ссылках также сработало для меня.
MarsAndBack

Сохранение постоянных ссылок работает. Но, пожалуйста, не добавляйте flush_rewrite_rules()после register_post_type()вызовов в производственный код (то есть внутри create_slide_post_type). Используйте ловушку активации плагина или значение параметра, чтобы определить, что вы добавили новый тип записи
Philipp

6

Обновите ваши постоянные ссылки. Перейдите в Admin-> Настройки-> Постоянные ссылки и нажмите Сохранить. Он обновляет ваши постоянные ссылки и должен помочь, особенно если вы меняете rewrite ('rewrite' => array ('slug' => 'slide'),)


1

Вы должны установить следующее в вашем виртуальном хосте apache:

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

Затем обновите ваши постоянные ссылки: wp-admin-> settings-> permalinks. Это сработало для меня.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.