Здравствуйте знатоки wordpress. Переопубликовываю вопрос так как никто не смог помочь, теперь немного другой) Помогите пожалуйста разобраться со следующим вопросом.
Есть произвольный тип постов и произвольная таксономия.
add_action( 'init', 'register_cpt_tovary' );
function register_cpt_tovary() {
$labels = array(
'name' => _x( 'Все товары', 'tovary' ),
'singular_name' => _x( 'Товар', 'tovary' ),
'add_new' => _x( 'Добавить товар', 'tovary' ),
'add_new_item' => _x( 'Добавить новый товар', 'tovary' ),
'edit_item' => _x( 'Редактировать товар', 'tovary' ),
'new_item' => _x( 'Новый товар', 'tovary' ),
'view_item' => _x( 'Посмотреть товар', 'tovary' ),
'search_items' => _x( 'Искать', 'tovary' ),
'not_found' => _x( 'Нет товаров', 'tovary' ),
'not_found_in_trash' => _x( 'Нет удаленных товаров', 'tovary' ),
'parent_item_colon' => _x( 'Родитель товаров:', 'tovary' ),
'menu_name' => _x( 'Товары', 'tovary' ),
);
$args = array(
'labels' => $labels,
'hierarchical' => false,
'supports' => array( 'title' ),
'taxonomies' => array( 'catalog_tax' ),
'public' => true,
'map_meta_cap' => true,
'show_ui' => true,
'menu_position' => 10,
'menu_icon' => 'dashicons-cart',
'show_in_nav_menus' => false,
'exclude_from_search' => false,
'has_archive' => false,
'query_var' => true,
'rewrite' => array('slug' => 'catalog/%catalog_tax%'),
'capability_type' => 'page'
);
register_post_type( 'tovary', $args );
}
// регистрация таксономии (create_catalog_taxonomies)
add_action ( 'init', 'create_catalog_taxonomies' );
function create_catalog_taxonomies(){
// определяем заголовки для 'catalog'
$labels = array(
'name' => _x( 'Категории', 'taxonomy general name' ),
'singular_name' => _x( 'Категория', 'taxonomy singular name' ),
'search_items' => __( 'Поиск по категориям' ),
'all_items' => __( 'Все категории' ),
'parent_item' => __( 'Родительская категория' ),
'parent_item_colon' => __( 'Родительская категория:' ),
'edit_item' => __( 'Редактировать категорию' ),
'update_item' => __( 'Обновить категорию' ),
'add_new_item' => __( 'Добавить новую категорию' ),
'new_item_name' => __( 'Имя новой категории' ),
'menu_name' => __( 'Каталог' ),
);
// Добавляем древовидную таксономию 'catalog_tax' (как категории)
register_taxonomy('catalog_tax', array('tovary'), array(
'hierarchical' => true,
'labels' => $labels,
'show_ui' => true,
'rewrite' => array( 'slug' => 'catalog', 'hierarchical' => true )
));
}
Планирую выводить категории и подкатегории каталога на страницах таксономии с адресом типа
http://адрес_сайта/catalog/elektrokotly/seriya, на страницах серии планирую выводить произвольный тип постов tovary адрес у них должен быть
http://адрес_сайта/catalog/elektrokotly/seriya/tovar1
Пытаюсь настроить адрес товаров следующим кодом
add_filter('post_type_link', 'custom_post_permalink_structure', 10, 4);
function custom_post_permalink_structure($post_link, $post, $leavename, $sample) {
if (false !== strpos($post_link, '%catalog_tax%')) {
$custom_post_type_term = get_the_terms($post->ID, 'catalog_tax');
$post_terms = array();
if (!empty($custom_post_type_term)) {
foreach ($custom_post_type_term as $term)
$post_terms[] = $term->slug;
$post_link = str_replace('%catalog_tax%', implode( '/', array_reverse( $post_terms ) ), $post_link);
}
else
$post_link = str_replace('%catalog_tax%', 'uncategorized', $post_link);
}
return $post_link;
}
После того как перезаписываю slug товаров при переходе на страницы таксономии получаю 404 ошибку. Причем на 1 уровне таксономии нет 404 ошибки, на дочерних терминах выдается 404 ошибка. После многодневных танцев с бубном я выяснил что проблема в том что wordpress не видит страницу адреса дочерних терминов таксономии. Необходимо указать дополнительные правила перезаписи УРЛов add_rewrite_rule для таксономии. Пробовал различные вариации методом тыка, но правильной работы так и не добился. Ошибка 404 исчезает но на страницу выводиться совсем не то что прописано в шаблоне файла. Помогите решить проблему)
Написал такую функцию
add_action('init', 'do_rewrite');
function do_rewrite(){
add_rewrite_tag('%catalog%','([^&]+)'); // Регистрируем параметр genre
add_rewrite_rule( '^([^&]*)/([^&]*)/([^&]*)/?', 'index.php?catalog=$matches[1]', 'top' );
}
Это выражение index.php?catalog=$matches[1]'
Соответствующая ссылка, которая работает для WordPress, ссылка с параметрами запроса.
Как правильно написать это выражение ^([^&]*)/([^&]*)/([^&]*)/?' которому должна соответствовать ссылка (УРЛ)?