Выгрузка в YML содержимого магазина на Woocommerce

Описывается выгрузка в YML (Yandex Markup Language) содержимого интернет-магазина на WordPress + Woocommerce. Формат YML – это описание магазина, категорий и товаров на жестко формализованном Яндексом подмножестве языка XML и используется для загрузки информации в Yandex Market, а так же для некоторых других приложений. Выгрузка осуществляется при помощи плагина BG_YML_Dump. The same in English

В процессе выгрузки:

  • создается заголовок с названием интернет-магазина, компании, агентства WEB-дизайна, которые берутся из парамертов плагина;
  • создается секция валют. Основная валюта берется из настроек Woocommerce. Ее курс 1. Если интернет-магазин работает для нескольких стран, то в секцию будут включены валюты этих стран. Их курсы будут браться по центральному банку страны, которая выпускает основную валюту магазина;
  • создается секция категорий;
  • выводятся все товары;
  • имеется возможность включать в выгрузку только некоторые выбранные администратором категории товаров или не включать их.

Выгрузка выполняется по расписанию один раз в сутки как фоновое регламентное задание. Файл выгрузки располагается на сервере и может быть загружен по его URL http://URL сайта/wp-content/uploads/yml/имя_файла.xml, где имя файла – URL сайта с точками, замененными на подчеркивание. Например, для сайта www.example.com URL файла выгрузки будет http://www.example.com/wp-content/uploads/yml/www_example_com.xml. Для того, чтобы прекратить выполнение регламентного задания, достаточно деактивировать плагин.

При желании получить выгрузку в реальном времени (тут и сейчас), на любую страницу сайта (лучше на специально созданную) можно разместить шорткод [bg-wc-uml-dump]. Файл выгрузки будет обновляться каждый раз, когда в браузере будет отображаться эта страница.

Установка плагина

Необходимо получить файл плагина bg_yml_dump.zip отсюда

Далее следуйте инструкциям “Как установить плагин WordPress” для его установки и “Как обновить плагин WordPress” для обновления. В поставку включен перевод сообщений на русский язык.

Плагин полностью совместим с сетью виртуальных сайтов WordPress Multisite (см. “Как установить WordPress multisite“, “Как настроить WordPress multisite” и “Как начать работу с WordPress multisite“).

Выгрузка в YML содержимого магазина на Woocommerce (использование плагина)

Для настройки плагина необходимо подготовить следующую информацию:

  1. Короткое имя магазина (Short Shop Name).
  2. Название компании – владельца магазина (Company Name).
  3. Название агентства (Agency Name) WEB-дизайна (WEB-мастера).
  4. Адрес электронной почты WEB-мастера (Contact email)
  5. Вендор (Vendor) – поставщик или торговая марка продукции.
  6. Хотите ли Вы выводить только категорию товара в теге typePrefix или включая все родительские.
  7. Если Вы хотите выгружать не весь магазин, а только включать (или не включать) отдельные категории товаров, то список такох категорий.
  8. Если Вы хотите ограничить в выгрузке максимальное количество URL изображения для товара, то это число.

Как только плагин установлен, его необходимо активировать на сайте (на целевом сайте для сети виртуальных сайтов WordPress Multisite).

Далее перейти “Параметры” (Settings) -> “Выгрузка товаров в YML” (Product YML Dump). На первой вкладке надо заполнить все поля подготовленной информацией, проверить ввод и нажать кнопку “Сохранить изменения” (Save Changes)  Рис. 1.

Выгрузка в YML. Рис. 1. Настройка плагина BG_YML_DUMP (вкладка 1)

Рис. 1. Настройка плагина BG_YML_DUMP (вкладка 1)

На второй вкладке Вы можете ввести необходимые ограничения по категориям при выгрузке товаров и/или максимальное число URL изображений для товара, проверить ввод и нажать кнопку “Сохранить изменения” (Save Changes). (Рис. 2.)

Выгрузка в YML. Рис. 2. Настройка плагина BG_YML_DUMP (вкладка 2)

Рис. 2. Настройка плагина BG_YML_DUMP (вкладка 2)

В случае возникновения каких-либо проблем, можно воспользоваться вкладкой помощи (Рис. 3.), открыть которую можно нажав на кнопку “Помощь” справа в самом верху.

Выгрузка в YML. Рис. 3. Настройка плагина BG_YML_DUMP (Помощь)

Рис. 3. Настройка плагина BG_YML_DUMP (Помощь)

Это все. Раз в сутки Вы будете получать Вашу выгрузку товаров. URL файла можно использовать в Yandex Market или каких других партнерских программах.

Выгрузка в YML. Внесение изменений

Только для тех, кто понимает, что делает! Все изменения рекомендуется сначала протестировать на тестовом сайте и потом переносить на рабочий, предварительно сделав резервную копию (см. “Как организовать резервное копирование сайта“, “Как сделать backup сайта на WordPress” и “Восстановление сайта WordPress из резервной копии“).

1. Производитель товаров (Brand).

Для мультибрендового интернет-магазина можно в тегах <vendor> и </vendor> вывести название компании-производителя товара. Для этого необходимо создать Свойство (Attribute) с любым понятным названием и с ярлыком (slug) “brand“. В качестве значений свойства должны быть все названия компаний-производителей.

Очень Важно! При выборе значения этого свойства для товара, галочку “Используется для вариаций” (Used for variations) НЕ ставить.

2. Размещение файла выгрузки.

Для изменения размещения файла выгрузки в файле functions.php используемой дочерней темы (см. “Дочерняя тема WordPress“) необходимо создать фильтр, который задаст адрес папки для размещения файла выгрузки:

if ( function_exists('bg_yml_dump')) {
    add_filter('bg_yml_dir_name', 'my_dir_name');
    function my_dir_name($dir_name) {
        // Here all staff to change dump directory beginning with $dir_name =
        return $dir_name;
    }
}

3. Изменение названия категорий в теге <typePrefix>…</typePrefix>

Плагин выводит название категории, которой принадлежит товар в теге <typePrefix>…</typePrefix>. Для того, чтобы изменить это, в файле functions.php используемой дочерней темы необходимо создать фильтр, который выведет в этом теге все, что Вы хотите там видеть:

if ( function_exists('bg_yml_dump')) {
    add_filter('bg_yml_type_prefix', 'my_type_prefix', 10, 2);
    function my_type_prefix($type_prefix, $product) {
        // Here all staff
        return $type_prefix;
    }
}

4. Добавление дополнительной информации в описание товара

Некоторые интернет-магазины используют дополнительные плагины или какой иной способ добавления информации к описанию товара. Чтобы дополнить стандартное для Woocommerce описание товара  в выгрузке YML любой информацией, необходимо создать фильтр в файле functions.php используемой дочерней темы :

if ( function_exists('bg_yml_dump')) {
    add_filter('bg_yml_extra_tags', 'my_extra_tags', 10, 2);
    function my_extra_tags($product_extra_tags, $product) {
        // Here all staff
        return $product_extra_tags;
    }
}

В результате работы фильтра в переменная $product_extra_tags должна содержать набор строчек вида:

<tag1>Содержимое tag1</tag1>"\n"

где tag1 есть разрешенный для YML тег.

Описана выгрузка в YML  содержимого интернет-магазина на WordPress + Woocommerce

, ,

64 Responses to Выгрузка в YML содержимого магазина на Woocommerce

  1. Андрей 13/11/2014 at 04:30 #

    Сергей, скажите, пожалуйста, а где взять этот плагин? Беглое гугление результатов не дало. Было бы здорово, если бы в статье были ссылки на его скачивание.

  2. Виктор 16/11/2014 at 09:35 #

    Здравствуйте, т.е. к примеру крон не нужен, обновление файла происходит ночью 1 раз в сутки в момент захода любого пользователя на сайт? Передаётся информация наличия-отсутствия товара? А нельзя настроить частоту обновления файла?

    • stseprounof
      stseprounof 16/11/2014 at 10:56 #

      Добрый день!
      1. Cron в данном случае не нужен. Естествено, для нормальной работы сервера на linux, anacron нужен.
      2. Как только Вы активировали плагин, регламентное задание будет выполняться раз в сутки и будет формироваться файл выгрузки. Ничего делать не надо.
      3. Частота. В Яндекс Market не передается количество товара – только его доступность (наличие). Мы считаем, что обновление этой информации раз в сутки достаточно. При любой частоте обновления может сложиться ситуация, когда будет продана последняя единица, после чего пользователь перейдет в магазин за этим товаром с Яндекса и увидит, что товар отсутствует.

  3. alter44 04/04/2015 at 08:08 #

    Я купил этот плагин, как мне ввести лицензию. Где ее взять Purchase Code?

    • stseprounof
      stseprounof 04/04/2015 at 09:57 #

      Спасибо за покупку. Просто установите плагин, активируйте его и будет работать.

      • alter44 07/04/2015 at 09:47 #

        Куда он будет приходить? (Раз в сутки Вы будете получать Вашу выгрузку товаров)

        • stseprounof
          stseprounof 07/04/2015 at 10:04 #

          Выше написано как определить URL файла. Он появится в течении суток. Если хотите немедленно – используйте шорткод.

          • BARABASH 27/05/2015 at 11:47 #

            Не могли бы вы, пожалуйста, уточнить, о каком шорткоде идет речь?

          • stseprounof
            stseprounof 27/05/2015 at 11:49 #

            [bg-wc-uml-dump]

  4. Олег 17/04/2015 at 08:53 #

    Добрый день
    хотим приобрести Ваш плагин, но у нас несколько вопросов
    поддерживает плагин нашу текущую версию Woocomerce Версия 2.3.6?
    поддерживаете ли Вы обновления плагина при обновлениях Woocomerce?
    есть ли экспорт вариантов товара?
    спасибо

    • stseprounof
      stseprounof 17/04/2015 at 08:58 #

      Добрый день! Спасибо!

      Версия 2.3 поддерживается.
      При выходе новых версий Woocommerce плагин будет обновляться.
      Вариативные товары поддерживаются.

  5. Александр 17/04/2015 at 15:48 #

    Добрый день, хотим приобрести Ваш плагин, но есть важный для нас вопрос. Подойдет с генерированный файл для Wikimart?

    • stseprounof
      stseprounof 17/04/2015 at 15:57 #

      Добрый день! Плагин выводит содержимое магазина в правильном формате Yandex Markup Language. Это формат используется для загрузки содержимого в Yandex Market, а так же используется в некоторых других приложениях. Соответственно, если Wikimart для вввода данных использует YML, то должен подойти.

  6. Олег 18/04/2015 at 06:26 #

    Андрей
    все решили спасибо
    плагин отлично работает!

  7. Александр 21/04/2015 at 07:54 #

    Добрый день,
    Хороший плагин, сегодня приобрели.
    Но столкнулись со следующими проблемами
    1. Если wordpress установлен не в корневую директорию, в название файла выгрузки добавляется имя папки – “/name-dir”
    у нас получислось – sitename_ru/name-dir , соответственно из за ‘/’ файл не создается.

    2. На сайте мы не используем папку wp-content, мы заменили название. Так же проблема.

    Все проблемы мы устранили. Вам просто для информации.

    Еще раз спасибо, все работает как надо.

    • stseprounof
      stseprounof 21/04/2015 at 09:19 #

      Добрый день!

      Такая ситуация может быть при не стандартной установке WordPress. Но я не хочу усложнять поиск файла выгрузки. Поэтому в самом плагине фиксирована позиция, рассчитанная на некоторые общие правила. Для тех, кто желает поместить файл выгрузки куда-нибудь еще, существует фильтр (см. выше). Достаточно добавить в файл functions.php дочерней темы 5-6 строчек кода и Вы имеете файл выгрузки в любом желаемом вами месте. При этом править коды плагина крайне не рекомендуется.

  8. Иван 13/05/2015 at 10:38 #

    Здравствуйте! Яндекс ругается на кириллицу в сформированном yml файле, т.к. формируются ссылки вида http://weltonus.ru/товар/abonement-vip-6/ вместо http://weltonus.ru/%D1%82%D0%BE%D0%B2%D0%B0%D1%80/abonement-vip-6/ – эту проблему я исправил, заменив в файле перевода woocommerce slug товара на %D1%82%D0%BE%D0%B2%D0%B0%D1%80

    Сейчас выгрузку Яндекс принял, но в качестве проблемы указал кириллицу в названии изображений http://weltonus.ru/wp-content/uploads/2014/06/фото-2-VIP-6-150×150.jpg – как это побороть можно?

    • stseprounof
      stseprounof 13/05/2015 at 10:46 #

      Добрый день!
      При построении сайта на WordPress есть правило, что все внутренние названия должны быть только на латыни. Для ярлыков (slug) есть специальный плагин Cyr_to_Lat enhanced (http://www.stseprounof.org/plugins-must-have-3/), который автоматически переводит ярлыки. То же самое правило и для названий файлов. Боюсь, что надо переделывать сайт. Я не вижу другого решения. Рано или поздно это вылезет.

  9. Иван 13/05/2015 at 12:08 #

    C учетом того, что кириллические названия страниц и файлов лучше позиционируются при продвижении, правило сомнительное. Наверняка есть способ декодировки вывода yml файла.

    • stseprounof
      stseprounof 13/05/2015 at 13:14 #

      Мы говорим не про заголовки страниц (тег h1), которые на русском сайте естественно должны быть русскими и отражать смысл последующего текста и, по возможности, включать ключевое слово, а про ярлыки (slug), которые являются внутренним делом wordpress. То же самое с именами файлов – есть заголовок картинки, подпись и альтернативный текст, которые могут быть любыми. Имя файла лучше делать латинскими буквами.

  10. Stas 17/05/2015 at 09:56 #

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

    Заранее благодарен за ответ

    • stseprounof
      stseprounof 18/05/2015 at 12:31 #

      Добрый день!
      Как Вы это себе представляете? Должны быть некоторые правила что включать а что нет и некоторый язык их описания?

      • Stas 23/05/2015 at 06:45 #

        Да именно так, правила для исключения некоторых категорий товаров

        • stseprounof
          stseprounof 25/05/2015 at 13:01 #

          Хорошо. Идея понятна. Это большая работа. Как только будет время, сделаю. Добавлю список категорий, которые нужно включать/не включать в список. То же самое для тегов.

  11. Vitaliy 05/06/2015 at 12:25 #

    Добрый день.
    “На второй вкладке Вы можете ввести необходимые ограничения по категориям при выгрузке товаров” – не отображает поле для выбора категорий, что это может быть

    Прилагаю скриншот – http://joxi.ru/xAeGJYkTbepdmy

    • stseprounof
      stseprounof 05/06/2015 at 13:20 #

      Добрый день! Думаю, у Вас старая версия woocommerce. Обновитесь. Только осторожно.

  12. Alex 09/06/2015 at 17:43 #

    Добрый день,
    Подскажите пожалуйста, не могли бы подсказать. У товара есть свойство производитель, страна производства, год выпуска, гарантия.
    В выгрузку попадает только производитель. Как сделать что бы все остальные свойства вошли туда. Что указать ярлыке (slug)

    • stseprounof
      stseprounof 09/06/2015 at 19:24 #

      Добрый день!
      Это все не стандартные параметры товара для Woocommerce, реализацию которых каждый интернет-магазин решает по-своему. Решение для магазина А не будет работать для магазина Б и наоборот.

      • Alex 10/06/2015 at 07:16 #

        т.е. ваш скрипт не сможет выгрузить данные параметры в xml, его нужно модифицировать. если возможно подскажите в какую сторону работать

        • stseprounof
          stseprounof 10/06/2015 at 09:22 #

          Я добавил вызов фильтра в конец выгрузки описания товара в YML перед тегом description. Теперь для вывода нестандартных параметров достаточно создать сам фильтр в functions.php, как это написано в описании выше.

          • Alex 17/06/2015 at 04:11 #

            Большое спасибо!

          • Alex 17/06/2015 at 04:45 #

            правильно я понимаю у меня есть свойство – страна производитель, ярлык у него – country_of_origin

            мне нужно добавить запись следующего вида
            if ( function_exists(‘bg_yml_dump’)) {
            add_filter(‘bg_yml_extra_tags’, ‘country_of_origin’, 10, 2);
            function my_extra_tags($product_extra_tags, $product) {
            // Here all staff
            return $product_extra_tags;
            }

            после добавления, белый экран

          • stseprounof
            stseprounof 17/06/2015 at 12:12 #

            Правильно. Фильтр должен быть точно таким, как в п. 4 описания выше.
            Вы вызываете функцию country_of_origin а исполняемая функция называется my_extra_tags, что и вызывает проблему.
            Внутри как-то так:

            $country_of_origin = 'Аргентина';   //Получаем значение страны происхождения как текстовую строку
            $product_extra_tags = '<country_of_origin>' . $country_of_origin . '</country_of_origin>' . "\n";  //Я не уверен, что тег правильный
            return $product_extra_tags;
          • Alex 08/07/2015 at 16:35 #

            Добавили в файл запись следующего вида:

            if ( function_exists(‘bg_yml_dump’)) {
            add_filter(‘bg_yml_extra_tags’, ‘country_of_origin’, 10, 2);
            function country_of_origin($product_extra_tags, $product) {

            $product_extra_tags = ” . $country_of_origin . ” . “\n” ;
            return $product_extra_tags;
            }
            }

            В результате выгрузки в описании каждого товара добавилась строка:

            Вы писали – “$country_of_origin = ‘Аргентина’; //Получаем значение страны происхождения как текстовую строку”

            Немного не понял по поводу этого, в мне указать все страны, перечислить или как?
            Но саму страну он не содержит, подскажите пожалуйста что сделали не так.

            И еще вопрос, у меня сейчас 2 свойства которые мы указываем для товара. Второе – seller_warranty.
            Я добавил второй раз такую же запись, указав – seller_warranty.

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

          • stseprounof
            stseprounof 08/07/2015 at 16:59 #

            Вам нужно взять ваши параметры – страну происхождения и гарантию там, где Вы их храните – для этого в качестве исходной информации для функции дан элемент (inctance) класса WC_Product – $product.
            Используя его методы или свойства, нужно получить эти параметры для товара, в данном случае, например,

            
            $country_of_origin = получаем значение для товара;
            $warranty = получаем значение для гарантии;
            $product_extra_tags .= '<country_of_origin>' . $country_of_origin . '</country_of_origin>' . "\n";
            $product_extra_tags .= '<seller_warranty>' . $warranty . '</seller_warranty>' . "\n";
            

            Должно работать.

  13. Eugen 28/06/2015 at 22:49 #

    Добрый вечер. Присматриваюсь к Вашему плагину. Скажите, вот у нас один товар принадлежит нескольким категориям. Я правильно понимаю, что в данном случае в YML получится дублирование товара несколько раз, или этого как-то можно избежать? Насколько я понимаю Я.Маркет не пропустит повторения. 🙁

    • stseprounof
      stseprounof 29/06/2015 at 11:09 #

      Добрый день!

      У нас то же. Дублирования товара не будет. Категории и товары выгружаются независимо.

      • Eugen 29/06/2015 at 23:02 #

        Отлично, спасибо, сегодня плагин приобрёл. Очень удобно.

  14. Eugen 13/07/2015 at 15:12 #

    Сергей, столкнулись с проблемой при валидации: пишут, что не указана минимальная сумма заказа. Подскажите, пожалуйста, где это делается?

    • stseprounof
      stseprounof 13/07/2015 at 15:15 #

      Боюсь, что нигде. В Woocommerce нет такой информации.

  15. Denis 17/08/2015 at 12:00 #

    Была проблема при которой выдавало 404 по ссылке http://www.example.com/wp-content/uploads/yml/www_example_com.xml

    В менеджере файлов надо было поменять permission с 0700 на 0755.

  16. Morgenn 10/09/2015 at 15:51 #

    Круто, купил себе плагин.
    Спасибо за хороший продукт) Надеюсь будите развивать и поддерживать вместе с развитием woocomerce

  17. Anton 16/09/2015 at 11:45 #

    Добрый день. Подскажите пожалуйста, с вп Версия 4.2.5 и вукомерс Версия 2.3.9 плагин корректно работает?

    • stseprounof
      stseprounof 16/09/2015 at 14:15 #

      Добрый. Да. Есть проблемы?

      • Anton 18/09/2015 at 06:26 #

        Спасибо, плагин установили, всё работает, яндекс выгрузку принимает. Но есть вопрос по поводу указания бренда. Не понял куда именно добавлять атрибут и что в нем указывать?
        Я могу скинуть вам ссылку на xml, но не в открытые комменты по этическим соображениям 🙂

        • stseprounof
          stseprounof 18/09/2015 at 20:01 #

          См. Описание выше. Внесение изменений. П. 1.

  18. Виталий 09/12/2015 at 13:01 #

    Изменения не сохраняются. Например – ограничение по категориям.

    • stseprounof
      stseprounof 09/12/2015 at 14:02 #

      Добрый день! А Вы уверены, что используете последнюю версию плагина?

  19. Анна 17/12/2015 at 15:43 #

    Плагином пользуемся около месяца, удобен и понятен в использовании. Сбоев в работе или конфликтов с другими плагинами не выявлено. Было важно быстро выгружать большой объем вариативных и простых товаров на яндекс маркет, с чем плагин справляется. Можно самостоятельно выбирать категории товаров для выгрузки.
    Спасибо за коммуникацию, регулярные обновления и доработки!

  20. Павел 16/02/2016 at 23:43 #

    Здравствуйте, помогите найти решение, приобрел вчера ваш плагин но ни как не могу получить файл с выгрузкой, тестирую на двух сайтах на одном ***1.com/auto(корневая директория wp) woo 2.5.2 вордпресс 4.4.2 и второй d***r.by woo 2.4.7 вордпресс 4.3.1, в дерректории по умолчанию файлы не появляются ни автоматически ни при использовании шорткода

    • stseprounof
      stseprounof 16/02/2016 at 23:47 #

      Добрый день!
      Из письма непонятно – пробуете сделать выгрузку страницей с шорткодом?

  21. Евгений 28/02/2016 at 10:55 #

    Добрый день! Скажите поддерживается выгрузка вариантных товаров ?

    • stseprounof
      stseprounof 28/02/2016 at 16:59 #

      Добрый день! Да. Конечно.Вы можете выводить их либо как один товар с параметрами, либо как отдельные варианты.

      • Евгений 29/02/2016 at 08:16 #

        супер! приобрету

  22. Олег 28/02/2016 at 23:16 #

    Добрый день!
    Подскажите описание товара выгружается с тегами или сплошным текстом.? Где могу увидеть пример выгрузки?

    • stseprounof
      stseprounof 29/02/2016 at 08:19 #

      Добрый день! Выгрузка осуществляется точно в соответствии с со спецификациями Яндекса.

  23. Dzmitry 30/07/2016 at 15:24 #

    Здравствуйте! Прошу уточнить, можно ли исключать товары, которых нет в наличии или исключить полностью всю категории, которую нет необходимости выгружать. Спасибо!

  24. Каха 14/10/2016 at 06:47 #

    А белорусский рубль поддерживается?

  25. Роман 18/03/2017 at 01:18 #

    Здравствуйте! Скажите, сейчас плагин поддерживается и совместим с текущей версией woocommerce?

    • stseprounof
      stseprounof 18/03/2017 at 10:14 #

      добрый день! Плагин поддерживается и совместим с Woocommerce 2.6

Leave a Reply