Варианты продуктов 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 &amp; Accessories &gt;  Clothing &gt;  Swimwear</g:product_type>
    <g:google_product_category>Clothing &amp; Accessories &gt;  Clothing &gt;  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.

Другие вопросы по тегам