Переписывание URL продуктов WooCommerce

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

Я пытаюсь переписать свои URL-адреса продуктов WooCommerce так, чтобы в конце присутствовал ID записи, как это:

/product/product-name-post-id/

Я использовал код из этой темы Как переписать URI пользовательского типа записи?, который работает, но у нас получается /product/post-id-product-name/.

add_filter('post_type_link', 'wpse33551_post_type_link', 1, 3);

function wpse33551_post_type_link( $link, $post = 0 ){
    if ( $post->post_type == 'product' ){
        return home_url( 'product/' . $post->post_name . '-' . $post->ID );
    } else {
        return $link;
    }
}

add_action( 'init', 'wpse33551_rewrites_init' );

function wpse33551_rewrites_init(){
    add_rewrite_rule(
        'product/([0-9]+)?$',
        'index.php?post_type=product&p=$matches[1]',
        'top' );
}

Я не могу понять, как исправить правило переписывания во второй функции, чтобы ID записи был в конце?

Это должно сработать:

add_action( 'init', 'wpse33551_rewrites_init' );

function wpse33551_rewrites_init(){
    add_rewrite_rule(
        'product/.+\-([0-9]+)?$',
        'index.php?post_type=product&p=$matches[1]',
        'top' );
}

Функция фильтра изменяет постоянную ссылку на product/my-product-name-88. Вам просто нужно подкорректировать регулярное выражение во второй функции, чтобы оно соответствовало этому шаблону.

Регулярное выражение:

product/ – соответствует буквальной строке product/

.+ – соответствует одному или более другим символам

\- – соответствует дефису (обратный слэш экранирует его, чтобы движок регулярных выражений не думал, что это специальный оператор регулярных выражений, как в следующей части)

([0-9]+)?$ – соответствует и захватывает одно или более чисел в конце URL

Как говорит @gregory, после внесения этого изменения вам нужно нажать кнопку «Сохранить» на странице постоянных ссылок wp-admin/options-permalink.php, чтобы сбросить кэш переписывания.

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

Переписывание URL продуктов в WooCommerce

При оптимизации структуры URL ваших продуктов в WooCommerce, одной из задач может стать модификация адресов в формате /product/product-name-<post-id>/. Это можно достичь с помощью фильтров и правил переписывания в WordPress.

Ваша текущая реализация использует следующую логику:

  1. Фильтр post_type_link — отвечает за изменение структуры URL товара.
  2. Действие init — добавляет правило переписывания.

Ваш код для фильтра выглядит как:

add_filter('post_type_link', 'wpse33551_post_type_link', 1, 3);

function wpse33551_post_type_link( $link, $post = 0 ){
    if ( $post->post_type == 'product' ){
        return home_url( 'product/' . $post->post_name . '-' . $post->ID );
    } else {
        return $link;
    }
}

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

Обновленное правило переписывания

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

add_action( 'init', 'wpse33551_rewrites_init' );

function wpse33551_rewrites_init(){
    add_rewrite_rule(
        'product/.+\-([0-9]+)$',
        'index.php?post_type=product&amp;p=$matches[1]',
        'top' 
    );
}

Объяснение обновленного регулярного выражения

Давайте разберем, как работает обновленное регулярное выражение:

  • product/ — соответствует строке «product/», которая является фиксированной частью URL.
  • .+ — соответствует любым символам, кроме символа новой строки, что гарантирует, что название продукта будет захвачено.
  • \- — соответствует символу дефиса. Знак обратной косой черты перед дефисом указывает, что это не специальный символ регулярного выражения.
  • ([0-9]+)$ — захватывает одно или более чисел (ID поста) в конце URL.

Обновление пермалинков

После внесения изменений в правила переписывания необходимо обновить кэш пермалинков. Для этого:

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

Заключение

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

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

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