Плагин магазина WP Shop имеет в своем арсенале функцию по созданию XML-фида в формате YML, являющимся де-факто стандартом при передаче данных о товарах и их свойствах во внешние аггрегаторы, такие как Яндекс Маркет и price.ru. Это помогает владельцам магазинов повышать продажи через внешние площадки.
Скрипт лежит в корне плагина в файле wpshop-yml.php и вкратце логика его работы такова: он формирует список рубрик и товаров на основе тех записей ВордПресс, которые имеют параметр цены (в виде дополнительного поля cost_1). Скрипт собирает такие записи а так же связанные с ними обязательные данные: картинки, рубрики, цены, дополнительные свойства и т.д. — и отдает их наружу по запросу. Исключаются те товары, которые имеют допполе noyml=1 или sklad_1=0 то есть те, которых в данный момент нет в наличии (на складе). Если Вы посмотрите на код ниже, Вы увидите каким образом включаются в YML разные данные о товарах:
..... foreach ($res1 as $row){ $sql2 = "SELECT `post_id` FROM `{$wpdb->postmeta}` WHERE `post_id` = '{$row->ID}' AND `meta_key` = 'noyml'"; $r = $wpdb->get_results($sql2); //выполняется запрос в БД со списком товаров if ( empty($r)) { $picture = get_post_meta($row->ID,'Thumbnail',true); // Делаем на случай, если помимо ссылки на картинку, мета-поле обтекает другой текст. //$picture = preg_match("#http://(.*)[\s\">]#U",$picture,$tmp); //$description = get_post_meta($row['ID'],'shorttext',true); //описание товара берется из дополя shorttext, или $description = strip_tags ($row->content); //описание товара берется из контента записи $description = preg_replace("/&#?[a-z0-9]{2,8};/i"," ",$description); //очищаем описание от HTML который может сломать YML $permalink = get_permalink($row->ID); //берем URL товарной записи echo "<offer id='{$row->ID}' available='true'>\n"; //выводим ID товарной записи echo "\t<url>{$permalink}</url>\n"; //выводим URL товарной записи echo "\t<price>{$row->price}</price>\n"; //выводим цену товара echo "\t<currencyId>RUR</currencyId>\n"; //выводим валюту echo "\t<categoryId>{$row->category}</categoryId>\n"; //выводим рубрику echo "\t<picture>{$picture}</picture>\n"; //выводим картинку echo "\t<delivery>true</delivery>\n"; //выводим доставку echo "\t<name>{$row->name}</name>\n"; //выводим наименование товара //echo "\t<vendorCode>{$id_kurs}</vendorCode>\n"; echo "\t<description>{$description}</description>\n"; //выводим описание товара //echo "\t<sales_notes>{$time}</sales_notes>\n"; echo "</offer>\n"; } } echo "</offers>\n\n"; echo "</shop>\n"; echo "</yml_catalog>\n";
В следующем примере предлагается вывод большего количество дополнительных параметров товаров, нескольких картинок. Есть проверка, задан параметр или нет. Используйте его как подсказку при составлении требующихся именно Вам YML-фидов.
..... foreach ($res1 as $row){ $sql2 = "SELECT `post_id` FROM `{$wpdb->postmeta}` WHERE `post_id` = '{$row->ID}' AND `meta_key` = 'noyml'"; $r = $wpdb->get_results($sql2); if ( empty($r)) { $model = get_post_meta($row->ID, 'model', true); $group_id = get_post_meta($row->ID, 'group_id', true); if ($group_id){$groupid = " group_id='{$group_id}'";} $vendor = get_post_meta($row->ID, 'vendor', true); $unit_ru = get_post_meta($row->ID, 'unit_ru', true); $unit_int = get_post_meta($row->ID, 'unit_int', true); $old_price = get_post_meta($row->ID, 'old_price', true); $market_category = get_post_meta($row->ID, 'market_category', true); $delivery_cost = get_post_meta($row->ID, 'delivery_cost', true); $color = get_post_meta($row->ID, 'color', true); $material = get_post_meta($row->ID, 'material', true); $pol = get_post_meta($row->ID, 'pol', true); $age = get_post_meta($row->ID, 'age', true); //$picture = get_post_meta($row['ID'],'yml_pic',true); $picture = get_post_meta($row->ID,'Thumbnail',true); $picture1 = get_post_meta($row->ID,'Thumbnail1',true); $picture2 = get_post_meta($row->ID,'Thumbnail2',true); $picture3 = get_post_meta($row->ID,'Thumbnail3',true); // Делаем на случай, если помимо ссылки на картинку, мета-поле обтекает другой текст. //$picture = preg_match("#http://(.*)[\s\">]#U",$picture,$tmp); $description = get_post_meta($row->ID,'shorttext',true); //$description = strip_tags ($row['content']); $permalink = get_permalink($row->ID); echo "<offer id='{$row->ID}' available='true'{$groupid}>\n"; $groupid = ''; echo "\t<url>{$permalink}</url>\n"; echo "\t<price>{$row->price}</price>\n"; if($old_price){echo "\t<oldprice>{$old_price}</oldprice>\n";} echo "\t<currencyId>BYR</currencyId>\n"; echo "\t<categoryId>{$row->category}</categoryId>\n"; if($market_category){echo "\t<market_category>{$market_category}</market_category>\n";} echo "\t<picture>{$picture}</picture>\n"; if($picture1){echo "\t<picture>{$picture1}</picture>\n";} if($picture2){echo "\t<picture>{$picture2}</picture>\n";} if($picture3){echo "\t<picture>{$picture3}</picture>\n";} echo "\t<delivery>true</delivery>\n"; if($delivery_cost){echo "\t<local_delivery_cost>{$delivery_cost}</local_delivery_cost>\n";} echo "\t<name>{$row->name}</name>\n"; if($vendor){echo "\t<vendor>{$vendor}</vendor>\n";} //if($model){echo "\t<model>{$model}</model>\n";} echo "\t<description>{$description}</description>\n"; if($unit_ru){echo "\t<param name=\"Размер\" unit=\"RU\">{$unit_ru}</param>\n";} if($unit_int){echo "\t<param name=\"Размер\" unit=\"INT\">{$unit_int}</param>\n";} if($color){echo "\t<param name=\"Цвет\">{$color}</param>\n";} if($material){echo "\t<param name=\"Материал\">{$material}</param>\n";} if($pol){echo "\t<param name=\"Пол\">{$pol}</param>\n";} if($age){echo "\t<param name=\"Возраст\">{$age}</param>\n";} echo "</offer>\n"; } } echo "</offers>\n\n"; echo "</shop>\n"; echo "</yml_catalog>\n";