Тут я переглянув кожне запитання про користувацькі постійні посилання типу публікацій, але, здається, це проблеми або з переписаними користувальницькими таксономіями, або явна відсутність flush_rewrite_rules (). Але в моєму випадку я використовую лише спеціальний тип публікації (без систематики), встановлений як ієрархічний (тому я можу призначити відносини батько-дитина), з належною "підтримкою" метабокса атрибутів тощо, тощо. I Ви переписали правила переписання тисячі різних способів. Я пробував різні структури постійної посилання. Але дочірні URL-адреси завжди призводять до 404!
Спочатку у мене були незалежні спеціальні типи публікацій для елементів "батьків" та "дочірній" (використовуючи p2p), і, напевно, не виникло б проблем із використанням таксономії для "батьківського" групування - я знаю, що це було б семантично більш точним. Але для клієнта їм найпростіше візуалізувати ієрархію, коли "повідомлення" відображаються в адміністраторі так само, як і сторінки: просте дерево, де діти з’являються під батьківським, з префіксом "-" і в належний порядок. Також можна використовувати різні способи призначення замовлення через перетягування n-drop. Групування за допомогою таксономії (або p2p) призводить до плоского списку "постів" у списках адміністратора, що просто не так візуально очевидно.
Тож те, про що я хочу, - це буквально та сама поведінка, що і основні "сторінки", але з моїм користувацьким типом публікації. Я зареєстрував тип публікації так, як очікувалося, і в адміністраторі він працює відмінно - я можу призначити батьківський і меню_порядку для кожного "повідомлення" бюлетеня, вони відображаються правильно у списках редагування:
Spring 2012
— First Article
— Second Article
І їхні постійні посилання, здається, сконструйовані належним чином. Насправді, якщо я що-небудь змінив про структуру або навіть змінив кулю переписати, зареєструвавши тип публікації, вони автоматично оновлюються правильно, тому я знаю, що щось працює:
http://mysite.com/parent-page/child-page/ /* works for pages! */
http://mysite.com/post-type/parent-post/child-post/ /* should work? */
http://mysite.com/newsletter/spring-2012/ /* works! */
http://mysite.com/newsletter/spring-2012/first-article/ /* 404 */
http://mysite.com/newsletter/spring-2012/second-article/ /* 404 */
У мене також є стандартні основні "сторінки" з створеними ієрархічними зв’язками, і вони виглядають так само, як у адміністратора, але вони фактично працюють і на передній частині (і батьківські, і дочірні URL-адреси працюють нормально).
Моя структура постійної посилання встановлена на:
http://mysite.com/%postname%/
Я також спробував це (просто тому, що так багато інших відповідей, здавалося, вказували на необхідність, хоча в моєму випадку це не мало сенсу):
http://mysite.com/%category%/%postname%/
Аргументи CPT мого реєстру включають:
$args = array(
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'has_archive' => 'newsletter',
'hierarchical' => true,
'query_var' => true,
'supports' => array( 'title', 'editor', 'thumbnail', 'page-attributes' ),
'rewrite' => array( 'slug' => 'newsletter', 'with_front' => false ),
Єдина видима різниця між моїми спеціальними дітьми типу публікації та звичайною сторінкою дітьми - це те, що мій CPT має шлака на початку структури постійної посилання, а потім слідує за батьківським / дочірнім слизьком (де сторінки починаються лише з батьків / дочірніх слимаків, немає "префікса"). Чому це збило б речі, я не знаю. Дуже багато статей вказують на те, що саме так повинні поводитися такі ієрархічні постійні посилання CPT - але мої, хоч і добре сформовані, не працюють.
Що також мене бентежить, коли я вивчаю запити_варів для цієї сторінки 404 - вони, здається, містять правильні значення для WP, щоб "знайти" мої дочірні сторінки, але щось не працює.
$wp_query object WP_Query {46}
public query_vars -> array (58)
'page' => integer 0
'newsletter' => string(25) "spring-2012/first-article"
'post_type' => string(10) "newsletter"
'name' => string(13) "first-article"
'error' => string(0) ""
'm' => integer 0
'p' => integer 0
'post_parent' => string(0) ""
'subpost' => string(0) ""
'subpost_id' => string(0) ""
'attachment' => string(0) ""
'attachment_id' => integer 0
'static' => string(0) ""
'pagename' => string(13) "first-article"
'page_id' => integer 0
[...]
Я спробував це з різними темами, включаючи двадцять твельверів, просто щоб бути впевненим, що це не якийсь пропущений шаблон з мого боку.
Використовуючи Інспектор правил перезапису, це відображається для URL-адреси: http://mysite.com/newsletter/spring-2012/first-article/
newsletter/(.+?)(/[0-9]+)?/?$
newsletter: spring-2012/first-article
page:
(.?.+?)(/[0-9]+)?/?$
pagename: newsletter/spring-2012/first-article
page:
як відображається на іншій сторінці інспектора:
RULE:
newsletter/(.+?)(/[0-9]+)?/?$
REWRITE:
index.php?newsletter=$matches[1]&page=$matches[2]
SOURCE:
newsletter
Цей результат перезапису наштовхне мене на думку, що наступна "не дуже" постійна посилання спрацює:
http://mysite.com/?newsletter=spring-2012&page=first-article
Це не 404, але він показує батьківський пункт CPT "бюлетень", а не дочірню. Запит виглядає так:
Array
(
[page] => first-article
[newsletter] => spring-2012
[post_type] => newsletter
[name] => spring-2012
)
post_name
колонці немає.