Acabo de configurar una relación de publicación / padre entre un tipo de publicación "episodios" y un tipo de publicación "serie de dibujos animados".
Utilicé este bit de código para agregar en el cuadro de meta para asignar el padre de otro tipo de publicación:
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.
}
Eso funcionó en la pantalla de administración al permitirme configurar la serie como padre para el episodio, pero cuando intento ver la publicación, obtengo un 404. La estructura de la URL es:
domain/episodes/series-name/episode-name
La url para la serie es:
domain/cartoon-series/series-name
Me gustaría que la url del episodio fuera:
domain/cartoon-series/series-name/episode-name
¿Qué me estoy perdiendo? ¿Es posible hacer que un tipo de publicación completo sea el hijo de otro tipo de publicación? Entonces, incluso podría obtener la url para la lista de episodios:
domain/cartoon-series/series-name/episodes
Gracias! Matt
Según lo solicitado, aquí está el código para los dos tipos de publicaciones personalizadas en cuestión:
$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 );
Estoy usando el plugin CPT UI, así que no puedo editar ese código directamente. Ese es el código de exportación que proporciona la IU de CPT.
No tengo ningún otro código que vincule los dos CPT. Tal vez eso es lo que me estoy perdiendo. Acabo de encontrar ese código en línea que coloca el metabox en la página para hacer el enlace. ¿No es suficiente hacer el trabajo? Parece que establece el post_parent.
Gracias! Matt