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 PARAM
vytvoří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.
Václav Greif se programování pro Wordpress věnuje více než 16 let. Za tu dobu nasbíral mnoho zkušeností s tvorbou pluginů pro Wordpress, úpravou šablon a programováním komplexních funkcionalit. Věnuje se programování pro Wordpress a školení programátorů.