Я щойно встановив відносини пост / батьків між публікацією типу "епізоди" та типом "мультфільм-серіал".
Я використовував цей біт коду, щоб додати у мета-поле, щоб призначити батькові іншого типу публікації:
add_action('admin_menu', function() {
remove_meta_box('pageparentdiv', 'episodes', 'normal');
});
add_action('add_meta_boxes', function() {
add_meta_box('episodes-parent', 'Cartoon Series', 'episodes_attributes_meta_box', 'episodes', 'side', 'default');
});
function episodes_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' => 'cartoon-series', '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.
}
Це працювало на екрані адміністратора, дозволяючи мені встановити серію як батьківську для епізоду, але коли я намагаюся переглянути публікацію, я отримую 404. Структура URL:
domain/episodes/series-name/episode-name
URL-адреса серії:
domain/cartoon-series/series-name
Я хотів би, щоб URL-адреса була такою:
domain/cartoon-series/series-name/episode-name
Що я пропускаю? Чи можна створити цілий допис для дитини іншого типу публікації? Отже, тоді я навіть міг отримати URL-адресу для списку епізодів:
domain/cartoon-series/series-name/episodes
Дякую! Метт
За запитом, ось код для двох спеціальних типів публікацій, про які йдеться:
$labels = array(
"name" => "Cartoon Series",
"singular_name" => "Cartoon Series",
"menu_name" => "Cartoon Series",
"all_items" => "All Cartoon Series",
"add_new" => "Add New",
"add_new_item" => "Add New Cartoon Series",
"edit" => "Edit",
"edit_item" => "Edit Cartoon Series",
"new_item" => "New Cartoon Series",
"view" => "View",
"view_item" => "View Cartoon Series",
"search_items" => "Search Cartoon Series",
"not_found" => "No Cartoon Series Found",
"not_found_in_trash" => "No Cartoon Series Found in Trash",
"parent" => "Parent Cartoon Series",
);
$args = array(
"labels" => $labels,
"description" => "",
"public" => true,
"show_ui" => true,
"has_archive" => true,
"show_in_menu" => true,
"exclude_from_search" => false,
"capability_type" => "post",
"map_meta_cap" => true,
"hierarchical" => true,
"rewrite" => array( "slug" => "cartoon-series", "with_front" => true ),
"query_var" => true,
"supports" => array( "title", "revisions", "thumbnail" ), );
register_post_type( "cartoon-series", $args );
$labels = array(
"name" => "Episodes",
"singular_name" => "Episode",
);
$args = array(
"labels" => $labels,
"description" => "",
"public" => true,
"show_ui" => true,
"has_archive" => true,
"show_in_menu" => true,
"exclude_from_search" => false,
"capability_type" => "post",
"map_meta_cap" => true,
"hierarchical" => true,
"rewrite" => array( "slug" => "episodes", "with_front" => true ),
"query_var" => true,
"supports" => array( "title", "revisions", "thumbnail" ), );
register_post_type( "episodes", $args );
Я використовую плагін CPT UI, тому не можу редагувати цей код безпосередньо. Це лише експортний код, який надає CPT.
У мене немає іншого коду, який би пов'язував два CPT. Можливо, саме цього мені не вистачає. Я щойно знайшов той код в Інтернеті, який розміщує метабокс на сторінці, щоб зробити посилання. Чи недостатньо, щоб виконати роботу? Схоже, він встановлює post_parent.
Дякую! Метт
pre_get_posts
щоб змінити запит без успіху, в чомусь складніше, що я не зміг зрозуміти. Як би мати кота бути батьком собаки. Я пропоную використовувати лише один ієрархічний тип публікації або встановити ритуалізацію, використовуючи метаполя .
parent_id
var запитів, і для встановлення взаємозв'язку не потрібно більше кодувати. Проблема полягає в тому, що створена URL не розпізнається WordPress. Я намагався знайти правило переписати , щоб воно працювало, але я не мав успіху. Зараз я розслідую рішення.