Страница отдельной записи пользовательского типа возвращает ошибку 404

6 авг. 2014 г., 15:02:01
Просмотры: 57.7K
Голосов: 28

У меня есть пользовательский тип записи 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' );
0
Все ответы на вопрос 4
5
60

При регистрации вашего пользовательского типа записи необходимо установить аргумент publicly_queryable в значение true.

ВАЖНО: Добавьте функцию flush_rewrite_rules(), обновите страницу один или два раза и НЕМЕДЛЕННО УДАЛИТЕ ЕЁ. НЕ СЛЕДУЕТ оставлять flush_rewrite_rules() в коде, за исключением случаев, описанных в кодексе.

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

6 авг. 2014 г. 16:20:46
Комментарии

Ого, это и здесь сработало. Совсем неочевидно. Спасибо!

Toby Deshane Toby Deshane
28 янв. 2019 г. 21:02:46

У меня сработало! Спасибо!

JamesHoux JamesHoux
10 июн. 2019 г. 21:58:55

Да! Наконец-то после выполнения обоих действий всё заработало.

Eric Eric
24 июл. 2019 г. 16:42:51

flush_rewrite_rules() - это то, что помогло мне. Отличное решение!

Cush Cush
2 нояб. 2020 г. 17:13:55

Вы можете просто перейти в Настройки > Постоянные ссылки и нажать "Сохранить", ничего не меняя. Если вы не хотите редактировать код и ищете быстрый, "надеюсь", вариант исправления

BonisTech BonisTech
2 дек. 2020 г. 12:11:18
3
25

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

6 авг. 2014 г. 15:33:28
Комментарии

Нажатие кнопки сохранения в настройках постоянных ссылок сработало для меня. После переноса сайта на продакшн-сервер все ссылки пользовательских типов записей перестали работать. Это исправило проблему. Спасибо!

cbloss793 cbloss793
11 окт. 2017 г. 20:29:02

+1 Простое сохранение настроек постоянных ссылок также помогло мне.

Kalnode Kalnode
12 авг. 2018 г. 03:52:19

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

Philipp Philipp
14 июн. 2019 г. 10:31:17
1
11

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

29 мар. 2017 г. 15:00:59
Комментарии

это сработало для меня - спасибо

cljk cljk
27 апр. 2020 г. 12:48:15
1

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

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

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

13 нояб. 2019 г. 18:10:18
Комментарии

Спасибо за ваш ответ. Теперь я хотя бы знаю, что проблема в конфигурации моего apache, а не в коде.

Sharpey Sharpey
14 нояб. 2021 г. 00:33:17