Здравствуйте! Мучаюсь целый день сегодня. Сайт на Wordpress. Есть код, что бы удалить ярлык категории из ссылки: PHP: add_filter('request', 'true_smenit_request', 1, 1 ); function true_smenit_request( $query ){ $taxonomia_name = 'product_cat'; // укажите название таксономии здесь, это также могут быть рубрики category или метки post_tag // запросы для дочерних элементов будут отличаться, поэтому нам потребуется дополнительная проверка if( $query['attachment'] ) : $dochernia = true; // эту переменную задаём для себя, она нам потребуется дальше $urlyarlyk = $query['attachment']; // это ярлык данного термина/рубрики/метки else: $dochernia = false; $urlyarlyk = $query['name']; // как видите, здесь ярлык хранится в другой переменной запроса endif; $termin = get_term_by('slug', $urlyarlyk, $taxonomia_name); // получаем элемент таксономии по ярлыку if ( isset( $urlyarlyk ) && $termin && !is_wp_error( $termin )): // если такого элемента не существует, прекращаем выполнение кода // для страниц дочерних элементов код немного отличается if( $dochernia ) { unset( $query['attachment'] ); $parent = $termin->parent; while( $parent ) { $parent_term = get_term( $parent, $taxonomia_name); $urlyarlyk = $parent_term->slug . '/' . $urlyarlyk; // нам нужно получить полный путь, состоящий из ярлыка текущего элемента и всех его родителей $parent = $parent_term->parent; } } else { unset($query['name']); } switch( $taxonomia_name ): // параметры запроса для рубрик и меток отличаются от других таксономий case 'category':{ $query['category_name'] = $urlyarlyk; break; } case 'post_tag':{ $query['tag'] = $urlyarlyk; break; } default:{ $query[$taxonomia_name] = $urlyarlyk; break; } endswitch; endif; return $query; } // смена самой ссылки add_filter( 'term_link', 'true_smena_permalink', 10, 3 ); function true_smena_permalink( $url, $term, $taxonomy, $args ){ $taxonomia_name = 'product_cat'; // название таксономии, тут всё понятно $taxonomia_slug = 'product-category'; // ярлык таксономии - зависит от параметра rewrite, указанного при создании и может отличаться от названия, if ( strpos($url, $taxonomia_slug) === FALSE || $taxonomy != $taxonomia_name ) return $url; //$url = $url . '.html'; $url = str_replace('/' . $taxonomia_slug, '', $url); // если мы ещё тут, выполняем замену в URL return $url; } и есть код, что бы добавить в конец ссылки категории товара .html: PHP: function wpse_178112_category_permastruct_html( $taxonomy, $object_type, $args ) { if ( $taxonomy === 'product_cat' ) add_permastruct( $taxonomy, "{$args['rewrite']['slug']}/%$taxonomy%.html", $args['rewrite'] ); } add_action( 'registered_taxonomy', 'wpse_178112_category_permastruct_html', 20, 3 ); По отдельности все работает как нужно. А вот вместе — ошибка 404… т.е. ссылка отображается в нужном формате (с .html), но страницы по этому адресу нет (она без .html на конце) Как бы все это совместить?
Подозреваю, что дело в этой строчке Код (Text): add_permastruct( $taxonomy, "{$args['rewrite']['slug']}/%$taxonomy%.html", $args ); , а именно {$args[‘rewrite’][‘slug’]} — т.к. если я это выражения удаляю, то категории выводятся как надо… но все остальные страницы тогда — ошибка 404.. ( Кто-нибудь может подсказать?