ЧПУ в custom post type
Каким образом можно задать ЧПУ для произольной таксономии и произольного типа постов таким образом?
Для таксономии:
http://example.com/category-1/sub-category-1/sub-category-2/
Для постов:
http://example.com/category-1/sub-category-1/sub-category-2/post-name/
У меня получается только в таком виде:
Для таксономии:
http://example.com/custom_taxonomy_name/category-1/sub-category-1/sub-category-2/
Для постов:
http://example.com/custom_post_name/category-1/sub-category-1/sub-category-2/post-name/
В коде ниже
custom_post_name = adv
custom_taxonomy_name = search
Вот код как делаю это:
<?php add_rewrite_tag('platform_category', '(.+)'); // Создаем произвольную таксономию function add_new_taxonomies() { register_taxonomy('platform', array('adv'), array( 'labels' => array( 'name' => 'Категории', /*......*/ ), 'public' => true, 'show_in_nav_menus' => true, 'show_ui' => true, 'show_tagcloud' => true, 'update_count_callback' => '_update_post_term_count', 'query_var' => true, 'hierarchical' => true, 'rewrite' => array( 'slug' => 'search', 'hierarchical' => true, 'with_front' => false ), ) ); } add_action( 'init', 'add_new_taxonomies', 0 ); // Создаем произвольный тип постов function create_post_type() { register_post_type( 'adv', array( 'labels' => array( 'name' => __( 'Объявления' ), /*......*/ ), 'public' => true, 'query_var' => true, 'publicly_queryable' => true, 'menu_position' => 5, 'rewrite' => array('slug' => '%platform_category%'), 'supports' => array('title', 'editor', 'thumbnail'), 'taxonomies' => array(), ) ); } add_action( 'init', 'create_post_type' ); // инициируем добавления типа // Заменим %platform_category% в ссылках постов на ссылку со всем деревом таксономии function wpa_platform_post_link( $post_link, $id = 0 ){ $post = get_post($id); if ( is_object( $post ) ){ $terms = wp_get_object_terms( $post->ID, 'platform' ); if( $terms ){ foreach($terms as $term) { $cats[] = $term->slug; } $cats = "adv/".implode("/", $cats); return str_replace( '%platform_category%' , $cats , $post_link ); } } return $post_link; } add_filter( 'post_type_link', 'wpa_platform_post_link', 10, 2 ); // Добавим правило для постов function add_ticket_rewrite_rules($rules) { $newrules = array(); $newrules['adv/(.+?)/([^/]+)$'] = 'index.php?adv=$matches[2]'; return array_merge($newrules,$rules); } add_filter('rewrite_rules_array', 'add_ticket_rewrite_rules');
Посмотри как сделано тут: https://wp-kama.ru/id_7637/chpu-dlya-treh-taksonomij-i-tipa-zapisi-odnovremenno.html
Отключи совсем rewrite у типа поста, хуком перехвати создание урл для этого типа и формируй динамически урл используя категории, все есть по ссылке выше.
Не поленись, прочитай весь код, там все понятно.
Да и вообще уже готово как по мне как раз что бы было все как у тебя. Возми его код и измени для себя.
Спасибо. Изучу все. Но сразу бросилось в глаза то что в URL присутствует:
"estate"
dom/estate/spain/valensiya/sale-rent/
То есть имя таксономии и имя типа записи в URL присутствует (правда в по ссылке они совпадают, а у меня разные). А хотелось бы избавиться от них вообще.
Что бы избавится совсем, то тогда просто пользуйся стандартными страницами и постами и рули категориями