Яндекс.Маркет: строим YML-фид для размещения товаров в Маркете и других агрегаторах

Плагин магазина 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";
Если Вы не сильны в коде, мы сможем сделать это работу для Вас. Услуга платная. Стоимость зависит от сложности конструкции YML. Напишите нам через форму (нажмите + слева)

Оставить комментарий

Translate »