Варианты продуктов WooCommerce, лента продуктов Google и вложенные циклы в Wordpress
Я пытаюсь создать канал продуктов Google от Woocommerce - доступные плагины для этого не поддерживают варианты продуктов, что немного неприятно.
Я работаю в магазине одежды с разными размерами и цветами предмета, поэтому требуется, чтобы в ленте продуктов Google были перечислены все доступные комбинации размеров / цветов, и, поскольку он контролирует запасы для каждого варианта, нет смысла перечислять Размер 10 Белый, как на складе, когда все, что у нас осталось, это Коричневый размер 14.
Итак, я считаю, что мне нужно создать канал продукта, который запускает цикл для каждого продукта, а затем внутри цикла запускает вложенный цикл для каждого варианта? Это немного медленно, поэтому, пожалуйста, предложите лучший способ, если он есть! По крайней мере, он будет работать только один раз в месяц.
Вот что у меня так далеко:
<?php
// First get the main product details.
$args = array( 'post_type' => 'product', 'posts_per_page' => 999 );
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post(); global $product;
// Now do a second nested loop to get the variations.
$args2 = array( 'post_type' => 'product_variation', 'post_parent' =>'$id');
$variationloop = new WP_Query( $args2 );
while ( $variationloop->have_posts() ) : $variationloop->the_post();
// get the parent of each variation so we can use $parent (is this necessary???)
$parent = get_post($post->post_parent);
?>
Я чувствую, что на самом деле, выполнив первый цикл, я должен быть в состоянии это объяснить, но как только второй, вариационный цикл закончен, я, похоже, не смогу сослаться на что-либо в первом цикле продукта. Следовательно get_post($post->post_parent)
А потом я делаю корм. Пока это похоже на работу:
<item>
<title><?php echo $parent->post_title;?></title>
<link>http://mysite.com/shop/<?php echo $parent->post_name;?></link>
<g:image_link><?php echo wp_get_attachment_url( get_post_thumbnail_id() ) ?></g:image_link>
<g:price><?php echo $product->price ?></g:price>
<g:condition>New</g:condition>
<g:id><?php echo $id; ?></g:id>
<g:availability><?php echo $product->is_in_stock() ? get_option('product_in_stock') : get_option('product_out_stock'); ?></g:availability>
<g:brand>My Brandname</g:brand>
<g:product_type>Clothing & Accessories > Clothing > Swimwear</g:product_type>
<g:google_product_category>Clothing & Accessories > Clothing > Swimwear</g:google_product_category>
<g:shipping_weight><?php echo $product->get_weight();?></g:shipping_weight>
<g:mpn><?php echo $product->get_sku(); ?></g:mpn>
<?php if (get_option('rss_use_excerpt')) : ?>
<description><![CDATA[<?php echo $parent->post_excerpt; ?>]]></description>
<?php else : ?>
<description><![CDATA[<?php echo $parent->post_excerpt; ?>]]></description>
<?php endif; ?>
Только это неполно - я не уверен, как получить все элементы, которые мне нужны. В частности, как я могу получить размер и цвет варианта, которые находятся в другой таблице?
4 ответа
Мне удалось заставить это работать, поэтому я оставляю детали на случай, если это кому-нибудь пригодится.
Согласно предложению Бразофило, я удалил вторую петлю. Затем я получил такие варианты, проверив meta_compare, чтобы убедиться, что они есть в наличии.
$args = array( 'post_type' => 'product_variation', 'post_count' =>'9999','meta_key' => '_stock', 'meta_value' => '0', 'meta_compare' => '>');
$variationloop = new WP_Query( $args );
while ( $variationloop->have_posts() ) : $variationloop->the_post();
// get the parent of each variation, so you can refer to things like product description that are set per-product not per-variation.
$parent = get_post($post->post_parent);
// is the parent product live?
if ($parent->post_status=="publish")
{
Затем я получил цвета, размеры, фотографии и т. Д. Вот так:
$colour= get_post_meta($id, 'attribute_pa_colour', true);
$size= get_post_meta($id, 'attribute_pa_size', true);
$price= get_post_meta($id, '_price', true);
$thephoto= get_post_meta($id, '_thumbnail_id', true); // get photo associated with this variation
$image_attributes =wp_get_attachment_image_src($thephoto, 'large');
Обратите внимание, что точное имя атрибутов будет зависеть от того, как вы назвали этот атрибут при настройке вариантов.
Тогда я просто повторил значения:
post_title;?> - Размер http://mywebsite.com/shop/ post_name;?> ID;?>
post_excerpt);?> GBP
Я надеюсь, что это полезно для кого-то!
Существует отличный бесплатный плагин для канала продуктов WooCommerce, который также поддерживает изменение продукта. https://wordpress.org/plugins/webappick-product-feed-for-woocommerce/
Этот премиальный плагин, разработанный ELEX, поддерживает даже вариации. Надеюсь, что это поможет тем, кто все еще ищет интеграцию Google Product Feed для WooCommerce, которая поддерживает варианты продукта. https://elextensions.com/plugin/woocommerce-google-product-feed-plugin/
Этот бесплатный плагин фида товаров woocommerce поддерживает фид товаров Facebook и фид товаров Google, включая варианты товаров. Отвечаю на этот вопрос, поскольку ОП искал плагин, который поддерживает варианты фида продуктов Google.