Analitycs

пятница, 11 января 2013 г.

Как решить проблему с неверным product slug в Woocommerce 1.6 с WPML?

Как ни хорош Wordpress с WooCommerce, но мультиязычность там сделана... мягко говоря - через одно место.

Мало того что WPML платный, так еще и с WooCommerce наблюдаются постоянные геморрои, особенно с permalinks/slug.

Суть проблемы

Если включена мультиязычность - то после  русифицикации URL продуктов вида

http://mysupersite.com/woocommerce/product/my-super-item/

превращается в

http://mysupersite.com/woocommerce/товар/мой-супер-товар/

и при редиректах превращается либо в 404, либо в

http://mysupersite.com/woocommerce//мой-супер-товар/

Причем по

http://mysupersite.com/woocommerce/product/мой-супер-товар/


Страница доступна

Путем гугления по запросам how to fix product slug in woocommerce wpml, how to change product slug in wpml woocommerce  выяснилось, что проблема упорно возникает в течении прошлого года у разных людей.

Рекомендации извлеченные из официального форума WPML.

  • залить исправленный .po файл - в котором нужно удалить перевод product slug - не помогло.
  • скачать обновленную версию WooCommerce Multilingual. Почему его не видел Plugin Update - загадка.  А вот это вроде помогло - взлетело. 
Да, это проверялось для WooCommerce 1.6 - для 2.0 вероятно работать не будет

6 комментариев:

  1. Я решил ее так:
    удалил woocommerce.
    Скачал плагин.
    Изменил в woocommerce-ru_RU.po везде slug на product.

    Изменил в корневой папке плагина файл woocommerce.php:
    в функции register_post_type( "product",
    изменил строку
    'rewrite' => array( 'slug' => $product_base, 'with_front' => false, 'feeds' => $base_slug ),
    на
    'rewrite' => array( 'slug' => 'product', 'with_front' => false, 'feeds' => $base_slug ),


    И ниже фрагмент
    $product_base = ( get_option('woocommerce_prepend_shop_page_to_products') == 'yes' ) ? trailingslashit($base_slug) : trailingslashit(_x('product', 'slug', 'woocommerce'));

    if ( get_option('woocommerce_prepend_category_to_products') == 'yes' ) $product_base .= trailingslashit('%product_cat%');

    $product_base = untrailingslashit($product_base);

    заменил на
    $product_base = 'product';

    ОтветитьУдалить
    Ответы
    1. Ок, спасибо

      На данный момент решили отказаться от двух языков сразу

      Удалить
  2. Сейчас не получается воспользоваться описанными вариантами..
    установил плагин - всё равно русское слово в URL
    способ описанный в комментариях не работает т.к. в файле
    woocommerce.php:
    нет строчек
    'rewrite' => array( 'slug' => $product_base, 'with_front' => false, 'feeds' => $base_slug ),

    ОтветитьУдалить
    Ответы
    1. Этот способ был на WooCommerce 1.6, а вы похоже - взяли новую версию 2.0

      Поправлю в заголовке сейчас

      Удалить