Woocommerce — настройки постоянных ссылок. Как убрать product-category и не только

Автор: | 06.03.2019
Woocommerce — настройки постоянных ссылок

Очень часто пользователи ищут информацию о том как удалить product-category в ссылках на категории в woocommerce. Но в этой статье мы пойдем другим путем и приведем все ссылки к нормальному виду, что будет более логично и полезно для SEO.

Как только вы пройдете все шаги ниже, то в конечном итоге получите ссылки вида:

  • Страница магазина: http://your-domain.com/shop
  • Страница категории:  http://your-domain.com/shop/my-category
  • Страница товара:  http://your-domain.com/shop/my-category/my-super-product

Во-первых вы должны убедиться, что у страницы магазина установлена «постоянная ссылка» — shop.

Убедитесь, что именно эта страница установлена как «Страница магазина».

Потом переходим в «Настройки -> Постоянные ссылки» и делаем манипуляции как на скрине. «База категорий товара» — shop и «Произвольная база» — /shop/%product_cat%/

Жмете сохранить. И можете уже проверить свои ссылки. Результат будет таким:

  • Страница магазина: http://your-domain.com/shop (рабочая ссылка)
  • Страница категории:  http://your-domain.com/shop/my-category (ошибка 404)
  • Страница товара:  http://your-domain.com/shop/my-category/my-super-product (рабочая ссылка)

Осталось исправить 404 ошибку на страницах категорий товаров. Следующий код именно это и сделает. Просто вставьте в его в файл functions.php ваше темы:

function wpd_product_category_base_same_shop_base( $flash = false ){
    $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'));
 
            add_rewrite_rule($baseterm . '?$','index.php?product_cat=' . $term_slug,'top');
            add_rewrite_rule($baseterm . 'page/([0-9]{1,})/?$', 'index.php?product_cat=' . $term_slug . '&paged=$matches[1]','top');
            add_rewrite_rule($baseterm . '(?:feed/)?(feed|rdf|rss|rss2|atom)/?$', 'index.php?product_cat=' . $term_slug . '&feed=$matches[1]','top');
 
        }
    }
    if ($flash == true)
        flush_rewrite_rules(false);
}
add_filter( 'init', 'wpd_product_category_base_same_shop_base');
 
add_action( 'create_term', 'wpd_product_cat_same_shop_edit_success', 10, 2 );
function wpd_product_cat_same_shop_edit_success( $term_id, $taxonomy ) {
    devvn_product_category_base_same_shop_base(true);
}

После добавления кода, вернитесь в «Настройки -> Постоянные ссылки» и просто нажмите «Сохранить». Теперь все должно заработать.

На этом все ))

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

Woocommerce — настройки постоянных ссылок. Как убрать product-category и не только: 2 комментария

  1. Sergiy

    Все сделал по Вашей инструкции, все работает, кроме пагинации в archive-product.php, выдает ошибку 404

  2. Виталий

    При вставке кода, выдает ошибку:
    Ваши изменения в коде PHP были отменены из за ошибки на строке 10 файла wp-content/themes/flatsome-child/functions.php. Исправьте и попробуйте пересохранить.

    syntax error, unexpected ‘;’

    Как я понял в этой строке ошибка, помечает ее как с ошибкой:
    if ($terms && !is_wp_error($terms)) {

    Помогите исправить, очень нужно решение

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *