Одна сторінка користувальницького типу публікації повертає помилку 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
О, вау, що і тут працювали. Це було абсолютно не очевидно. Дякую!
Toby Deshane

Працювали для мене! Спасибі!
JamesHoux

Так! Нарешті, після того, як зробили обидва, це спрацювало.
Ерік

16

Очистіть правило перезапису на інформаційній панелі -> Налаштування-> сторінки Постійної посилання. Натисніть кнопку "Зберегти" та перевірте сторінку деталей слайдів. Це працюватиме зараз. Інакше ви можете написати цей код flush_rewrite_rules()у своїй create_slide_post_type()функції. Дивіться Кодекс


2
Клацання кнопки збереження в Permlinks працювало на мене. Після того, як я перемістив сайт на виробничий сервер, усі користувацькі посилання типу публікації були порушені. Це і виправило це. Спасибі!
cbloss793

+1 Просто натискання кнопки "Зберегти" в "Постійні посилання" також працювало для мене.
MarsAndBack

Збереження постійних посилань працює. Але, будь ласка, не додайте flush_rewrite_rules()після register_post_type()дзвінків у виробничий код (тобто всередині create_slide_post_type). Використовуйте гачок активації плагіна або значення опції, щоб визначити, що ви додали новий тип публікації
Філіп

6

Оновіть свої постійні посилання. Перейдіть до Адміністратора-> Налаштування-> Постійні посилання та натисніть Зберегти. Він оновлює ваші постійні посилання та має допомогти, особливо якщо ви змінюєте переписати ('rewrite' => array ('slug' => 'slide'),)


1

У вашому virtualhost apache слід встановити наступне:

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

Потім оновіть свої постійні посилання: wp-admin-> settings-> permalinks. Це працювало для мене.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.