Я знаю, что люди спрашивали об этом раньше и дошли до того, что добавили пользовательский тип сообщения и переписали для постоянной ссылки.
Проблема в том, что у меня есть 340 существующих категорий, которые я хотел бы продолжить использовать. Я имел обыкновение видеть / category / subcategory / postname
Теперь у меня есть кусок customposttype / postname. Выбор категории больше не отображается в постоянной ссылке ... Я не изменил настройку постоянной ссылки в админке на что-то другое.
Что-то мне не хватает или нужно добавить к этому коду?
function jcj_club_post_types() {
register_post_type( 'jcj_club', array(
'labels' => array(
'name' => __( 'Jazz Clubs' ),
'singular_name' => __( 'Jazz Club' ),
'add_new' => __( 'Add New' ),
'add_new_item' => __( 'Add New Jazz Club' ),
'edit' => __( 'Edit' ),
'edit_item' => __( 'Edit Jazz Clubs' ),
'new_item' => __( 'New Jazz Club' ),
'view' => __( 'View Jazz Club' ),
'view_item' => __( 'View Jazz Club' ),
'search_items' => __( 'Search Jazz Clubs' ),
'not_found' => __( 'No jazz clubs found' ),
'not_found_in_trash' => __( 'No jazz clubs found in Trash' ),
'parent' => __( 'Parent Jazz Club' ),
),
'public' => true,
'show_ui' => true,
'publicly_queryable' => true,
'exclude_from_search' => false,
'menu_position' => 5,
'query_var' => true,
'supports' => array(
'title',
'editor',
'comments',
'revisions',
'trackbacks',
'author',
'excerpt',
'thumbnail',
'custom-fields',
),
'rewrite' => array( 'slug' => 'jazz-clubs-in', 'with_front' => true ),
'taxonomies' => array( 'category','post_tag'),
'can_export' => true,
)
);
Ответы:
При добавлении пользовательских правил перезаписи типов записей необходимо учитывать две точки атаки:
Переписать правила
Это происходит, когда правила перезаписи генерируются
wp-includes/rewrite.php
вWP_Rewrite::rewrite_rules()
. WordPress позволяет фильтровать правила перезаписи для определенных элементов, таких как записи, страницы и различные типы архивов. Где вы видите часть должна быть именем вашего пользовательского почтового типа. В качестве альтернативы вы можете использовать фильтр, если вы не стираете стандартные правила публикации.posttype_rewrite_rules
posttype
post_rewrite_rules
Далее нам нужна функция для генерации правил перезаписи:
Главное, на что следует обратить внимание, если вы решите поиграть, это логическое значение «Walk каталоги». Он генерирует правила перезаписи для каждого сегмента permastruct и может вызвать несоответствия правил перезаписи. При запросе URL-адреса WordPress массив правил перезаписи проверяется сверху вниз. Как только совпадение найдено, оно будет загружать все, что встречалось, например, если у вашей permastruct есть жадное совпадение, например.
/%category%/%postname%/
каталоги for и walk включены и выведут правила перезаписи для/%category%/%postname%/
AND,/%category%/
которые будут соответствовать чему угодно. Если это произойдет слишком рано, вы облажались.Permalinks
Это функция, которая анализирует постоянные ссылки типа записей и преобразует постоянную структуру (например, '/% year% /% monthnum% /% postname% /') в фактический URL.
Следующая часть представляет собой простой пример того, что в идеале должно быть версией
get_permalink()
функции, найденной вwp-includes/link-template.php
. Пользовательские постоянные ссылки на посты генерируются поget_post_permalink()
более размытой версииget_permalink()
.get_post_permalink()
фильтруется,post_type_link
поэтому мы используем это для создания пользовательской пермаструктуры.Как уже упоминалось, это очень упрощенный пример создания настраиваемого набора правил перезаписи и постоянных ссылок, и он не особенно гибок, но этого должно быть достаточно для начала работы.
Мошенничество
Я написал плагин, который позволяет вам определять пермаструктуры для любых пользовательских типов постов, но, как вы можете использовать
%category%
в структуре постоянных ссылок для постов, мой плагин поддерживает%custom_taxonomy_name%
любыеcustom_taxonomy_name
ваши собственные таксономии, например, где указано название вашей таксономии.%club%
,Это будет работать так, как вы ожидаете, с иерархической / неиерархической таксономией.
http://wordpress.org/extend/plugins/wp-permastructure/
источник
$permalink = home_url(...
переопределяется$permalink = user_trailingslashit(...
и никогда не используется. Или я что-то упустил?$post_link
даже не определен. Это должно было быть$permalink = user_trailingslashit( $permalink, 'single' );
?$permalink
не$post_link
. Ура :)Получил решение!
Чтобы иметь иерархические постоянные ссылки для пользовательского типа записи, установите плагин « Пользовательские типы сообщений» ( https://wordpress.org/plugins/custom-post-type-permalinks/ ).
Обновить зарегистрированный тип сообщения. У меня есть имя типа сообщения в качестве справочного центра
А вот и зарегистрированная таксономия
Эта строка делает вашу постоянную работу
вы можете удалить
%post_id%
и можете сохранить/%help_centre_category%/%postname%/"
Не забудьте удалить постоянные ссылки с приборной панели.
источник
Я нашел РЕШЕНИЕ !!!
(После того, как бесконечные исследования .. Я могу иметь ТАМОЖЕННЫЙ ПОСТ ТИП пермалинки как:
example.com/category/sub_category/my-post-name
вот код (в functions.php или плагине):
источник
У вас есть несколько ошибок с вашим кодом. Я очистил ваш существующий код:
Замените свой код на код выше и посмотрите, работает ли он. Ответьте, если у вас есть дополнительные вопросы, и я постараюсь помочь.
РЕДАКТИРОВАТЬ:
Я заметил, что я не учел
'has_archive' => true
.источник