Intereting Posts
Как получить идентификатор или URL-адрес изображения в сообщении изображения? Как я могу определить параметры, необходимые для функции_widget ()? wordpress удаляет просмотры из ссылок действий в настраиваемом сообщении Получить изображение из родительской категории Различные заголовки для каждой страницы в дочерней теме двадцать тринадцать wp_ajax () вопрос .. не используя wp_enqueue_script? Как отозвать другое название на страницу, если оно открыто на мобильном телефоне Android Как найти все доступные крючки в теме добавление пользовательского html-кода в функцию wp_nav_menu Добавить вложение изображения для публикации через кодирование? WP List Table пользовательское окно быстрого редактирования – отсутствие метаданных сообщений и изменение столбцов в submit Предупреждение. Недействительный аргумент, предоставленный foreach (). при создании WP_query $ wpdb-> insert_id Добавление строки запроса только к одному URL-адресу страницы Как интегрировать таблицу пользовательских баз данных в WordPress и использовать функции WordPress

Разбивка страниц WordPress для пользовательской таксономии пользовательского типа

У меня есть индивидуальное case-study котором у меня зарегистрировано несколько таксономий. Я хотел создать следующую структуру URL:

  • Архив: domain.com/post_type/
  • Таксономия: domain.com/post_type/tax_name/
  • Сообщение: domain.com/post_type/post_name/

Обоснование этого состоит в том, что в одном столбце может быть несколько таксономий.

Проблема заключается в том, что на странице таксономии, когда я перечисляю связанные должности, если я использую posts_nav_link() она работает на главной странице архива, но возвращает 404 для каждой таксономии, с одной из них.

Вот как я зарегистрировал тип сообщения:

 function viamo_register_post_types() { $case_studies_labels = array( 'name' => __( 'Case Studies', 'viamo' ), 'singular_name' => __( 'Case Study', 'viamo' ), 'add_new' => _x( 'Add New Case Study', 'viamo', 'viamo' ), 'add_new_item' => __( 'Add New Case Study', 'viamo' ), 'edit_item' => __( 'Edit Case Study', 'viamo' ), 'new_item' => __( 'New Case Study', 'viamo' ), 'view_item' => __( 'View Case Study', 'viamo' ), 'search_items' => __( 'Search Case Studies', 'viamo' ), 'not_found' => __( 'No Services found', 'viamo' ), 'not_found_in_trash' => __( 'No Services found in Trash', 'viamo' ), 'parent_item_colon' => __( 'Parent Service:', 'viamo' ), 'menu_name' => __( 'Case Studies', 'viamo' ), ); $case_studies_args = array( 'labels' => $case_studies_labels, 'hierarchical' => false, 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'show_in_admin_bar' => true, 'menu_position' => null, 'menu_icon' => 'dashicons-awards', 'show_in_nav_menus' => true, 'publicly_queryable' => true, 'exclude_from_search' => false, 'has_archive' => 'case-studies', 'query_var' => true, 'can_export' => true, 'rewrite' => array( 'slug' => 'case-studies' ), 'capability_type' => 'post', 'supports' => array('title', 'thumbnail', 'editor', 'revisions') ); register_post_type( 'case-study', $case_studies_args ); } add_action( 'init', 'viamo_register_post_types' ); 

Затем таксономии регистрируются следующим образом:

 function viamo_register_taxonomomies() { $sector_labels = array( 'name' => _x( 'Sectors', 'Taxonomy plural name', 'viamo' ), 'singular_name' => _x( 'Sector', 'Taxonomy singular name', 'viamo' ), 'search_items' => __( 'Search Sectors', 'viamo' ), 'popular_items' => __( 'Popular Sectors', 'viamo' ), 'all_items' => __( 'All Sectors', 'viamo' ), 'parent_item' => __( 'Parent Sector', 'viamo' ), 'parent_item_colon' => __( 'Parent Sector', 'viamo' ), 'edit_item' => __( 'Edit Sector', 'viamo' ), 'update_item' => __( 'Update Sector', 'viamo' ), 'add_new_item' => __( 'Add New Sector', 'viamo' ), 'new_item_name' => __( 'New Sector Name', 'viamo' ), 'add_or_remove_items' => __( 'Add or remove Sectors', 'viamo' ), 'choose_from_most_used' => __( 'Choose from most used Sector', 'viamo' ), 'menu_name' => __( 'Sectors', 'viamo' ), ); $sector_args = array( 'labels' => $sector_labels, 'public' => true, 'show_in_nav_menus' => true, 'show_admin_column' => false, 'hierarchical' => true, 'show_tagcloud' => true, 'show_ui' => true, 'query_var' => true, 'rewrite' => array( 'slug' => 'case-studies'), 'query_var' => true, 'capabilities' => array(), ); register_taxonomy( 'sector', array( 'case-study'), $sector_args ); $locations_labels = array( 'name' => _x( 'Locations', 'Taxonomy plural name', 'viamo' ), 'singular_name' => _x( 'Location', 'Taxonomy singular name', 'viamo' ), 'search_items' => __( 'Search Locations', 'viamo' ), 'popular_items' => __( 'Popular Locations', 'viamo' ), 'all_items' => __( 'All Locations', 'viamo' ), 'parent_item' => __( 'Parent Location', 'viamo' ), 'parent_item_colon' => __( 'Parent Location', 'viamo' ), 'edit_item' => __( 'Edit Location', 'viamo' ), 'update_item' => __( 'Update Location', 'viamo' ), 'add_new_item' => __( 'Add New Location', 'viamo' ), 'new_item_name' => __( 'New Location Name', 'viamo' ), 'add_or_remove_items' => __( 'Add or remove Locations', 'viamo' ), 'choose_from_most_used' => __( 'Choose from most used Location', 'viamo' ), 'menu_name' => __( 'Locations', 'viamo' ), ); $locations_args = array( 'labels' => $locations_labels, 'public' => true, 'show_in_nav_menus' => true, 'show_admin_column' => false, 'hierarchical' => true, 'show_tagcloud' => true, 'show_ui' => true, 'query_var' => true, 'rewrite' => array( 'slug' => 'case-studies'), 'query_var' => true, 'capabilities' => array(), ); register_taxonomy( 'location', array( 'case-study'), $locations_args ); $service_labels = array( 'name' => _x( 'Services', 'Taxonomy plural name', 'viamo' ), 'singular_name' => _x( 'Service', 'Taxonomy singular name', 'viamo' ), 'search_items' => __( 'Search Services', 'viamo' ), 'popular_items' => __( 'Popular Services', 'viamo' ), 'all_items' => __( 'All Services', 'viamo' ), 'parent_item' => __( 'Parent Service', 'viamo' ), 'parent_item_colon' => __( 'Parent Service', 'viamo' ), 'edit_item' => __( 'Edit Service', 'viamo' ), 'update_item' => __( 'Update Service', 'viamo' ), 'add_new_item' => __( 'Add New Service', 'viamo' ), 'new_item_name' => __( 'New Service Name', 'viamo' ), 'add_or_remove_items' => __( 'Add or remove Services', 'viamo' ), 'choose_from_most_used' => __( 'Choose from most used Service', 'viamo' ), 'menu_name' => __( 'Services', 'viamo' ), ); $service_args = array( 'labels' => $service_labels, 'public' => true, 'show_in_nav_menus' => true, 'show_admin_column' => false, 'hierarchical' => true, 'show_tagcloud' => true, 'show_ui' => true, 'query_var' => true, 'rewrite' => array( 'slug' => 'case-studies'), 'query_var' => true, 'capabilities' => array(), ); register_taxonomy( 'service', array( 'case-study' ), $service_args ); } add_action( 'init', 'viamo_register_taxonomomies' ); 

Следуя статье, которую я прочитал для получения желаемого URL-адреса, я затем использую следующую функцию для расширения hook_rewrite_rules:

 function generate_taxonomy_rewrite_rules( $wp_rewrite ) { $rules = array(); $post_types = get_post_types(array('name' => 'case-study', 'public' => true, '_builtin' => false ), 'objects'); $taxonomies = array( 'sector' => get_taxonomies(array('name' => 'sector', 'public' => true, '_builtin' => false ), 'objects'), 'service' => get_taxonomies(array('name' => 'service', 'public' => true, '_builtin' => false ), 'objects'), 'location' => get_taxonomies(array('name' => 'location', 'public' => true, '_builtin' => false ), 'objects') ); foreach ( $post_types as $post_type ) { $post_type_name = $post_type->name; // 'case-study' $post_type_slug = $post_type->rewrite['slug']; // 'case-studies' foreach ( $taxonomies as $key => $taxonomy ) { $taxonomy = $taxonomy[$key]; if ( $taxonomy->object_type[0] == $post_type_name ) { $terms = get_categories( array( 'type' => $post_type_name, 'taxonomy' => $taxonomy->name, 'hide_empty' => 0 ) ); foreach ( $terms as $term ) { $rules[$post_type_slug . '/' . $term->slug . '/?$'] = 'index.php?' . $term->taxonomy . '=' . $term->slug; } } } } $wp_rewrite->rules = $rules + $wp_rewrite->rules; } add_action('generate_rewrite_rules', 'generate_taxonomy_rewrite_rules'); , function generate_taxonomy_rewrite_rules( $wp_rewrite ) { $rules = array(); $post_types = get_post_types(array('name' => 'case-study', 'public' => true, '_builtin' => false ), 'objects'); $taxonomies = array( 'sector' => get_taxonomies(array('name' => 'sector', 'public' => true, '_builtin' => false ), 'objects'), 'service' => get_taxonomies(array('name' => 'service', 'public' => true, '_builtin' => false ), 'objects'), 'location' => get_taxonomies(array('name' => 'location', 'public' => true, '_builtin' => false ), 'objects') ); foreach ( $post_types as $post_type ) { $post_type_name = $post_type->name; // 'case-study' $post_type_slug = $post_type->rewrite['slug']; // 'case-studies' foreach ( $taxonomies as $key => $taxonomy ) { $taxonomy = $taxonomy[$key]; if ( $taxonomy->object_type[0] == $post_type_name ) { $terms = get_categories( array( 'type' => $post_type_name, 'taxonomy' => $taxonomy->name, 'hide_empty' => 0 ) ); foreach ( $terms as $term ) { $rules[$post_type_slug . '/' . $term->slug . '/?$'] = 'index.php?' . $term->taxonomy . '=' . $term->slug; } } } } $wp_rewrite->rules = $rules + $wp_rewrite->rules; } add_action('generate_rewrite_rules', 'generate_taxonomy_rewrite_rules'); 

Чтобы уточнить следующие URL-адреса, выполните следующие действия:

  1. domain.com/case-studies/page/2/ (это основная разбивка по страницам архива)
  2. domain.com/case-studies/service_1/page/2/ (это таксономия, которая зарегистрирована последним)

И эти 404:

  1. domain.com/case-studies/sector_1/page/2/ (это таксономия, которая зарегистрирована первой)
  2. domain.com/case-studies/location_1/page/2/ (это таксономия, которая зарегистрирована на втором месте)

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

Как я могу изменить таксономию, чтобы страницы для каждой таксономии работали?

Solutions Collecting From Web of "Разбивка страниц WordPress для пользовательской таксономии пользовательского типа"