Как переписать ЧПУ товаров в WooCommerce для использования slug категорий
Я знаю, что есть информация по этой проблеме, но не нашел полностью рабочего решения.
Мне нужно использовать slug категорий товаров в ЧПУ, чтобы ссылки выглядели как example.com/noutbuki/nekij-noutbuk
Я выбрал опцию Произвольная основа в настройках Постоянных ссылок, ввел /%product-cat%/
в поле и сохранил. Затем добавил следующий код в functions.php
моей темы:
add_filter('post_type_link', 'category_slug_in_product_permalink', 10, 2);
function category_slug_in_product_permalink($permalink, $post) {
if($post->post_type == 'product') {
$categories = wp_get_object_terms($post->ID, 'product_cat');
$permalink = str_replace('%product-cat%', $categories[0]->slug, $permalink);
}
return $permalink;
}
Код работает корректно, и я вижу, что ЧПУ товаров теперь выглядят так, как нужно.
Но когда я кликаю по любой из ссылок, получаю ошибку 400 Bad Request. Как я прочитал по ссылке wordpress.stackexchange.com/a/334902, фильтр post_type_link
только изменяет URL, но "не меняет никаких правил перезаписи, и структура постоянных ссылок остается прежней".
Как можно решить эту вторую часть проблемы?
Я нашел упоминания о $GLOBALS['wp_rewrite']
, 'slug' => '%...%', 'with_front' => false
и т.д., но не нашел полностью рабочего решения или просто не знаю, как использовать существующие.

Хорошо, вот второй код:
function custom_rewrite_basic() {
$prodCatArgs = ['taxonomy' => 'product_cat'];
$wooCats = get_categories($prodCatArgs);
$catSlugs = [];
foreach($wooCats as $wooCat) {
$catSlugs[] = $wooCat->slug;
}
add_rewrite_rule(
'^('.implode('|', $catSlugs).')/([^/]*)/?',
'index.php?post_type=product&category=$matches[1]&product=$matches[2]',
'top'
);
flush_rewrite_rules();
}
add_action('init', 'custom_rewrite_basic');

Альтернативно, вы можете использовать мой плагин и настроить постоянные ссылки для товаров прямо из админ-панели WordPress.
- Сначала необходимо установить Permalink Manager Lite из каталога плагинов WordPress.
- Затем перейдите в "Инструменты -> Permalink Manager -> Permastructures" в админ-панели и прокрутите вниз до раздела "Products".
- Теперь замените стандартный формат постоянной ссылки на: %product_cat%/%product%
- Новые настройки структуры постоянных ссылок будут применяться только к новым товарам, но при необходимости вы можете перегенерировать старые ссылки в разделе "Инструменты -> Permalink Manager -> Инструменты -> Regenerate/Reset".
Полные инструкции можно найти здесь: https://permalinkmanager.pro/docs/tutorials/taxonomy-slugs-in-custom-post-type-permalinks/
