@sergafon

Как cформулировать правило add_rewrite_rule?

Здравствуйте знатоки 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, ссылка с параметрами запроса.

Как правильно написать это выражение ^([^&]*)/([^&]*)/([^&]*)/?' которому должна соответствовать ссылка (УРЛ)?
  • Вопрос задан
  • 779 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы