Ho appena creato una relazione post / genitore tra un tipo di post "episodi" e un tipo di post "serie di cartoni animati".
Ho usato questo pezzetto di codice da aggiungere nella meta box per assegnare il genitore da un altro tipo di post:
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.
}
Ha funzionato sulla schermata di amministrazione nel permettermi di impostare la serie come genitore dell'episodio, ma quando provo a visualizzare il post, ottengo un 404. La struttura dell'URL è:
domain/episodes/series-name/episode-name
L'URL per la serie è:
domain/cartoon-series/series-name
Vorrei che l'URL dell'episodio fosse:
domain/cartoon-series/series-name/episode-name
Cosa mi sto perdendo? È possibile impostare un intero tipo di post come figlio di un altro tipo di post? Quindi, potrei anche ottenere l'URL per l'elenco degli episodi:
domain/cartoon-series/series-name/episodes
Grazie! opaco
Come richiesto, ecco il codice per i due tipi di post personalizzati in questione:
$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 );
Sto usando il plug-in dell'interfaccia utente CPT, quindi non posso modificare direttamente quel codice. Questo è solo il codice di esportazione fornito dall'interfaccia utente CPT.
Non ho altri codici che collegano i due CPT. Forse è quello che mi manca. Ho appena trovato quel codice online che inserisce il metabox nella pagina per fare il collegamento. Non è abbastanza per fare il lavoro? Sembra che imposta post_parent.
Grazie! opaco
pre_get_posts
per modificare la query senza successo, è coinvolto qualcosa di più complicato che non sono stato in grado di capire. Come avere un gatto essere il genitore di un cane. Suggerisco di usare solo un tipo di post gerarchico o di impostare la realtionship usando i meta field .
parent_id
query var e non ha bisogno di altro codice per impostare la relazione. Il problema è che l'URL generato non è riconosciuto da WordPress. Ho cercato di trovare una regola di riscrittura che lo faccia funzionare ma non ho avuto successo. Sto studiando una soluzione.