Вопрос или проблема
У меня есть пользовательский тип страницы dictionary
, и все элементы словаря имеют URL, подобный этому: example.com/dictionary/item
у словаря has_archive => false
Проблема возникает, если я также создаю страницу с названием Словарь с URL example.com/dictionary
Теперь все страницы элементов словаря выдают ошибку 404.
Пользовательский тип записи был создан с помощью CPT UI
Итак, мой вопрос: как сделать так, чтобы example.com/dictionary
отображал страницу под названием “Словарь” (а не архив) и чтобы все элементы отображались по своим URL, пример: example.com/dictionary/item-1
, а не показывали ошибку 404.
Я обновил постоянные ссылки, перейдя в настройки -> постоянные ссылки и нажав сохранить.
Сбросьте свои постоянные ссылки. Перейдите в настройки / постоянные ссылки и нажмите сохранить.
Есть еще один момент, который возможен. Когда вы регистрируете пользовательский тип записи, вы можете использовать дополнительный аргумент rewrite
with_front
:
$args = array(
// ( ... ваши аргументы здесь ... )
'rewrite' => array(
'slug' => 'dictionary',
'with_front' => false // обратите внимание здесь
),
// ( ... больше аргументов здесь ... )
Это удалит базу CPT (dictionary
в вашем случае) из URL.
И не забудьте сбросить постоянные ссылки каждый раз, когда вы меняете код, относящийся к ним.
Ответ или решение
Чтобы решить проблему с конфликтом между созданным вами пользовательским типом записи (Custom Post Type, CPT) с именем "dictionary" и страницей с тем же именем в WordPress, необходимо внести несколько изменений в настройки вашего CPT. Следуйте приведённой ниже инструкции для настройки и устранения ошибки 404 для ваших элементов "dictionary".
Шаги по решению проблемы
-
Изменение настроек при регистрации CPT:
При создании пользовательского типа записи убедитесь, что вы используете параметрrewrite
с настройкойwith_front => false
. Это уберет базу CPT из URL, позволяя вашему контенту существовать в одной и той же пространственной области, что предотвратит ошибку 404.Пример кода для регистрации вашего CPT может выглядеть так:
function my_custom_post_type() { $args = array( 'label' => 'Dictionary', 'public' => true, 'has_archive' => false, 'rewrite' => array( 'slug' => 'dictionary', 'with_front' => false ), // Другие параметры ); register_post_type('dictionary', $args); } add_action('init', 'my_custom_post_type');
-
Создание страницы "Dictionary":
После того как вы зарегистрируете свой CPT с новым параметромrewrite
, создайте страницу с тем же именем "Dictionary". Она будет доступна по URLexample.com/dictionary
. -
Флоша пермалинков:
Каждый раз, когда вы вносите изменения в структуру ваших постов или изменяете настройки пермалинков, важно обновить их. Для этого перейдите в админ-панель WordPress, в раздел Настройки → Постоянные ссылки и нажмите кнопку "Сохранить изменения". Это обновит ваши правила пермалинков и устранит возможные проблемы с ошибками 404. -
Проверка результата:
После выполнения вышеуказанных шагов проверьте, что URL для ваших элементовdictionary
выглядят какexample.com/dictionary/item-1
и не вызывают ошибки 404. В этом случае:example.com/dictionary
будет отображать вашу страницу "Dictionary".- Каждый отдельный элемент будет доступен по своему уникальному URL без возникновения конфликтов.
Заключение
С помощью вышеуказанных шагов вы сможете эффективно справиться с конфликтом между пользовательскими типами записей и обычными страницами в WordPress, а также оптимизировать структуру URL. Убедитесь, что сохраняете актуальные настройки и периодически проверяете работоспособность ваших ссылок. Это поможет улучшить пользовательский опыт и SEO-позиции вашего сайта.