Import produktů do WooCommerce – WP All Import

WooCommerce má od verze 3 vlastní nástroj na import produktů z CSV nebo XML. I přesto používám již několik let na import produktů do WooCommerce plugin WP All Import.

WP All Import je plugin pro import obsahu do WordPressu – umí importovat nejenom produkty, ale i stránky, články, custom post types atd. Několikrát jsem ho už využil např. pro import aut z feedu autobazaru.

WP All Import s rozšířením pro WooCommerce umožňuje načíst CSV nebo XML ze souboru nebo z URL, a pomocí drag&drop rozhraní jednoduše napárovat pole feedu a pole produktu. Můžete si tak zvolit, které pole ve feedu je Název, Popis, Cena, SKU, Kategorie, Sklad, Varianty atd., naimportovat produkty, a nastavit automatický spouštění importu z CRONu. Představu o tom, jak plugin s WooCommerce funguje, získáte nejsnáze shlédnutím videa.

V závislosti na tom, jak komplexzní je XML, je ale poměrně často zapotřebí využít pokročilejších možností, které nám WP All Import nabízí.

Ukázkový import

Jako příklad uvedu následující strukturu jednoho produktu:

<SHOPITEM>
    <ITEM_ID>18250</ITEM_ID>
    <PRODUCTNAME>Støíbrný pøívìsek s krystaly Swarovski bílý kulatý 34083.1</PRODUCTNAME>
    <PRODUCT>Støíbrný pøívìsek s krystaly Swarovski bílý kulatý 34083.1</PRODUCT>
    <DESCRIPTION>Pøívìšek lze mìnit a vzájemnì kombinovat pøesnì podle aktuální nálady. Pøívìšek je možné vždy novì kobinovat podle barevných trendù. Uvedená cena je bez øetízku.</DESCRIPTION>
    <URL>https://www.evolutiongroup.cz/stribrny-privesek-s-krystaly-swarovski-bily-kulaty-34083-1</URL>
    <IMGURL>https://www.evolutiongroup.cz/userfiles/fotoProduktuEAN/8590962341287.jpg</IMGURL>
    <IMG_ALTERNATIVE>https://www.evolutiongroup.cz/userfiles/krabicka/krabicka.jpg</IMG_ALTERNATIVE>
    <IMG_ALTERNATIVE>https://www.evolutiongroup.cz/userfiles/fotoProduktuEANCertifikatPopis/razitko.jpg</IMG_ALTERNATIVE>
    <IMG_ALTERNATIVE>https://www.evolutiongroup.cz/userfiles/fotoProduktuEANKoty/8590962341287.jpg</IMG_ALTERNATIVE>
    <DELIVERY_DATE>0</DELIVERY_DATE>
    <STOCK>33</STOCK>
    <GIFT>Dárková krabièka zdarma</GIFT>
    <CATEGORYTEXT></CATEGORYTEXT>
    <MANUFACTURER>Evolution Group s.r.o.</MANUFACTURER>
    <EAN>8590962341287</EAN>
    <PRICE_VAT>718.0000</PRICE_VAT>
    <VAT>21</VAT>
    <PRICE>593.3884</PRICE>
    <RELATED_ID>18266,18265,18264,18302</RELATED_ID>
    <PARAM>
      <PARAM_NAME>Barva</PARAM_NAME>
      <VAL>bílá</VAL>
    </PARAM>
    <PARAM>
      <PARAM_NAME>Materiál</PARAM_NAME>
      <VAL>støíbro 925/1000</VAL>
    </PARAM>
    <PARAM>
      <PARAM_NAME>Barva kovu</PARAM_NAME>
      <VAL>støíbrná</VAL>
    </PARAM>
    <PARAM>
      <PARAM_NAME>Tvar</PARAM_NAME>
      <VAL>kulaté</VAL>
    </PARAM>
    <PARAM>
      <PARAM_NAME>Délka mm</PARAM_NAME>
      <VAL>12</VAL>
    </PARAM>
    <ITEMGROUP_ID>27379</ITEMGROUP_ID>
  </SHOPITEM>

 

Většina parametrů jako název, popis, kategorie atd. se dá jednoduše nastavit pomocí drag&drop. V XML jsou ale dvě položky, které vyžadují pokročilejší práci s pluginem, a to alternativní obrázky produktu a parametry.

Alternativní obrázky

Ve feedu jsou alternativní obrázky pod tagem IMG_ALTERNATIVE, který se v XML několikrát opakuje. WP All Import podporuje smyčky foreach, taková struktura se dá tedy poměrně jednoduše naimportovat za pomoci zápisu:

{IMGURL[1]},[FOREACH({IMG_ALTERNATIVE})]{.},[ENDFOREACH]

Tento zápis říká, že hlavní obrázek je v XML pod tagem IMGURL, a každý další alternativní obrázek je v tagu IMG_ALTERNATIVE. V nastavení pluginu to vypadá takto:

Parametry produktu

Jednou z věcí, které mi v pluginu dlouhodobě schází, je to, že v základu neumí automaticky importovat atributy produktů. Atributy samozřejmě importovat umí, ale standardně je nutné každý atribut ručně napárovat, což je při různých typech produktů a desítkách možných atributů poměrně zásadní problém.

V pluginu je ale spousta actions, které je možné využít k úpravě toho, jak a co plugin importuje. V našem případě použijeme action pmxi_saved_post, která se volá po importu produktu, a jako parametry nám předává ID naimportovaného (nebo aktualizovaného) produktu, a kompletní XML objekt. Import jednotlivých parametrů se díky tomu dá zautomatizovat – pro každý atribut PARAMvytvoříme ve WooCommerce atribut, produktu přiřadíme atribut, který jsme právě vytvořili, a zařídíme, aby se data správně zobrazovala v administraci.

add_action('pmxi_saved_post', 'wp_programator_automatically_import_wpai_params', 10, 2);
/**
 * @param $post_id
 * @param $xml
 */
function wp_programator_automatically_import_wpai_params($post_id, $xml)
{
    $atts = [];

    // The $xml is a SimpleXML object
    // Scrub through the PARAM attributes and add these to product
  foreach ( $xml->PARAM as $param ) {
      // Get attribute name
    $name = $param->PARAM_NAME->__toString();
    // Get attribute value
    $value = $param->VAL->__toString();
    // The WC attribute taxonomy is prefixed with pa_, vuild the slug here
    $slug = 'pa_'.wc_sanitize_taxonomy_name($name);

    // Create the attribute
    wc_create_attribute(['name' => $name]);

    // Add the product to the taxonomy we just created
    wp_set_object_terms( $post_id, wc_sanitize_taxonomy_name($value), $slug, true );

    // Add to the attributes data
        // This is needed for attributes to display in the WP admin
    $atts[$slug] = [
        'name'=> $slug,
        'value'=> $value,
        'is_visible' => '1',
        'is_variation' => '0',
        'is_taxonomy' => '1'
        ];
    }

    // Update the _product_attributes meta - this is where the attribute data are stored for products
  $product = wc_get_product($post_id);
  $product->update_meta_data('_product_attributes', $atts);
  $product->save();
}

Díky pluginu WP All Import je možné naimportovat téměr libovolnou strukturu CSV nebo XML.

Pokud budete potřebovat pomoci s importem produktů do WooCommerce, nebo obecně importem jakéhokoli obsahu do WordPressu, neváhejte se na mě obrátit.

Přidat komentář