Acabo de establecer una relación post / padre entre un tipo de episodio "episodios" y un tipo de publicación "serie de dibujos animados".
Usé 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 del administrador al permitirme configurar la serie como padre para el episodio, pero cuando trato de ver la publicación, obtengo un 404. La estructura de la URL es:
domain/episodes/series-name/episode-name
La url de la serie es:
domain/cartoon-series/series-name
Me gustaría que la url del episodio sea:
domain/cartoon-series/series-name/episode-name
¿Qué me estoy perdiendo? ¿Es posible hacer que una publicación completa escriba el hijo de otro tipo de publicación? Entonces, incluso podría obtener la url para que la lista de episodios sea:
domain/cartoon-series/series-name/episodes
¡Gracias! Mate
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 complemento CPT UI, por lo que no puedo editar ese código directamente. Ese es solo el código de exportación que proporciona CPT UI.
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! Mate
pre_get_posts
para alterar la consulta sin éxito, hay algo más complicado que no he podido entender. Es como tener un gato como padre de un perro. Sugiero usar solo un tipo de publicación jerárquica o establecer la relación mediante metacampos .
parent_id
var de consulta y no necesita más código para establecer la relación. El problema es que la URL generada no es reconocida por WordPress. He estado tratando de encontrar una regla de reescritura que lo haga funcionar, pero no he tenido éxito. Ahora estoy investigando una solución.