Skip to main content

Как изменить структуру ссылок товаров WooCommerce без потери функциональности

Изменение структуры ссылок в WooCommerce — задача, с которой часто сталкиваются разработчики, чтобы сделать URL-адреса более понятными и дружественными для SEO. Однако, при изменении ссылок можно столкнуться с ошибками, такими как 404 для товаров, категорий, корзины или других системных страниц. В этой статье мы расскажем, как правильно настроить пользовательские URL-адреса для товаров и категорий WooCommerce и сохранить корректную работу системных страниц, таких как корзина, оформление заказа и мой аккаунт.

Зачем изменять структуру ссылок?

По умолчанию WooCommerce генерирует ссылки для товаров в формате:
/product/product-name/
И ссылки для категорий:
/product-category/category-name/
Иногда требуется изменить структуру, чтобы сделать URL-адреса более понятными, например:
  • Для товаров: /category-name/product-name/
  • Для категорий: /category-name/
Такой подход улучшает читаемость ссылок и может позитивно повлиять на SEO.

Решение: настройка структуры ссылок

Ниже приведён код, который позволяет реализовать пользовательские URL для товаров и категорий, сохраняя работоспособность корзины и других системных страниц.
 // Изменение ссылок для товаров WooCommerce add_filter('post_type_link', 'custom_product_permalink', 10, 2); function custom_product_permalink($permalink, $post) { if ($post->post_type === 'product') { $terms = get_the_terms($post->ID, 'product_cat'); if (!empty($terms) && !is_wp_error($terms)) { $category_slug = $terms[0]->slug; // Берем первую категорию return home_url('/' . $category_slug . '/' . $post->post_name . '/'); } } return $permalink; } // Изменение ссылок для категорий товаров add_filter('term_link', 'custom_category_permalink', 10, 3); function custom_category_permalink($url, $term, $taxonomy) { if ($taxonomy === 'product_cat') { return home_url('/' . $term->slug . '/'); } return $url; } // Добавление правил перезаписи add_action('init', 'custom_rewrite_rules'); function custom_rewrite_rules() { // Исключение системных страниц WooCommerce $excluded_pages = ['cart', 'checkout', 'my-account', 'shop']; foreach ($excluded_pages as $page) { add_rewrite_rule( '^' . $page . '/?$', 'index.php?pagename=' . $page, 'top' ); } // Правило для товаров add_rewrite_rule( '^([^/]+)/([^/]+)/?$', 'index.php?product=$matches[2]', 'top' ); // Правило для категорий товаров add_rewrite_rule( '^([^/]+)/?$', 'index.php?product_cat=$matches[1]', 'top' ); } // Перегенерация правил перезаписи add_action('after_switch_theme', 'flush_rewrite_rules'); add_action('woocommerce_after_register_post_type', 'flush_rewrite_rules'); 

Пошаговое объяснение

  1. Изменение ссылок для товаров:Функция custom_product_permalink изменяет структуру ссылок для товаров на /category-name/product-name/.
  2. Изменение ссылок для категорий:Функция custom_category_permalink формирует ссылки для категорий в формате /category-name/.
  3. Добавление правил перезаписи:Для товаров и категорий добавлены правила, чтобы WordPress мог правильно обрабатывать новые URL. Системные страницы WooCommerce (корзина, оформление заказа и т.д.) исключены из изменений, чтобы они продолжали работать корректно.
  4. Перегенерация правил перезаписи:При смене темы или загрузке WooCommerce правила автоматически обновляются.

Как применить изменения?

  1. Вставьте код в файл functions.php активной темы или в отдельный плагин.
  2. Перейдите в Настройки → Постоянные ссылки и нажмите «Сохранить изменения». Это обновит правила перезаписи.

Проверка работы

После внедрения изменений проверьте следующие URL:
  • Товары: /category-name/product-name/
  • Категории: /category-name/
  • Корзина: /cart/
  • Оформление заказа: /checkout/
  • Мой аккаунт: /my-account/
Все страницы должны открываться корректно.

Заключение

Этот подход позволяет улучшить структуру ссылок WooCommerce без потери функциональности. Изменение URL-адресов для товаров и категорий, исключение системных страниц из правил перезаписи и использование правильной логики обработки URL — ключевые моменты для успешной реализации.