• Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

Важно! Настройка ЧПУ на WordPress сайте с WooCommerce

Sowenak

Новичок
почему?
думаю это будет значительно быстрее, чем "ломать голову второй день"
Не знаю получится ли мне правильно выразиться, но я считаю себя еще новичком в wp и лучше я потрачу 5 дней на то, что бы найти правильное решение, или найду того, кто поможет мне найти это решение и научусь чему то новому, чем потратить целый день на бездумную работу.
 
Больная тема :)
Приятно видеть эталонные настройки - они работают!
Решил я похимичить немного, вроде бы абсолютно безобидно. Не понравилось мне, что большая вложенность - http://site.com/catalog/din-reechnye-avtomaty-zashhity/barrier-rn
Насколько знаю, нормальное индексирование поисковиками до 3 уровня идет. Решил убрать совершенно ненужный "catalog". Для этого прописал в "произвольной основе" вместо /catalog/%product_cat% просто /%product_cat%
Товары открываются нормально. Но вот постоянные страницы (типа "о нас" и "оплата и доставка") слетели, вместо них вылазит ошибка "Неверное перенаправление на странице.Firefox определил, что сервер перенаправляет запрос на этот адрес таким образом, что он никогда не завершится. Эта проблема может возникать при отключении или запрещении принятия кук."
Возврат к стандартным настройкам проблему вроде бы решает, все работает. Но убрать лишний уровень вложенности все же очень хочется.
получилось у вас избавиться от /catalog/?
а то я уже пол дня убил но так и не смог, то страница товара выдает 404, то в URL идет название товара дважды, нормального решения не найду.
 

artemkomarov

Специалист
Местный
В woo есть отличная встроенная функция массового редактирования товаров. Через настройку страницы делаете отображение скажем 100 товаров или сколько надо главное не переусердствуйте выборка нескольких тысяч может положить ваш хостинг :) затем Выделяете товары какие нужно изменить или присвоить новую категорию и просто делаете это. Статья в помощь https://nicola.blog/2015/04/21/bulk-edit-products/
 
В woo есть отличная встроенная функция массового редактирования товаров. Через настройку страницы делаете отображение скажем 100 товаров или сколько надо главное не переусердствуйте выборка нескольких тысяч может положить ваш хостинг :) затем Выделяете товары какие нужно изменить или присвоить новую категорию и просто делаете это. Статья в помощь https://nicola.blog/2015/04/21/bulk-edit-products/
Спасибо за ответ, но я уже сам решил эту проблему таким способом, все осложнено было тем, что woocommecre криво встал и у меня меню настроек отображения не показывалось, но когда я про него узнал, тогда выкрутил отображение по 200 штук и проблема решилась. Конечно это все ровно костыль и так работать не должно, но другого решения я не нашел.
 
Ребята подсказывайте как решить проблему

Урл Товара
http://septikperm.ru/tovar/topas/topas-4

Хлебные крошки
На главную / Товары / Септики Топас для загородного дома / Топас 4

Вроде все логично, главная / в каталоге - товары / есть категория - септик топас / и в ней товар - Топас 4


Перехожу в категорию и урл сразу же становится УРЛ
http://septikperm.ru/shop/topas

Хлебные крошки
На главную / Товары / Септики Топас для загородного дома

А должно быть так http://septikperm.ru/tovar/topas

Настройки:
База категорий товара - shop
Произвольная база - /tovar/%product_cat%
Страница каталога имеет такой урл - http://septikperm.ru/tovar.html

Проставляешь в "База категорий товара" tovar тогда рубрики не работают.

Заманался уже. Че делать есть решение?
 
Последнее редактирование:

qwer

Специалист
Местный
Разрабатывала сайт на WP и столкнулась с реальной проблемой, над которой билась несколько дней.
Предыстория:
На работе у нас развёрнут свой "dev" сервер с помощью которого разрабатываются сайты.
Забыла сразу настроить постоянные ссылки, поэтому занялась этим когда большая часть функционала сайта уже была реализована.

Что за проблема у меня возникла:
При настройки ЧПУ на произвольные ссылки: /%category%/%postname%/ у меня постоянно выбивалась ошибка 404 когда был переход на любую страницу с "правильным названием", при этом совершенно не важно какие именно я прописывала и /%category%/%postname%.html и просто /%postname%/.

Облазив интернет, все решения которые попадались - мне не помогали. А бедный .htaccess был редактирован больше обычного. Плагин Cyr-to-lat стоял и вот вроде всё должно работать. Но раз за разом я видела только ошибку 404.

Я нашла решение этой проблемы не сразу. Связано это с настройками нашего самодельного сервера.
В нём отсутствовал определенный модуль, который и отвечает за адекватную настройку ЧПУ. Это может быть полезным тем, кто так же работал/работает или будет работать на "своём" сервачке, вместо локального компьютера.

Вот решение которое сработало:

1. Установка плагина Cyr-to-lat, по поиску в админке сможете выйти на него и добавить на сайт.
2. Права на .htaccess 664
Содержимое .htaccess: (Добавлять не обязательно, если у вас установлены нужные права на этот файл WP сам подключит эти правила)
Код:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
3. КОРЕНЬ ЗЛА
Если ваш веб-сервер (как и в моём случае) Apache, то скорее всего отсутствует модуль mod_rewrite. Без которого пиши/обновляй/перезаливай файл .htaccess — работать правила НЕ БУДУТ.
Так же, возможно модуль есть, а вот .htaccess у вас не работает.
Проблем всего 2:

1) Не работает файл .htaccess
2) Не загружен модуль Apache — mod_rewrite

В первом случае необходимо проверить в настройках Apache (httpd.conf) следующие директивы AccessFileName и AllowOverride.
Для AccessFileName значение должно быть .htaccess (AccessFileName .htaccess).
Для AllowOverride (действует внутри <directory>) значение должно быть All (AllowOverride All).

Во втором случае проверяем прописан ли в настройках mod_rewrite.
В секции # ### Loaded Modules должна быть строка:

Код:
LoadModule rewrite_module [путь к модулю]/mod_rewrite.so
В секции # ### Added Modules должно быть:

Код:
AddModule mod_rewrite.c
Если у вас нет прав для работы с Apache, можете написать своему хостинг провайдеру или системному администратору, который подключит всё необходимое.

Ну вот, теперь после проделанных действий, всё точно заработает.
(Почему продолжился поиск проблемы в серверной части: был перенос на домашнюю машину, с сервером Open Server - ЧПУ настроились сразу и адекватно)

Если кто-нибудь столкнется с подобной проблемой, действия которые я описала должны будут помочь.
А если вы нашли другие способы решения подобной проблемы, отпишитесь, очень интересно будет почитать.

Всем спасибо за внимание к длиннопосту. Надеюсь, сочтете информацию полезной.
 

Zoten

Форумчанин
На всякий случай сюда тоже добавлю...
Если вы хотите, чтобы у вас базой для товаров и категорий служила единый путь, например:
http://domain.ru/shop - основная страница магазина
http://domain.ru/shop/mycategory - страница категории
http://domain.ru/shop/mycategory/myproduct - страница товара
добавьте код ниже (я воткнул в код своего плагина для сайта), тестировал на Nginx+PHP-FPM

PHP:
function devvn_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', 'devvn_product_category_base_same_shop_base');
add_action( 'create_term', 'devvn_product_cat_same_shop_edit_success', 10, 2 );
function devvn_product_cat_same_shop_edit_success( $term_id, $taxonomy ) {
    devvn_product_category_base_same_shop_base(true);
}
 

Zoten

Форумчанин
а разве по умолчанию оно не так?
Неа! По умолчанию, если вы пропишете одинаковые базы категориям товара и товарам, а также если у страницы магазина будет путь как и у базы - получите 404.
Попробуйте)
 

artemkomarov

Специалист
Местный
Неа! По умолчанию, если вы пропишете одинаковые базы категориям товара и товарам, а также если у страницы магазина будет путь как и у базы - получите 404.
Попробуйте)
Я про то что ссылки настраиваются в настройках для этого не нужен кастомный код. И среди уже созданных опций есть описаная вами выше структура магазин/категория/подкатегория/товар
 

Zoten

Форумчанин
Допустим вы создали категорию товара, она будет доступна по ссылке:
http://domain.ru/product-category/mycategory,
а товар привязанный к этой категории будет доступен по ссылке:
http://domain.ru/shop/mycategory/myproduct

Вам например нужно чтобы страница категории была доступна по ссылке:
http://domain.ru/shop/mycategory,
вы идёте в настройки постоянных ссылок и там меняете базу категорий с "product-category" на "shop".
После этого вы получаете 404 или тут
http://domain.ru/shop/mycategory,
или тут
http://domain.ru/shop/mycategory/myproduct (точно не помню что отваливается).
При этом у вас есть ещё страница магазина http://domain.ru/shop
 

Zoten

Форумчанин
Оформил как плагин, сейчас некогда проверить - но работать должен! После активации плагина, не забудьте товарам и категориям задать одинаковую базу.
 

Вложения

intmprof

Новичок
Поставил. Работает.
Но покопался и понял, что этот код просто можно вставить в файл functions.php в используемой теме.
 
Последнее редактирование:

tuxfighter

Гуру
Местный
Поставил. Работает.
Но покопался и понял, что этот код просто можно вставить в файл functions.php в используемой теме.
код практически любого плагина можно вставить в functions.php и он будет работать.
плагин тем и отличается, что он работает не зависимо от используемой темы.
учите мат. часть
 

intmprof

Новичок
я как бы маркетолог.
Мне до мат. части сайтов далеко.
Иначе бы не сидел и не спрашивал.
Когда поставил плагином выдавало наложение или что то такое, поставил когда в файл перестало сообщение о наложении выходить в Query Monitor.
 
Сверху Снизу