Пользовательский тип записи URL перезаписи?

32

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

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

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

Джейк
источник

Ответы:

42

Когда вы регистрируете пользовательский тип записи, вы должны указать, что правило перезаписи не должно предшествовать существующей структуре URL.

Одним словом, это означает, что эта строка в вашем register_post_typeзвонке:

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

должно превратиться в это:

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

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

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

0x61696f
источник
молодец спасибо! Просто чтобы уточнить, все, что мне нужно сделать для очистки правил, это перейти на страницу Настройки-> Постоянные ссылки и нажать «Сохранить изменения», правильно?
Джейк
4
Вам даже не нужно сохранять изменения. Достаточно просто открыть страницу настроек Постоянных ссылок (то есть, если ваш файл .htaccess доступен для записи. Если нет, нажмите сохранить изменения и вручную скопируйте код, который он возвращает в ваш .htaccess)
0x61696f
2
Это не похоже на работу для меня. Мои посты проектов все еще собираются example.com/projects/title-of-post. Я тоже посетил страницу Постоянных ссылок. Что может быть причиной этого? У меня нет никаких правил переписывания htaccess.
Дези
Вау, спасибо, что это была недостающая часть! Посещение страницы с постоянными ссылками не работало, а просто СОХРАНИЛО текущие настройки постоянной ссылки: :)
Александр Таубенкорб
Я продолжал менять вещи, не сбрасывая правила переписывания. Спасибо за совет!
Тан-007
15

У меня была эта проблема буквально 3 дня назад, потом я наткнулся на серию на wp.tutsplus.com . Я поменял свой собственный код, чтобы лучше ответить на ваш вопрос, но это то, чем я закончил после просмотра серии. Кроме того, имейте в виду, что это не проверено.

// sets custom post type
function my_custom_post_type() {
    register_post_type('Projects', array(   
       'label' => 'Projects','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'),
       // there are a lot more available arguments, but the above is plenty for now
    ));
}

add_action('init', 'my_custom_post_type');

// rewrites custom post type name
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переменной, что я и использовал в итоге.

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

cmegown
источник
1
Ответы, которые просто состоят из ссылок, как правило, считаются бесполезными, поскольку эти ресурсы могут (и, вероятно, будут) исчезать в будущем. Подведите итог содержания.
chrisguitarguy
Справедливо, я поработаю над соответствующей ревизией.
cmegown
11
Теперь мой ответ содержит код, аналогичный рабочему коду, который есть у меня в производственной среде, которая успешно переписывает URL-адрес пользовательского типа. Надеюсь, это окажется более полезным!
cmegown