Intereting Posts
Добавление настраиваемой страницы администрирования Multisite / network – автоматическая саморегистрация, настройка блога Как добавить новый шаблон на мой сайт Создать заголовки и миниатюры в качестве ссылок на пользовательские типы сообщений? Все мои сообщения не отображаются, только заголовок отображается на главной странице Как отобразить великие дочерние элементы таксономии? Добавить строку запроса ко всем ссылкам на сайте У администратора не хватает прав администратора после взлома и не может восстановить Как правильно отображать дату, которая хранится в базе данных в виде обратного 8-значного числа из дополнительных пользовательских полей? Какой метод лучше всего запускать в сценарии Shift-Enter в tinyMCE (wp 3.3.1) не работает Ошибка базы данных WordPress в (новой) переустановке wp-super-cache исключает файл из кэширования Используя polylang, как я могу видеть, какая должность является «оригинальной», а какие «переведенные дети»? WordPress Последние комментарии Виджет исключает собственные комментарии

WP Rewrite Rules – Пользовательский тип сообщения и таксономия

Я несколько дней бил головой о стену, пытаясь понять это. У меня есть настраиваемый тип сообщений и пользовательская таксономия, и я пытаюсь заставить мой URL работать.

Вот структура URL, для которой я собираюсь: http://url.dev/custom-post-type/taxonomy/post-name/

Первые две части работают. Я могу перейти только к custom-post-type и он использует файл archive-custom-post-type.php . Я также могу перейти в /custom-post-type/taxonomy и он использует мою таксономию name.php .

Однако, когда я пытаюсь перейти к фактическому сообщению, он дает мне страницу ошибок 404. Я использую плагин Rewrite Analyzer , и, похоже, мои правила перезаписи верны. Вот несколько скриншотов.

введите описание изображения здесь

введите описание изображения здесь

Это выглядит правильно, вот что должно произойти. Но я получаю ошибку 404, когда пытаюсь перейти на одну из страниц одного продукта.

Вот мое фактическое правило перезаписи в моих functions.php

 function taxonomy_slug_rewrite($wp_rewrite) { $rules = array(); // get all custom taxonomies $taxonomies = get_taxonomies(array('_builtin' => false), 'objects'); // get all custom post types $post_types = get_post_types(array('public' => true, '_builtin' => false), 'objects'); foreach ($post_types as $post_type) { foreach ($taxonomies as $taxonomy) { // go through all post types which this taxonomy is assigned to foreach ($taxonomy->object_type as $object_type) { // check if taxonomy is registered for this custom type if ($object_type == $post_type->rewrite['slug']) { // get category objects $terms = get_categories(array('type' => $object_type, 'taxonomy' => $taxonomy->name, 'hide_empty' => 0)); // make rules foreach ($terms as $term) { $rules[$object_type . '/' . $term->slug . '/([^/]*)/?'] = 'index.php?pagename=$matches[1]&' . $term->taxonomy . '=' . $term->slug; } } } } } // merge with global rules $wp_rewrite->rules = $rules + $wp_rewrite->rules; } add_filter('generate_rewrite_rules', 'taxonomy_slug_rewrite'); , function taxonomy_slug_rewrite($wp_rewrite) { $rules = array(); // get all custom taxonomies $taxonomies = get_taxonomies(array('_builtin' => false), 'objects'); // get all custom post types $post_types = get_post_types(array('public' => true, '_builtin' => false), 'objects'); foreach ($post_types as $post_type) { foreach ($taxonomies as $taxonomy) { // go through all post types which this taxonomy is assigned to foreach ($taxonomy->object_type as $object_type) { // check if taxonomy is registered for this custom type if ($object_type == $post_type->rewrite['slug']) { // get category objects $terms = get_categories(array('type' => $object_type, 'taxonomy' => $taxonomy->name, 'hide_empty' => 0)); // make rules foreach ($terms as $term) { $rules[$object_type . '/' . $term->slug . '/([^/]*)/?'] = 'index.php?pagename=$matches[1]&' . $term->taxonomy . '=' . $term->slug; } } } } } // merge with global rules $wp_rewrite->rules = $rules + $wp_rewrite->rules; } add_filter('generate_rewrite_rules', 'taxonomy_slug_rewrite'); 

Есть ли что-то, что я делаю неправильно?

Если я верну свои постоянные ссылки по умолчанию, я могу перейти к: http: //uss.local/? Ultrasound-equipment = sequoia-512 & equipment-manufacturer = acuson, и все работает отлично. Но когда я переключаюсь на «Post Name», он не работает.

Solutions Collecting From Web of "WP Rewrite Rules – Пользовательский тип сообщения и таксономия"

Вы можете достичь этого, не добавляя правила для каждого термина с помощью аргумента rewrite когда вы регистрируете свой тип сообщения и таксономию. Единственное дополнительное правило, которое вам нужно, это обработать разбивку на страницы для таксономии.

Сначала зарегистрируйте тип сообщения. Важное значение имеет порядок, в котором вы регистрируете тип сообщения и таксономию! Я упустил большинство аргументов, чтобы сосредоточиться на важных битах:

 $args = array( 'has_archive' => 'custom-type', 'rewrite' => array( 'slug' => 'custom-type/%custom-tax%', 'with_front' => false ) ); register_post_type( 'custom-type', $args ); 

Затем зарегистрируйте таксономию:

 $args = array( 'rewrite' => array( 'slug' => 'custom-type', 'with_front' => false ) ); register_taxonomy( 'custom-tax', array( 'custom-type' ), $args ); 

Затем добавьте правило перезаписи для обработки таксономии:

 function wpd_taxonomy_pagination_rewrites(){ add_rewrite_rule( 'custom-type/([^/]+)/page/([0-9]+)/?$', 'index.php?custom-tax=$matches[1]&paged=$matches[2]', 'top' ); } add_action( 'init', 'wpd_taxonomy_pagination_rewrites' ); , function wpd_taxonomy_pagination_rewrites(){ add_rewrite_rule( 'custom-type/([^/]+)/page/([0-9]+)/?$', 'index.php?custom-tax=$matches[1]&paged=$matches[2]', 'top' ); } add_action( 'init', 'wpd_taxonomy_pagination_rewrites' ); которого function wpd_taxonomy_pagination_rewrites(){ add_rewrite_rule( 'custom-type/([^/]+)/page/([0-9]+)/?$', 'index.php?custom-tax=$matches[1]&paged=$matches[2]', 'top' ); } add_action( 'init', 'wpd_taxonomy_pagination_rewrites' ); 

И чтобы получить выбранный термин в постоянной post_type_link , filter post_type_link :

 function wpd_post_link( $post_link, $id = 0 ){ $post = get_post($id); if ( is_object( $post ) && $post->post_type == 'custom-type' ){ $terms = wp_get_object_terms( $post->ID, 'custom-tax' ); if( $terms ){ foreach( $terms as $term ){ if( 0 == $term->parent ){ return str_replace( '%custom-tax%' , $term->slug , $post_link ); } } } else { return str_replace( '%custom-tax%' , 'uncategorized', $post_link ); } } return $post_link; } add_filter( 'post_type_link', 'wpd_post_link', 1, 3 );