Я пытаюсь установить свой тип сообщения staff
как ребенок страницы about-us
например:
Идти от example.com/staff/john-doe
в example.com/about-us/john-doe
В настоящее время я пробовал все возможные посты в Google и в стеке, но безрезультатно, я могу найти следующее решение: functions.php
, который добавляет мета-поле, позволяющее мне установить родительскую страницу вручную для отдельных сотрудников.
add_action('admin_menu', function() { remove_meta_box('pageparentdiv', 'chapter', 'normal');});
add_action('add_meta_boxes', function() { add_meta_box('chapter-parent', 'Part',
'chapter_attributes_meta_box', 'chapter', 'side', 'high');});
function chapter_attributes_meta_box($post) {
$post_type_object = get_post_type_object($post->post_type);
if ( $post_type_object->hierarchical ) {
$pages = wp_dropdown_pages(array('post_type' => 'part', 'selected' => $post->post_parent, 'name' => 'parent_id', 'show_option_none' => __('(no parent)'), 'sort_column'=> 'menu_order, post_title', 'echo' => 0));
if ( ! empty($pages) ) {
echo $pages;
} // end empty pages check
} // end hierarchical check.
}
Однако при сочетании этого с 'rewrite' => array('slug' => 'about-us'),
кажется причиной example.com/about-us/about-us/john-doe
и без этого example.com/staff/about-us/john-doe
ни работать правильно!
Во-первых, мне интересно, есть ли решение моей проблемы, описанной выше, и, во-вторых, есть ли лучший способ добиться этого и, возможно, не нужно вручную выбирать родительскую страницу для каждого отдельного сообщения, а скорее весь пользовательский тип сообщения, заданный как ребенок страницы?
Я буду обязательно обновлять, если я добьюсь прогресса в этом!
Чтобы не смущать вас больше, но причина, по которой я пытаюсь это сделать, связана с навигацией, поэтому моя система меню автоматически настраивается. Если бы это не было проблемой, я бы просто использовал перезапись и имел бы собственное меню, которое мне нужно было бы обновлять при каждом перемещении или добавлении страницы! Что, очевидно, не идеально, когда у вас несколько CPT.
Это может иметь какое-то отношение к вашему вызову register_post_type (). Ваше переписывание может выглядеть следующим образом:
'rewrite' => array('slug' => 'about-us', 'with_front' => false )
Часть «with_front» должна удалить все, что вы в данный момент добавляете к любому сообщению. Например, если в разделе постоянных ссылок вы добавляете все сообщения с персоналом (что, по-видимому, вы делаете, хотя это всего лишь предположение, поскольку я не вижу ваших настроек), with_front проигнорирует это.
С этим решением вам также не понадобится дополнительная функция метабокса.
Не забудьте посетить страницу с постоянными ссылками после этого изменения, чтобы убедиться, что постоянные ссылки сброшены, и вы не получите 401 …
Других решений пока нет …