Woocommerce Пользовательские Правила Перезаписи Массив – Подкатегории

Вопрос или проблема

Используя этот код здесь:

    add_filter( 'rewrite_rules_array', function( $rules )
{
    $new_rules = array(
        'services/([^/]*?)/page/([0-9]{1,})/?$' => 'index.php?product_cat=$matches[1]&paged=$matches[2]',
        'services/([^/]*?)/?$' => 'index.php?product_cat=$matches[1]',
    );
    return $new_rules + $rules;
} );

и имея такие настройки постоянных ссылок

основа категории продукта: services

постоянная ссылка продукта – кастомная основа: /services/%product_cat%

Я получаю следующее:

/services/%category_name%/ (Страница родительской категории продукта работает нормально)

/services/%category_name%/%subcategory_name/ (Страница дочерней категории продукта не работает – ошибка 404)

/services/%category_name%/%subcategory_name/%product_name (Один продукт – работает нормально)

У кого-нибудь есть идеи, как сделать так, чтобы страницы дочерних категорий продукта не выдавали ошибку 404?

Спасибо!

Попробуйте это

add_filter( 'rewrite_rules_array', function( $rules )
{
    $new_rules = array(
        'services/([^/]*?)/page/([0-9]{1,})/?$' => 'index.php?product_cat=$matches[1]&paged=$matches[2]',
        'services/([^/]*?)/?$' => 'index.php?product_cat=$matches[1]',
        'services/([^/]*?)/([^/]*?)/?$' => 'index.php?product_cat=$matches[2]'
    );
    return $new_rules + $rules;
} );

.

Ответ или решение

Ваша задача связана с настройкой пользовательских правил переписывания URL в WooCommerce для улучшения работы подкатегорий продуктов. Давайте рассмотрим предложенное вами решение и то, как можно исправить проблему с ошибкой 404 при доступе к страницам подкатегорий.

Контекст

Вы используете кастомные правила переписывания, чтобы управлять структурой URL для своих продуктов в WooCommerce, задав базу категорий продуктов как /services. У вас уже есть работающие правила для родительских категорий и одиночных продуктов, но проблема возникает с подкатегориями.

Анализ текущего кода

Ваш текущий код для обработки правил переписывания выглядит следующим образом:

add_filter( 'rewrite_rules_array', function( $rules ) {
    $new_rules = array(
        'services/([^/]*?)/page/([0-9]{1,})/?$' => 'index.php?product_cat=$matches[1]&paged=$matches[2]',
        'services/([^/]*?)/?$' => 'index.php?product_cat=$matches[1]',
    );
    return $new_rules + $rules;
});

Эти правила позволяют вам обрабатывать главные категории и пагинацию, но не охватывают подкатегории, что и вызывает ошибку 404.

Решение

Для исправления ситуации необходимо добавить правило для подкатегорий. Второе правило должно учитывать и подкатегории. Я рекомендую следующее обновление:

add_filter( 'rewrite_rules_array', function( $rules ) {
    $new_rules = array(
        'services/([^/]*?)/page/([0-9]{1,})/?$' => 'index.php?product_cat=$matches[1]&paged=$matches[2]',
        'services/([^/]*?)/?$' => 'index.php?product_cat=$matches[1]',
        'services/([^/]*?)/([^/]*?)/?$' => 'index.php?product_cat=$matches[1]&product_cat=$matches[2]'
    );
    return $new_rules + $rules;
});

В этом коде добавлено новое правило services/([^/]*?)/([^/]*?)/?$, которое будет захватывать URL подкатегорий и правильно перенаправлять их на соответствующую страницу.

Дополнительные действия

После того, как вы добавили новое правило, необходимо сделать следующее:

  1. Обновление постоянных ссылок: Перейдите в админку WordPress, в раздел "Настройки" → "Постоянные ссылки" и просто нажмите "Сохранить изменения". Это заставит WordPress пересоздать правила переписывания.

  2. Очистка кэша: Если вы используете кэширование (например, плагин кэширования), очистите кэш, чтобы изменения вступили в силу.

Заключение

С внесением указанных выше изменений подкатегории должны начать работать правильно, и ошибка 404 при попытке доступа к их страницам должна исчезнуть. Подобная настройка правил переписывания позволяет вам детализировать структуру URL и улучшать навигацию по вашему интернет-магазину. Если у вас возникнут дополнительные вопросы или потребуются дальнейшие доработки, не стесняйтесь задавать их.

Оцените материал
Добавить комментарий

Капча загружается...