Постоянная структура между двумя пользовательскими типами сообщений и таксономией

У меня есть настраиваемый тип сообщений под названием Сообщества , настраиваемый тип сообщений , называемый сообщениями сообщества , и таксономия в сообщениях сообщества под названием Сообщества .

Идея здесь заключается в том, что всякий раз, когда добавляется новое Сообщество , создается таксономический термин, соответствующий этому имени (если он еще не существует). Таким образом, пользователь теперь может писать записи в блоге по типу сообщений сообществ сообществ и классифицировать его в соответствии с таксономическим термином для этого города.

Вот как клиент нуждается в структуре permalink:

Тип почтовых отправлений:

example.com/community/{community-name} 

Единая City Post, классифицированная по соответствующей таксономии названия города:

 example.com/community/{community-name}/{article-about-community} 

Сейчас у меня есть следующий код:

 add_action ('init', 'register_post_type_city');
 function register_post_type_city () {

     $ menu_name = 'Сообщества';
     $ regular_name = 'Сообщества';
     $ synd_name = 'Сообщество';
     $ register_name = 'city';
     $ icon = 'dashicons-location-alt';

     $ labels = array (
         'name' => _x ($ regular_name, 'post type general name', 'textdomain'),
         'unique_name' => _x ($ unique_name, 'тип типа синдицированного типа', 'textdomain'),
         'menu_name' => _x ($ menu_name, 'admin menu', 'textdomain'),
         'name_admin_bar' => _x ($ exclusive_name, 'add new on admin bar', 'textdomain'),
         'add_new' => _x ('Добавить новый', $ register_name, 'textdomain'),
         'add_new_item' => __ ('Добавить новый'. $ synd_name, 'textdomain'),
         'new_item' => __ ('New'. $ synd_name, 'textdomain'),
         'edit_item' => __ ('Edit'. $ exclusive_name, 'textdomain'),
         'view_item' => __ ('View'. $ synd_name, 'textdomain'),
         'all_items' => __ ('All'. $ regular_name, 'textdomain'),
         'search_items' => __ ('Поиск'. $ regular_name, 'textdomain'),
         'parent_item_colon' => __ ('Parent'. $ regular_name. ':', 'textdomain'),
         'not_found' => __ ('No'. $ regular_name. 'found.', 'textdomain'),
         'not_found_in_trash' => __ ('No'. $ regular_name. 'найдено в Trash.', 'textdomain').
     );

     $ args = array (
         'labels' => $ labels,
         'public' => true,
         'publicly_queryable' => true,
         'show_ui' => true,
         'show_in_menu' => true,
         'query_var' => true,
         'rewrite' => array ( 
             'slug' => 'community',
             'with_front' => false
         ),
         'capability_type' => 'post',
         'has_archive' => 'community',
         'hierarchical' => true,
         'menu_position' => null,
         'menu_icon' => $ icon,
         'supports' => array ('title', 'editor', 'page-attributes', 'thumbnail')
     );
     register_post_type ($ register_name, $ args);
 }

 add_action ('init', 'register_city_post_taxonomy', 0);
 function register_city_post_taxonomy () {
     register_taxonomy (
         «община», 
         'City_post', 
         массив (
             'labels' => array (
                 'name' => 'Сообщества',   
                 'singular_name' => 'Новости сообщества',    
                 'search_items' => 'Поиск сообществ',    
                 'edit_item' => 'Изменить сообщество',    
                 'add_new_item' => 'Добавить новое сообщество'
             ),  
             'hierarchical' => true,
             'show_ui' => true,
             'show_admin_column' => true,
             'query_var' => true,    
             'rewrite' => array (
                 'slug' => 'сообщество / сообщества', 
                 'with_front' => false
             )
         )
     ); 
 }
 add_action ('init', 'register_post_type_city_post');
 function register_post_type_city_post () {

     $ menu_name = 'Сообщения сообщества';
     $ regular_name = 'Сообщения сообщества';
     $ synd_name = 'Сообщение сообщества';
     $ register_name = 'city_post';
     $ icon = 'dashicons-format-status';

     $ labels = array (
         'name' => _x ($ regular_name, 'post type general name', 'textdomain'),
         'unique_name' => _x ($ unique_name, 'тип типа синдицированного типа', 'textdomain'),
         'menu_name' => _x ($ menu_name, 'admin menu', 'textdomain'),
         'name_admin_bar' => _x ($ exclusive_name, 'add new on admin bar', 'textdomain'),
         'add_new' => _x ('Добавить новый', $ register_name, 'textdomain'),
         'add_new_item' => __ ('Добавить новый'. $ synd_name, 'textdomain'),
         'new_item' => __ ('New'. $ synd_name, 'textdomain'),
         'edit_item' => __ ('Edit'. $ exclusive_name, 'textdomain'),
         'view_item' => __ ('View'. $ synd_name, 'textdomain'),
         'all_items' => __ ('All'. $ regular_name, 'textdomain'),
         'search_items' => __ ('Поиск'. $ regular_name, 'textdomain'),
         'parent_item_colon' => __ ('Parent'. $ regular_name. ':', 'textdomain'),
         'not_found' => __ ('No'. $ regular_name. 'found.', 'textdomain'),
         'not_found_in_trash' => __ ('No'. $ regular_name. 'найдено в Trash.', 'textdomain').
     );

     $ args = array (
         'labels' => $ labels,
         'public' => true,
         'publicly_queryable' => true,
         'show_ui' => true,
         'show_in_menu' => true,
         'query_var' => true,
         'rewrite' => array ( 
             'slug' => 'сообщество /% community%',
             'with_front' => false
         ),
         'capability_type' => 'post',
         'has_archive' => false,
         'hierarchical' => true,
         'menu_position' => null,
         'menu_icon' => $ icon,
         'supports' => array ('title', 'editor', 'page-attributes', 'thumbnail')
     );
     register_post_type ($ register_name, $ args);
 }

 add_filter ('post_link', 'community_posts_type_permalink', 1, 3);
 add_filter ('post_type_link', 'community_posts_type_permalink', 1, 3);

 function community_posts_type_permalink ($ permalink, $ post_id, $ leavename) {

     $ post = get_post ($ post_id);

     if (strpos ($ permalink, '% community%') === FALSE || 'city_post'! = get_post_type ($ post)) {
         return $ permalink; 
     }

     if (! $ post) {
         return $ permalink;
     }

     $ terms = wp_get_object_terms ($ post-> ID, 'community');

     if (! is_wp_error ($ terms) &&! empty ($ terms) && is_object ($ terms [0])) {
         $ taxonomy_slug = $ terms [0] -> slug;
     } else {
         $ taxonomy_slug = 'no-community';
     }

     return str_replace ('% community%', $ taxonomy_slug, $ permalink);
 }

Все работает отлично, за исключением того, что я получаю 404 ошибки на отдельных страницах Community Post. Любой совет будет очень благодарен!

Solutions Collecting From Web of "Постоянная структура между двумя пользовательскими типами сообщений и таксономией"