Webmasterpark.ru - блог о продвижении и создании сайтов

Понятная структура url WooCommerce

04.05.2022

Если вас интересует как сделать url woocommerce более понятной и структурированной, то вам подойдет изложенный метод.
Данный код формирует стандартную структуру url у категорий и товаров WooCommerce. Структура представлена ниже

Страница магазина: https://domain.com/shop
Страница категории: https://domain.com/shop/category
Страница товара: https://domain.com/shop/category/product


1 Шаг. У страницы магазина должна быть установлена «постоянная ссылка» — shop.
Убедитесь, что именно эта страница установлена как «Страница магазина».
В Настройках Постоянных ссылок нужно установить «База категорий товара» — shop и «Произвольная база» — /shop/%product_cat%/
Сохраняем изменения.

2 Шаг.

/**
 * Генерируем свои редиректы для категорий товаров
 * и сбрасываем их кэш при необходимости.
 *
 * @param bool $flash флаг, показывающий нужно ли сбрасывать пермалинки.
 */
function custom_woocommerce_permalinks( $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 ( true === $flash ) {
    flush_rewrite_rules( false );
  }
}
add_filter( 'init', 'custom_woocommerce_permalinks' );
/**
 * пересоздать пермалинки и сбросить их кэш при создании новой категории.
 *
 * @param int $term_id     идентификатор категории.
 * @param string $taxonomy слаг таксономии.
 */
function custom_woocommerce_permalinks_flush( $term_id, $taxonomy ) {
  if ( 'product_cat' === $taxonomy ) {
    mihdan_woocommerce_permalinks( true );
  }
}
add_action( 'create_term', 'custom_woocommerce_permalinks_flush', 10, 2 );
/**
 * Подменить /product-category/ на /shop/ в ссылке категории.
 *
 * @param string $url      URL по дефолту.
 * @param object $term     объект термина.
 * @param string $taxonomy слаг таксономии.
 *
 * @return mixed
 */
function custom_woocommerce_fixed_category_permalink( $url, $term, $taxonomy ) {
  if ( 'product_cat' === $taxonomy ) {
    return str_replace( 'product-category/', 'shop/', $url );
  }
  return $url;
}
add_filter( 'term_link', 'custom_woocommerce_fixed_category_permalink', 10, 3 );

Если же вам нужна структура без shop:

Страница категории: https://domain.com/category
Страница товара: https://domain.com/category/product

то можно воспользоваться плагином WooCommerce Perfect SEO Url.

Он генерирует таблицу с url-ами всех товаров и формирует нужную структуру, а со старых url, содержащих product делает 301 редирект на новые.

Поделиться статьей

Напишите мне

info@webmasterpark.ru Или
Отправьте заявку на сотрудничество: