Переписывание URL для пользовательского типа записей?
Я настроил пользовательский тип записей для проектов моего портфолио. Основной URL для этого находится по адресу /projects/
Теперь я также настроил структуру постоянных ссылок для записей блога как /articles/*/
. Это означает, что когда я перехожу к просмотру проекта портфолио, URL меняется на /articles/projects/project-name/
Я знаю, что должен быть способ переписать постоянные ссылки только для моего пользовательского типа записей projects. Но я не знаком с синтаксисом объявления URL-слага - буду признателен за любую помощь!
При регистрации пользовательского типа записи необходимо указать, что правило перезаписи (rewrite) не должно добавляться к существующей структуре URL.
Короче говоря, это означает, что строка в вашем вызове register_post_type
:
'rewrite' => array('slug' => 'projects'),
должна быть изменена на:
'rewrite' => array('slug' => 'projects','with_front' => false),
Для получения дополнительной информации ознакомьтесь с аргументом rewrite
в документации Codex по register_post_type
.
примечание: после обновления кода обязательно сбросьте правила перезаписи, посетив Настройки > Постоянные ссылки. В противном случае вы по-прежнему будете видеть старые ссылки.

Блестяще, спасибо! Просто чтобы уточнить: чтобы сбросить правила, мне достаточно зайти в Настройки->Постоянные ссылки и нажать "Сохранить изменения", верно?

Вам даже не нужно сохранять изменения. Достаточно просто открыть страницу настроек Постоянных ссылок (если ваш файл .htaccess доступен для записи. Если нет, нажмите сохранить изменения и вручную скопируйте код, который он вернёт, в ваш .htaccess)

У меня это не срабатывает. Мои записи проектов всё ещё открываются по адресу example.com/projects/title-of-post
. Я также посетил страницу Постоянных ссылок. Что может быть причиной? В моём htaccess
нет никаких правил перезаписи.

Вау, спасибо, это было недостающее звено! Посещение страницы постоянных ссылок не помогло, но простое СОХРАНЕНИЕ текущих настроек постоянных ссылок сработало :)

Я продолжал вносить изменения без сброса правил перезаписи. Спасибо за совет!

У меня была такая же проблема буквально 3 дня назад, пока я не наткнулся на серию статей на wp.tutsplus.com. Я адаптировал свой код под ваш вопрос, но вот что у меня получилось после изучения серии. Имейте в виду, что код не тестировался.
// регистрируем пользовательский тип записи
function my_custom_post_type() {
register_post_type('Projects', array(
'label' => 'Проекты', 'description' => '',
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'capability_type' => 'post',
'hierarchical' => false,
'publicly_queryable' => true,
'rewrite' => false,
'query_var' => true,
'has_archive' => true,
'supports' => array('title','editor','excerpt','trackbacks','custom-fields','comments','revisions','thumbnail','author','page-attributes'),
'taxonomies' => array('category','post_tag'),
// доступно гораздо больше аргументов, но пока достаточно перечисленных
));
}
add_action('init', 'my_custom_post_type');
// переопределяем структуру URL для пользовательского типа записи
global $wp_rewrite;
$projects_structure = '/projects/%year%/%monthnum%/%day%/%projects%/';
$wp_rewrite->add_rewrite_tag("%projects%", '([^/]+)', "project=");
$wp_rewrite->add_permastruct('projects', $projects_structure, false);
Теоретически, вы можете изменить структуру URL, хранящуюся в переменной $projects_structure
, на любую другую — в примере просто приведен вариант, который использовал я.
Удачи! И, как всегда, не забудьте вернуться и рассказать, как все сработало! :)

Ответы, состоящие только из ссылок, обычно считаются бесполезными, так как эти ресурсы могут (и, вероятно, будут) недоступны в будущем. Обобщите содержание.
