Precisa de ajuda para entender uma reescrita com taxonomia de vários níveis

Estou tentando aprender a rewrite. Não ter realmente qualquer compreensão da regex, obviamente, não é um bom começo.

Tenho books cpt e uma book-publishers-series books taxonomia. Eu escrevi a seguinte reescrita que combinará para o livro e colocará a taxonomia na url, mas não consigo chegar a páginas filho da taxonomia porque o WP acha que a última parte da string é o título do livro.

 add_rewrite_rule( '^publishing/books/(.+?)/([^/]+)/?$','index.php?book-publishers-series=$matches[1]&books=$matches[2]','top' ); 

O que eu gostaria era ter o seguinte:

 publishing/books/ <-- The archive page for the books cpt publishing/books/parent <-- The archive page for the parent taxonomy term publishing/books/parent/child <-- The archive page for the child taxonomy term publishing/books/parent/child/book <-- The single page for the book 

A parte complicada é que o livro não pode estar sob um termo infantil. Pode ser apenas sob um termo de nível de pai. Então, eu poderia ter urls como:

 publishing/books/parent-level/book 

Então, como escrevo a reescrita de uma maneira que diz à WP que a área de taxonomia pode ter 1 ou mais níveis de profundidade? No entanto, o último nível pode ser apenas o arquivo de termos de taxonomia infantil e não o próprio livro. Então, nem sempre posso dizer que o livro estará na posição X na url. Por essa razão, não posso fazer o que esse cara fez: como criar uma estrutura de permalink com taxonomias customizadas e tipos de postagem personalizados como base-name / parent-tax / child-tax / custom-post-type-name Ele tinha uma Defina a profundidade onde sua página única cpt seria sempre. Agora, a regra de reescrita eu tenho trabalho em todos os lugares que testei, exceto para quando eu quero ver um arquivo de taxonomia de nível filho. Acha que deve ser a única página do livro.

Abaixo está o código para o meu cpt e a taxonomia e as funções que estou usando para replace os curingas de rewrite os termos de taxonomia.

Qualquer ajuda na decodificação disso seria muito apreciada! Obrigado!


 $labels = array( "name" => "Books", "singular_name" => "Book", "menu_name" => "Books", "all_items" => "All Books", "add_new" => "Add New", "add_new_item" => "Add New Book", "edit" => "Edit", "edit_item" => "Edit Book", "new_item" => "New Book", "view" => "View", "view_item" => "View Book", "search_items" => "Search Books", "not_found" => "No Books Found", "not_found_in_trash" => "No Books Found in Trash", "parent" => "Parent Book", ); $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" => false, "rewrite" => array( "slug" => "publishing/books/%book-publishers-series%", "with_front" => true ), "query_var" => true, "supports" => array( "title", "revisions", "thumbnail" ), "taxonomies" => array( "book-publishers-series", "series" ) ); register_post_type( "books", $args ); $labels = array( "name" => "book-publishers-series", "label" => "Book Publishers/Series", "menu_name" => "Book Publishers/Series", "all_items" => "All Book Publishers/Series", "edit_item" => "Edit Book Publisher/Series", "view_item" => "View Book Publisher/Series", "update_item" => "Update Book Publisher/Series", "add_new_item" => "Add New Book Publisher/Series", "new_item_name" => "New Book Publisher/Series", "parent_item" => "Parent Book Type/Genre", "parent_item_colon" => "Parent Book Type/Genre:", "search_items" => "Search Book Publishers/Series", "popular_items" => "Popular Book Publishers/Series", "add_or_remove_items" => "Add or Remove Book Publishers/Series", "not_found" => "No Book Publishers/Series", ); $args = array( "labels" => $labels, "hierarchical" => true, "label" => "Book Publishers/Series", "show_ui" => true, "query_var" => true, "rewrite" => array( 'slug' => 'publishing/books', 'with_front' => true true), "show_admin_column" => false, ); register_taxonomy( "book-publishers-series", array( "books" ), $args ); function rewrite_add_taxonomy( $link, $taxonomy, $default ) { // Get post $post = get_post($post_id); if (!$post) return $permalink; // Get taxonomy terms $terms = wp_get_object_terms($post->ID, $taxonomy); if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0])) { $taxonomy_slug = $terms[0]->slug; if ($terms[0]->parent) { $parent_term = get_term($terms[0]->parent, $taxonomy); $taxonomy_slug = $parent_term->slug.'/'.$taxonomy_slug; } } else { $taxonomy_slug = $default; } return str_replace('%'.$taxonomy.'%', $taxonomy_slug, $link); } function append_query_string( $link, $post ) { if ( 'books' == get_post_type( $post ) ) { return rewrite_add_taxonomy( $link, 'book-publishers-series', 'no-category' ); } return $link; } add_filter( 'post_type_link', 'append_query_string', 10, 2 ); 

Solutions Collecting From Web of "Precisa de ajuda para entender uma reescrita com taxonomia de vários níveis"