Acabei de configurar uma relação de postagem / pai entre um tipo de postagem "episódios" e um tipo de postagem "série de desenhos animados".
Usei esse bit de código para adicionar na caixa de meta para atribuir o pai de outro tipo de postagem:
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.
}
Isso funcionou na tela do administrador, permitindo-me definir a série como pai do episódio, mas quando tento visualizar a postagem, recebo um 404. A estrutura do URL é:
domain/episodes/series-name/episode-name
O URL da série é:
domain/cartoon-series/series-name
Eu gostaria que o URL do episódio fosse:
domain/cartoon-series/series-name/episode-name
o que estou perdendo? É possível tornar uma postagem inteira o filho de outro tipo de postagem? Então, eu poderia até obter o URL da lista de episódios:
domain/cartoon-series/series-name/episodes
Obrigado! Matt
Conforme solicitado, eis o código para os dois tipos de postagem personalizados em questão:
$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 );
Estou usando o plug-in da interface do usuário do CPT, portanto não posso editar esse código diretamente. Esse é apenas o código de exportação que a interface do usuário da CPT fornece.
Não tenho outro código que vincule os dois CPTs. Talvez seja isso que estou sentindo falta. Acabei de encontrar o código online que coloca o metabox na página para fazer o link. Não é suficiente fazer o trabalho? Parece que define o post_parent.
Obrigado! Matt
pre_get_posts
a alterar a consulta sem êxito, algo mais complicado está envolvido que eu não consegui entender. Como ter um gato como pai de um cachorro. Eu sugiro usar apenas um tipo de postagem hierárquica ou definir o realtion usando metadados .
parent_id
consulta var e não precisa de mais código para definir o relacionamento. O problema é que o URL gerado não é reconhecido pelo WordPress. Eu tenho tentado encontrar uma regra de reescrita que a faça funcionar, mas não tive sucesso. Agora estou investigando uma solução.