Плагин магазина 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 "ID}' available='true'>\n"; //выводим ID товарной записи
echo "\t{$permalink}\n"; //выводим URL товарной записи
echo "\t{$row->price}\n"; //выводим цену товара
echo "\tRUR\n"; //выводим валюту
echo "\t{$row->category}\n"; //выводим рубрику
echo "\t{$picture}\n"; //выводим картинку
echo "\ttrue\n"; //выводим доставку
echo "\t{$row->name}\n"; //выводим наименование товара
//echo "\t{$id_kurs}\n";
echo "\t{$description}\n"; //выводим описание товара
//echo "\t{$time}\n";
echo "\n";
}
}
echo "\n\n";
echo "\n";
echo "\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 "ID}' available='true'{$groupid}>\n"; $groupid = ''; echo "\t{$permalink}\n"; echo "\t{$row->price}\n"; if($old_price){echo "\t{$old_price}\n";} echo "\tBYR\n"; echo "\t{$row->category}\n"; if($market_category){echo "\t{$market_category}\n";} echo "\t{$picture}\n"; if($picture1){echo "\t{$picture1}\n";} if($picture2){echo "\t{$picture2}\n";} if($picture3){echo "\t{$picture3}\n";} echo "\ttrue\n"; if($delivery_cost){echo "\t{$delivery_cost}\n";} echo "\t{$row->name}\n"; if($vendor){echo "\t{$vendor}\n";} //if($model){echo "\t{$model}\n";} echo "\t{$description}\n"; if($unit_ru){echo "\t{$unit_ru}\n";} if($unit_int){echo "\t{$unit_int}\n";} if($color){echo "\t{$color}\n";} if($material){echo "\t{$material}\n";} if($pol){echo "\t{$pol}\n";} if($age){echo "\t{$age}\n";} echo "\n"; } } echo "\n\n"; echo "\n"; echo "\n";