WooCommerce кастомная категориальная навигация с использованием «каталог


WooCommerce custom category pagination using "catalog"
Введение
На сайте, созданным почти 10 лет назад, была реализована кастомная перезапись, позволяющая использовать слово "catalog" как основу для магазина и категорий. При этом возможно установить "catalog" в качестве основы для категорий товаров в настройках премаблейнов. Такая настройка работает для коротких страниц архива категорий, но в какой-то момент перестала работать с пагинацией. Этот факт заставляет задуматься о специфичности использования термина "catalog", который может быть зарезервирован для WooCommerce-установок, не осуществляющих транзакции.
Проблема и её причины
Проблема заключается в том, что при использовании термина "catalog" для категории товара, страницы с пагинацией возвращают ошибку 404. Это может быть связано с тем, что WooCommerce использует термин "catalog" для представления каталога товаров без транзакций, тогда как "shop" используется для активных продаж.
Решение проблемы
Для решения проблемы можно использовать фильтры перезаписи правил и добавить свои собственные правила для пагинации категорий товаров. Вот пример кода:
add_filter( 'rewrite_rules_array', function( $rules ) {
$new_rules = array();
$terms = get_terms( array(
'taxonomy' => 'product_cat',
'post_type' => 'product',
'hide_empty' => false,
));
if ( $terms && ! is_wp_error( $terms ) ) {
$siteurl = esc_url( home_url( '/' ) );
foreach ( $terms as $term ) {
$term_slug = $term->slug;
$baseterm = str_replace( $siteurl, '', get_term_link( $term->term_id, 'product_cat' ) );
// правила для конкретной категории
$new_rules[$baseterm .'?$'] = 'index.php?product_cat=' . $term_slug;
// правила для пагинации категории
$new_rules[$baseterm . '/page/([0-9]{1,})/?$'] = 'index.php?product_cat=' . $term_slug . '&paged=$matches[1]';
}
return $new_rules + $rules;
}
});
Практические советы
- Тестирование: После внесения изменений необходимо тщательно протестировать сайт на наличие ошибок 404 и корректность отображения пагинации.
- Управление перезаписями: Убедитесь, что ваша кастомная перезапись не конфликтует с другими правилами перезаписи.
- Сохранение правил перезаписи: Не забудьте сохранить изменения правил перезаписи после каждого изменения в настройках премаблейнов.
Заключение
Использование слова "catalog" в качестве основы для категорий товаров может вызвать проблемы с пагинацией в WooCommerce. Для решения этой проблемы можно использовать фильтры перезаписи правил и добавить свои собственные правила для пагинации категорий.