Как удалить подкатегорию из URL продукта Woocommerce

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

В настройках постоянных ссылок параметр ‘База магазина с категорией’ /shop/%product_cat%/ добавляет все иерархические категории в URL-адрес, например:

http:// mystore.com/shop/родительская-категория/дочерняя-категория/товар

Я хочу убрать всё между родительской категорией и товаром, чтобы мои URL-адреса выглядели так:

http:// mystore.com/shop/родительская-категория/товар

Я совершенно уверен, что настройка URL таким образом не вызывает проблем, потому что я могу вручную ввести укороченный URL в адресную строку, и он ведёт в то же место, что и более длинный.

Спасибо.

На самом деле это довольно просто. Используйте фильтр woocommerce_product_post_type_link_parent_category_only:

add_filter( 'woocommerce_product_post_type_link_parent_category_only', '__return_true' );

Проверено и работает.

PS: Код нужно поместить в файл функций темы, а __return_true() — это функция WordPress функция.

Если вы просто хотите убрать немедленный родитель слаг категории из URL (или любое количество предков), в файле wc-product-functions.php есть ещё один полезный фильтр, который находится за несколько строк до фильтра woocommerce_product_post_type_link_parent_category_only:

// Удалить одну или несколько родительских категорий из URL товара Woo
function my_product_post_type_link_product_cat( $parent_term, $terms, $post ) {
    // Выберите, какие продукты модифицировать
    if ( has_term('некоторая-дочерняя-категория', 'product_cat', $post ) ) {
        // ID термина желаемого окончательного слага категории в URL
        $parent_term = get_term(123);
    } else if ( $post->ID == 2962 ) { // Целевой отдельный товар
        $parent_term = get_term(321);
    }
    return $parent_term;
}
add_filter( 'wc_product_post_type_link_product_cat', 'my_product_post_type_link_product_cat', 10, 3 );

Сгенерированный функцией $permalink wc_product_post_type_link() (которая содержит вышеупомянутые два фильтра) затем передаётся в фильтр post_type_link, если вы предпочитаете подход с молотком (например, используя str_replace).

При выборе, какие продукты модифицировать, избегайте условных операторов, таких как is_product_category, иначе URL не будет модифицироваться в других местах (например, в результатах поиска). Вместо этого убедитесь, что используете функции, которые ссылаются на повсеместный объект $post.

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

Удаление подкатегории из URL продуктов WooCommerce

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

В этой статье мы рассмотрим, как удалить подкатегорию из URL продукта в WooCommerce, а также приведем соответствующий код и инструкции по его внедрению.

Проблема с текущей структурой URL

При настройке постоянных ссылок WooCommerce с параметром "Shop Base with Category" (/shop/%product_cat%/), ваши URL будут выглядеть следующим образом:

http://mystore.com/shop/parent-category/child-category/product

Для более удобного восприятия, вы хотите изменить URL на следующий формат:

http://mystore.com/shop/parent-category/product

Решение: Использование фильтров WooCommerce

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

  1. Добавьте фильтр woocommerce_product_post_type_link_parent_category_only

Этот фильтр позволяет ограничить вывод только родительской категории в URL. Код, который вам нужно добавить в файл functions.php вашей темы, выглядит следующим образом:

add_filter('woocommerce_product_post_type_link_parent_category_only', '__return_true');

Использование функции __return_true() позволяет убрать в URL все категории, кроме родительской.

  1. Удаление немедленной родительской категории

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

// Удалить одну или несколько родительских категорий из URL продукта
function my_product_post_type_link_product_cat($parent_term, $terms, $post) {
    // Выберите, какие продукты следует модифицировать
    if (has_term('some-child-category', 'product_cat', $post)) {
        // ID терминов желаемой конечной категории в URL
        $parent_term = get_term(123);
    } else if ($post->ID == 2962) { // Целевой единичный продукт
        $parent_term = get_term(321);
    }
    return $parent_term;
}
add_filter('wc_product_post_type_link_product_cat', 'my_product_post_type_link_product_cat', 10, 3);

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

Замечания и рекомендации

  • Тестирование: После внесения изменений в файл functions.php, обязательно протестируйте новые URL, чтобы убедиться, что все перенаправления работают корректно. Это можно сделать, вручную вводя новые URL в адресную строку и проверяя результаты.
  • SEO-оптимизация: Убедитесь, что новый формат URL соответствует требованиям SEO, что может улучшить видимость ваших товаров в поисковых системах.
  • Резервное копирование: Всегда рекомендуется делать резервную копию всех файлов темы перед внесением изменений, чтобы избежать потери данных.

Заключение

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

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

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