Как переписать ЧПУ товаров в WooCommerce для использования slug категорий

29 мая 2019 г., 11:40:56
Просмотры: 15K
Голосов: 1

Я знаю, что есть информация по этой проблеме, но не нашел полностью рабочего решения.

Мне нужно использовать slug категорий товаров в ЧПУ, чтобы ссылки выглядели как example.com/noutbuki/nekij-noutbuk

Я выбрал опцию Произвольная основа в настройках Постоянных ссылок, ввел /%product-cat%/ в поле и сохранил. Затем добавил следующий код в functions.php моей темы:

add_filter('post_type_link', 'category_slug_in_product_permalink', 10, 2);
function category_slug_in_product_permalink($permalink, $post) {

    if($post->post_type == 'product') { 
        $categories = wp_get_object_terms($post->ID, 'product_cat');
        $permalink = str_replace('%product-cat%', $categories[0]->slug, $permalink);
    }
    return $permalink;
}

Код работает корректно, и я вижу, что ЧПУ товаров теперь выглядят так, как нужно.

Но когда я кликаю по любой из ссылок, получаю ошибку 400 Bad Request. Как я прочитал по ссылке wordpress.stackexchange.com/a/334902, фильтр post_type_link только изменяет URL, но "не меняет никаких правил перезаписи, и структура постоянных ссылок остается прежней".

Как можно решить эту вторую часть проблемы?

Я нашел упоминания о $GLOBALS['wp_rewrite'], 'slug' => '%...%', 'with_front' => false и т.д., но не нашел полностью рабочего решения или просто не знаю, как использовать существующие.

0
Все ответы на вопрос 2
0

Хорошо, вот второй код:

function custom_rewrite_basic() {

    $prodCatArgs = ['taxonomy' => 'product_cat'];
    $wooCats = get_categories($prodCatArgs);
    $catSlugs = [];
    foreach($wooCats as $wooCat) {
        $catSlugs[] = $wooCat->slug;
    }
    add_rewrite_rule(
        '^('.implode('|', $catSlugs).')/([^/]*)/?',
        'index.php?post_type=product&category=$matches[1]&product=$matches[2]',
        'top'
    );
    flush_rewrite_rules();
}
add_action('init', 'custom_rewrite_basic');
30 мая 2019 г. 01:18:12
0

Альтернативно, вы можете использовать мой плагин и настроить постоянные ссылки для товаров прямо из админ-панели WordPress.

  1. Сначала необходимо установить Permalink Manager Lite из каталога плагинов WordPress.
  2. Затем перейдите в "Инструменты -> Permalink Manager -> Permastructures" в админ-панели и прокрутите вниз до раздела "Products".
  3. Теперь замените стандартный формат постоянной ссылки на: %product_cat%/%product%
  4. Новые настройки структуры постоянных ссылок будут применяться только к новым товарам, но при необходимости вы можете перегенерировать старые ссылки в разделе "Инструменты -> Permalink Manager -> Инструменты -> Regenerate/Reset".

Полные инструкции можно найти здесь: https://permalinkmanager.pro/docs/tutorials/taxonomy-slugs-in-custom-post-type-permalinks/

2 июл. 2019 г. 09:55:37