YML Яндекс Маркет для Woocommerce

yandex.php (залить в корень сайта)

В $param указываются поля плагина ACF

<? 
/*
	Name: Yml for Woocommerce
	Author: DanilSmg
	Ver: 1.0
*/
require_once(dirname(__FILE__) . '/wp-config.php');
$wp->init();
$wp->parse_request();
$wp->query_posts();
$wp->register_globals();
$wp->send_headers();
header("Content-Type: application/xml");


/*
	PICKUP
	true — самовывоз есть;
	false — самовывоза нет.
*/
define('PICKUP', 'true');


$yml = new Yml();
$yml->getHeader(get_woocommerce_currency());

$args = array(
  'post_type'              => ['product'],
  'post_status'            => ['publish'],
  'nopaging'               => true,
);
$query = new WP_Query( $args );
while ($query->have_posts()) {
	$query->the_post(); 
	global $product;
	if($product->get_price() && $product->get_image_id()) {
		$term = get_the_terms($product->ID, 'product_cat');
		$yml->getOffer(
				$product->get_id(), 
				$product->get_title(), 
				wp_get_attachment_url($product->get_image_id()),
				$product->get_permalink(),
				$product->get_price(),
				get_woocommerce_currency(),
				$term[0]->term_id,
				$term[0]->name,
				get_the_content(),
                $param1 = get_field('цвет'),
                $param2 = get_field('толщина'),
                $param3 = get_field('применение'),
                $param4 = get_field('обработка'),
			);
	}

 }
wp_reset_query();

class Yml {

	private $categories;
	private $blogname;
	private $site_url;

	function __construct() {
		$args = [
			'taxonomy' => 'product_cat'
		];
		$this->categories = get_categories( $args );
		$this->blogname = get_bloginfo('name');
		$this->site_url = get_site_url();
	}

	function __destruct() {
		$xml .= '</offers>';
		$xml .= '</shop>';
		$xml .= '</yml_catalog>';
		echo $xml;
	}

	
	public function getHeader($currency) {
		$xml  = '<?xml version="1.0" encoding="UTF-8"?>';
		$xml .= '<yml_catalog date="'.date("Y-m-d"). ' 00:00">';
		$xml .= '<shop>';
		$xml .= '<name>'.$this->blogname.'</name>';
		$xml .= '<company>'.$this->blogname.'</company>';
		$xml .= '<url>'.$this->site_url.'</url>';
		$xml .= '<currencies><currency id="'.$currency.'" rate="1"/></currencies>';
		$xml .= '<categories>';
		foreach($this->categories as $item_cat ) {
			$xml .= '<category id="'.$item_cat->term_id.'">'.$item_cat->name.'</category>';
		}
		$xml .= '</categories>';
		$xml .= '<offers>';
		echo $xml;
	}
	
    

	public function getOffer($id, $name, $picture, $url, $price, $currencyId, $categoryId, $category, $description, $param1, $param2, $param3, $param4) {
		$xml  = '<offer id="'.$id.'" available="true">';
		$xml .= '<name>'.$name.'</name>';
		$xml .= '<picture>'.$picture.'</picture>';
		$xml .= '<url>'.$url.'</url>';
		$xml .= '<price>'.$price.'</price>';
		$xml .= '<currencyId>'.$currencyId.'</currencyId>';
		$xml .= '<categoryId>'.$categoryId.'</categoryId>';
		$xml .= '<description><![CDATA['.$description.']]></description>';
		$xml .= '<offer>';
		$xml .= '<param name="Цвет">'.$param1.'</param>';
		$xml .= '<param name="Толщина">'.$param2.' мм</param>';
		$xml .= '<param name="Применение">'.$param3.'</param>';
		$xml .= '<param name="Обработка">'.$param4.'</param>';
     	$xml .= '</offer>';
     	$xml .= '</offer>';
		echo $xml;
	}
}
?>

Перенаправление с .php на .yml

Например данный скрипт лежит в корне сайта с именем sitemap.php, вы хотите чтобы он открывался по адресу https://example.com/sitemap.yml. В файле .htaccess нужно добавить запись:

RewriteEngine On
RewriteRule ^yandex.yml$ yandex.php [L]
Контакты

Работаем: с ПН по ПТ, с 08:00 до 17:00 (МСК)
Отдыхаем: в СБ и ВС, чтобы быть в тонусе
и реализовывать самые сложные идеи