ЧПУ для категорий и подкатегорий WooCommerce
14 янв. 2018 г., 02:02:41
Просмотры: 18.5K
Голосов: 2
Настройка
Желаемая структура постоянных ссылок (только эти структуры существуют для товаров)
Товар 1: /shop/category/subcategory/product1/
Товар 2: /shop/category/product2/
Настройки отображения товаров WooCommerce
Отображение для shopbase: Показывать категории
Отображение для категорий: Показывать товары
Товары
Товары проверяются только для одной категории ИЛИ подкатегории
Настройки постоянных ссылок
Обычные настройки: /%category%/%postname%/
База для категорий: shop
Для товаров: /shop/%product_cat%/
Архивы
Поскольку у меня более 100 подкатегорий, я хочу использовать архив для
отображения всех товаров.
Попытки решения
С помощью нижеперечисленных попыток мне удалось создать рабочую страницу товара
, но при этом страницы подкатегорий стали возвращать ошибку 404
. Я не могу вспомнить, какая настройка к какому результату приводит.
- Пробовал различные настройки постоянных ссылок для базы категорий товаров, включая
%category%/%product_cat%
,%category%/%product_cat%/%postname%
,%product_cat%/%product_cat%
,shop/%product_cat%
,shop/%product_cat%/%postname%
, а также все вышеперечисленные комбинации с добавлением/.
в конце - Пробовал заменять вышеуказанные настройки настройками базы магазина.
- Пробовал изменить настройки отображения товаров, чтобы показывались подкатегории вместо товаров.
- Пробовал создавать страницы для подкатегорий при рабочей странице товара, но страница подкатегорий всё равно возвращала
404
. - Пробовал это решение с Stack Overflow, но безрезультатно.
Что я делаю не так? Какую часть можно переделать, чтобы это заработало? Буду очень благодарен за любые подсказки или ответы. Спасибо за прочтение!

Anton Flärd
49
Комментарии
Все ответы на вопрос
1
0
Мне удалось решить эту задачу с помощью следующего кода, который генерирует правила перезаписи (rewrite_rules) для каждой подкатегории. Это предпочтительнее при сопоставлении, так как обеспечивает более специфичные правила:
function wpse_291143_generate_taxonomy_rewrite_rules( $wp_rewrite ) {
global $wp_rewrite;
$base = "shop";
$rules = array();
$terms = get_terms( array( 'taxonomy' => 'product_cat', 'hide_empty' => false ));
foreach($terms as $term) {
$term_children = get_terms( array(
'taxonomy' => 'product_cat',
'parent' => intval($term->term_id),
'hide_empty' => false
)
);
if($term_children) {
foreach ( $term_children as $term_child ) {
$rules[$base . '/' . $term->slug . '/' . $term_child->slug . '/?$'] = 'index.php?product_cat=' . $term_child->slug;
}
}
}
$wp_rewrite->rules = $rules + $wp_rewrite->rules;
return $wp_rewrite->rules;
}
add_action('generate_rewrite_rules', 'wpse_291143_generate_taxonomy_rewrite_rules');

Anton Flärd
49
15 янв. 2018 г. 23:45:02
Похожие вопросы