Как формируются постоянные ссылки в wordpress?
Суть вопроса следующая:
По умолчанию ссылка выглядит так:
domain.local/?post_type=project&p=195
Если включаю произвольную структуру /%category%/%postname%/ то ссылка становится такой
domain.local/project/test
И все бы хорошо, но почему то domain.local/project выдает пустую страницу, а domain.local/?post_type=project работает как положено... .htaccess работает перезаписан самим wp:
# BEGIN WordPress
# Директивы (строки) между `BEGIN WordPress` и `END WordPress`
# созданы автоматически и подлежат изменению только через фильтры WordPress.
# Сделанные вручную изменения между этими маркерами будут перезаписаны.RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]# END WordPress
Дополнительно
выдает пустую страницу
https://codex.wordpress.org/%D0%A7%D0%90%D0%92%D0%... ?
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
В вашем примере одиночная запись кастомного типа уже открывается как /project/test, значит базовые rewrite-правила и .htaccess, скорее всего, работают. Проблема с /project обычно связана не с .htaccess, а с настройками самого custom post type. URL /project/test - это single-страница записи типа project, а URL /project - это архив типа записи. Архив появится только если при регистрации post type включен has_archive.
Проверьте код регистрации project. Для архива по адресу /project/ он должен быть примерно таким:
add_action('init', 'wturm_register_project_post_type'); function wturm_register_project_post_type() { register_post_type('project', [ 'label' => 'Projects', 'public' => true, 'has_archive' => true, 'rewrite' => [ 'slug' => 'project', 'with_front' => false, ], 'supports' => ['title', 'editor', 'thumbnail'], ]); }
После изменения регистрации нужно пересобрать rewrite rules: зайдите в админке в Настройки - Постоянные ссылки и просто нажмите сохранение. Делать flush_rewrite_rules на каждом хите сайта нельзя: это тяжелая операция. Ее выполняют один раз после изменения структуры ссылок, обычно при активации плагина или вручную через сохранение настроек постоянных ссылок.
Запрос domain.local/?post_type=project может работать даже тогда, когда красивый архив /project/ не настроен. Query string напрямую передает WordPress параметр post_type, а красивый URL должен сначала совпасть с rewrite-правилом. Поэтому эти два адреса не являются одинаковой проверкой.
Если после включения has_archive и сохранения постоянных ссылок архив все равно пустой, проверьте наличие опубликованных записей project и шаблон архива. Для вывода списка в archive-project.php должен быть обычный цикл have_posts. Если записей нет или тема в этом шаблоне не запускает цикл, вы получите пустую страницу даже при правильно работающих ссылках.