Переписывание URL для пользовательского типа записей?

25 мая 2012 г., 18:47:09
Просмотры: 169K
Голосов: 42

Я настроил пользовательский тип записей для проектов моего портфолио. Основной URL для этого находится по адресу /projects/

Теперь я также настроил структуру постоянных ссылок для записей блога как /articles/*/. Это означает, что когда я перехожу к просмотру проекта портфолио, URL меняется на /articles/projects/project-name/

Я знаю, что должен быть способ переписать постоянные ссылки только для моего пользовательского типа записей projects. Но я не знаком с синтаксисом объявления URL-слага - буду признателен за любую помощь!

0
Все ответы на вопрос 2
6
66

При регистрации пользовательского типа записи необходимо указать, что правило перезаписи (rewrite) не должно добавляться к существующей структуре URL.

Короче говоря, это означает, что строка в вашем вызове register_post_type:

'rewrite' => array('slug' => 'projects'),

должна быть изменена на:

'rewrite' => array('slug' => 'projects','with_front' => false),

Для получения дополнительной информации ознакомьтесь с аргументом rewrite в документации Codex по register_post_type.

примечание: после обновления кода обязательно сбросьте правила перезаписи, посетив Настройки > Постоянные ссылки. В противном случае вы по-прежнему будете видеть старые ссылки.

25 мая 2012 г. 19:29:28
Комментарии

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

Jake Jake
25 мая 2012 г. 21:06:28

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

0x61696f 0x61696f
25 мая 2012 г. 21:09:10

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

Desi Desi
25 янв. 2015 г. 15:36:43

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

Alexander Taubenkorb Alexander Taubenkorb
28 февр. 2019 г. 14:09:17

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

Tan-007 Tan-007
14 нояб. 2019 г. 19:03:27

@0x61696f, у меня уже есть страница с названием projects. Могу ли я использовать такое же имя для slug пользовательского типа записи, например projects?

Naren Verma Naren Verma
26 янв. 2022 г. 13:12:16
Показать остальные 1 комментариев
3
18

У меня была такая же проблема буквально 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, на любую другую — в примере просто приведен вариант, который использовал я.

Удачи! И, как всегда, не забудьте вернуться и рассказать, как все сработало! :)

25 мая 2012 г. 19:18:54
Комментарии

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

chrisguitarguy chrisguitarguy
25 мая 2012 г. 19:56:52

Справедливо, я поработаю над правильной редакцией.

cmegown cmegown
25 мая 2012 г. 20:16:37

Теперь мой ответ содержит код, похожий на рабочий код из продакшн-окружения, который успешно перезаписывает URL пользовательского типа записи. Надеюсь, это окажется более полезным!

cmegown cmegown
25 мая 2012 г. 20:33:47