{"id":1194,"date":"2023-02-01T13:49:19","date_gmt":"2023-02-01T12:49:19","guid":{"rendered":"https:\/\/birdcom.es\/blog\/?p=1194"},"modified":"2023-02-01T14:25:08","modified_gmt":"2023-02-01T13:25:08","slug":"importar-productos-masivamente-en-woocommerce","status":"publish","type":"post","link":"https:\/\/birdcom.es\/blog\/importar-productos-masivamente-en-woocommerce\/","title":{"rendered":"Importar productos masivamente en Woocommerce"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">A la hora de montar una tienda online, una de las tareas m\u00e1s importantes a tener en cuenta antes de empezar a rodar es tener <strong>control total del stock de nuestro ecommerce<\/strong> para poder gestionarlo c\u00f3modamente desde nuestra web.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Woocommerce es la herramienta que WordPress nos ofrece para montar una tienda online f\u00e1cil de gestionar y c\u00f3moda para nuestros clientes, pero para poder utilizarla debemos importar los datos de nuestro inventario desde un excel u otros sistemas de almacenamiento de datos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A veces, por las caracter\u00edsticas de nuestro negocio, subir productos es una tarea relativamente sencilla porque disponemos de un stock reducido y se puede importar c\u00f3modamente a nuestra tienda online gracias al importador predefinido de Woocommerce o, incluso, podemos subir los productos de uno en uno. Sin embargo, \u00bfqu\u00e9 sucede cuando tenemos <strong>un stock de cientos de productos<\/strong> o los datos de nuestro inventario se encuentran <strong>almacenados en un ERP externo<\/strong> o en una base de datos externa a nuestro WordPress?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lo que en un principio se nos antojaba una tarea sencilla, se nos puede poner un poco cuesta arriba. Afortunadamente, WordPress cuenta con una API que nos va a facilitar la gesti\u00f3n de nuestra tienda a unos niveles asombrosos, ofreci\u00e9ndonos adem\u00e1s la oportunidad de compartir datos con programas externos de gesti\u00f3n de inventario para poder importar productos masivamente. Dicho esto, vamos a ense\u00f1aros <strong>la magia de la API de Woocommerce<\/strong>.<\/p>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_83 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Tabla de Contenidos<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-6a0f66ed19a3c\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #00B9FB;color:#00B9FB\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #00B9FB;color:#00B9FB\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-6a0f66ed19a3c\"  aria-label=\"Alternar\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/birdcom.es\/blog\/importar-productos-masivamente-en-woocommerce\/#Librerias_para_API_de_Woocommerce_e_instalacion\" >Librer\u00edas para API de Woocommerce e instalaci\u00f3n<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/birdcom.es\/blog\/importar-productos-masivamente-en-woocommerce\/#Estructura_de_los_datos_de_la_API_de_Woocommerce\" >Estructura de los datos de la API de Woocommerce<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/birdcom.es\/blog\/importar-productos-masivamente-en-woocommerce\/#Metodos_para_leer_los_datos_de_nuestro_inventario\" >M\u00e9todos para leer los datos de nuestro inventario<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/birdcom.es\/blog\/importar-productos-masivamente-en-woocommerce\/#A_traves_de_una_API_REST\" >A trav\u00e9s de una API REST<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/birdcom.es\/blog\/importar-productos-masivamente-en-woocommerce\/#A_traves_de_una_base_de_datos_externa\" >A trav\u00e9s de una base de datos externa:<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/birdcom.es\/blog\/importar-productos-masivamente-en-woocommerce\/#A_traves_de_un_archivo_externo\" >A trav\u00e9s de un archivo externo<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/birdcom.es\/blog\/importar-productos-masivamente-en-woocommerce\/#Importacion_masiva_de_productos\" >Importaci\u00f3n masiva de productos<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Librerias_para_API_de_Woocommerce_e_instalacion\"><\/span><strong>Librer\u00edas para API de Woocommerce e instalaci\u00f3n<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Se puede trabajar con la API de Woocommerce gracias a las librer\u00edas que nos ofrecen sus desarrolladores o equipos de terceros. Hay librer\u00edas para los lenguajes de programaci\u00f3n m\u00e1s utilizados, como JavaScript, Python, Java, etc. En nuestro caso, <strong>vamos a trabajar con la librer\u00eda de PHP, que se llama automattic\/woocommerce<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nosotros ya hemos trabajado con esta librer\u00eda y la API de Woocommerce, <strong>desarrollando nuestra propia APP<\/strong> para un cliente que necesitaba gestionar el inventario de Woocommerce con los datos que manejaba su ERP. Aqu\u00ed, mostraremos un ejemplo m\u00e1s sencillo trabajando sobre un script de php que ejecutaremos desde la terminal.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para empezar, necesitaremos instalar la librer\u00eda para nuestro script a trav\u00e9s de Composer, el sistema de gesti\u00f3n de paquetes de PHP. Si no ten\u00e9is instalado Composer, pod\u00e9is hacerlo a trav\u00e9s de este <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener\">enlace<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pues bien, para instalar la librer\u00eda, solo ten\u00e9is que abrir la <strong>terminal de Windows o la de Git<\/strong> en el directorio de vuestro script y ejecutar la siguiente instrucci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em>\u201ccomposer require automattic\/woocommerce\u201d<\/em><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para facilitar la tarea, pod\u00e9is abrir la terminal desde el editor de c\u00f3digo donde edit\u00e9is el script. Nosotros <strong>utilizamos Visual Studio Code<\/strong> y para abrir la terminal solo hay que pulsar Ctrl+J y se os abrir\u00e1 la terminal que teng\u00e1is configurada, como en la imagen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1210\" height=\"500\" src=\"https:\/\/birdcom.es\/blog\/wp-content\/uploads\/2023\/02\/visual-studio-code.jpg\" alt=\"visual studio code como programa para c\u00f3digo en la importaci\u00f3n masiva de productos de woocommerce\" class=\"wp-image-1203\" srcset=\"https:\/\/birdcom.es\/blog\/wp-content\/uploads\/2023\/02\/visual-studio-code.jpg 1210w, https:\/\/birdcom.es\/blog\/wp-content\/uploads\/2023\/02\/visual-studio-code-300x124.jpg 300w, https:\/\/birdcom.es\/blog\/wp-content\/uploads\/2023\/02\/visual-studio-code-1024x423.jpg 1024w, https:\/\/birdcom.es\/blog\/wp-content\/uploads\/2023\/02\/visual-studio-code-768x317.jpg 768w\" sizes=\"auto, (max-width: 1210px) 100vw, 1210px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Una vez ejecutada la instrucci\u00f3n, la librer\u00eda se instalar\u00e1 dentro del directorio vendor y podr\u00e9is emplearla en vuestro script, escribiendo las siguientes dos l\u00edneas de c\u00f3digo:<\/p>\n\n\n<div class=\"gb-container gb-container-4d63b2da code-example\"><div class=\"gb-inside-container\">\n\n<p class=\"wp-block-paragraph\">require __DIR__ . &#8216;\/vendor\/autoload.php&#8217;;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">use Automattic\\WooCommerce\\Client;<\/p>\n\n<\/div><\/div>\n\n\n<p class=\"wp-block-paragraph\">Con esto, ya podr\u00e9is crear una conexi\u00f3n con vuestra tienda Woocommerce, instanciando una clase Client de la siguiente manera:<\/p>\n\n\n<div class=\"gb-container gb-container-180c3f71 code-example\"><div class=\"gb-inside-container\">\n\n<p class=\"wp-block-paragraph\">$woocommerce = new Client(<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; URLTIENDA, <em>\/\/Direcci\u00f3n web de la tienda<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; KEYCLIENT, <em>\/\/Clave del cliente<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; SECRETKEY, <em>\/\/ Clave secreta del cliente<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; [<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;version&#8217; =&gt; &#8216;wc\/v3&#8217;,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;timeout&#8217; =&gt; 300,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; ]<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">);<\/p>\n\n<\/div><\/div>\n\n\n<p class=\"wp-block-paragraph\">Como ver\u00e9is, para conectar nuestra tienda de Woocommerce con nuestro script necesitaremos tres cosas:<\/p>\n\n\n\n<ol class=\"wp-block-list\" type=\"1\">\n<li>La direcci\u00f3n de la tienda. Obviamente, el script debe saber hacia d\u00f3nde debe mandar la informaci\u00f3n.<\/li>\n\n\n\n<li>La clave del cliente<\/li>\n\n\n\n<li>La clave secreta del cliente<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Estas claves son las medidas de autentificaci\u00f3n que nos ofrece la API para evitar que cualquiera pueda leer los datos de nuestra tienda o meter datos maliciosos a trav\u00e9s de la API. Para obtener esas claves, solamente tendremos que <strong>ir a nuestro panel de ajustes de Woocommerce<\/strong>, ir a la pesta\u00f1a de Avanzado y seleccionar los ajustes de API REST. Pasamos captura para que ve\u00e1is donde se encuentra.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1210\" height=\"300\" src=\"https:\/\/birdcom.es\/blog\/wp-content\/uploads\/2023\/02\/backend-woocommerce-api-rest.jpg\" alt=\"API Rest de Woocommerce en Ajustes\" class=\"wp-image-1204\" srcset=\"https:\/\/birdcom.es\/blog\/wp-content\/uploads\/2023\/02\/backend-woocommerce-api-rest.jpg 1210w, https:\/\/birdcom.es\/blog\/wp-content\/uploads\/2023\/02\/backend-woocommerce-api-rest-300x74.jpg 300w, https:\/\/birdcom.es\/blog\/wp-content\/uploads\/2023\/02\/backend-woocommerce-api-rest-1024x254.jpg 1024w, https:\/\/birdcom.es\/blog\/wp-content\/uploads\/2023\/02\/backend-woocommerce-api-rest-768x190.jpg 768w\" sizes=\"auto, (max-width: 1210px) 100vw, 1210px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Como veis, nosotros ya tenemos creada una clave con los permisos de escritura y lectura para poder consultar los datos de nuestra tienda online y tambi\u00e9n subir nueva informaci\u00f3n desde nuestro script. Para crear una clave nueva, solo ten\u00e9is que darle a a\u00f1adir clave, poner una descripci\u00f3n para identificar el uso de esa clave por si luego queremos cambiarle permisos o borrarla, asignarle un usuario y seleccionar si queremos que sea una clave de lectura, escritura o que nos ofrezca ambas opciones.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tras realizar esos ajustes y pulsar el bot\u00f3n para generar la clave, guardad muy bien las dos claves, pues <strong>WooCommerce no os la volver\u00e1 a ense\u00f1ar por motivos de seguridad<\/strong>. Despu\u00e9s, ponedlas en los par\u00e1metros correspondientes de la clase Client que hemos usado antes, poniendo la url de la web con la que quer\u00e9is conectaros. Os tendr\u00eda que quedar algo as\u00ed:<\/p>\n\n\n<div class=\"gb-container gb-container-f4c195ef code-example\"><div class=\"gb-inside-container\">\n\n<p class=\"wp-block-paragraph\">$woocommerce = new Client(<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; \u00abhttps:\/\/mitiendaonline.es\u00bb, <em>\/\/Direcci\u00f3n de vuestra tienda online<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; \u00abdfeqwd3qdasfsadascadfa\u00bb, <em>\/\/Vuestra Clave del cliente<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; \u00abfsfes4v24rfewzvgewfascsd\u00bb, <em>\/\/ Vuestra Clave secreta del cliente<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; [<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;version&#8217; =&gt; &#8216;wc\/v3&#8217;,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;timeout&#8217; =&gt; 300,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; ]<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">);<\/p>\n\n<\/div><\/div>\n\n\n<p class=\"wp-block-paragraph\">Si os hab\u00e9is fijado, en el ejemplo anterior, que es nuestro ejemplo real, hemos usado constantes para la url de la tienda y las dos claves de la API. Como consejo, sobre todo si es posible que el c\u00f3digo pueda ser visto por m\u00e1s personas, <strong>nunca pong\u00e1is claves secretas en texto limpio<\/strong>. Lo m\u00e1s seguro es usar variables de entorno guardadas en un archivo .env, aunque tambi\u00e9n pod\u00e9is usar constantes si est\u00e1is trabajando en local y quer\u00e9is mostrar una captura del c\u00f3digo, tal y como estamos haciendo nosotros ahora.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por otro lado, ver\u00e9is que <strong>hay un cuarto par\u00e1metro<\/strong> en forma de array asociativo. Ese par\u00e1metro, llamado options, sirve para dar informaci\u00f3n extra sobre el tipo de conexi\u00f3n que queremos. En nuestro caso, estamos diciendo a la API que vamos a usar la versi\u00f3n 3 de la misma y el tiempo de espera en la respuesta antes de dar error de conexi\u00f3n. Pod\u00e9is consultar todos los valores que se pueden dar al par\u00e1metro options en la <a href=\"https:\/\/packagist.org\/packages\/automattic\/woocommerce\" target=\"_blank\" rel=\"noopener\">documentaci\u00f3n de la API.<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Estructura_de_los_datos_de_la_API_de_Woocommerce\"><\/span>Estructura de los datos de la API de Woocommerce<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Bien, con esto ya estamos listos para empezar a mandar y recibir informaci\u00f3n a trav\u00e9s de la API de Woocommerce, aunque antes debemos entender c\u00f3mo funciona. Como cualquier otra API, podemos enviar y recibir informaci\u00f3n a trav\u00e9s de distintos endpoints con los m\u00e9todos GET, POST, DELETE, PUT, etc.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Podemos recibir informaci\u00f3n tanto de los productos que tenemos subidos en la tienda, como de los clientes, pedidos y hasta de los cupones de descuento que tenemos activos en la tienda. <strong>Cualquier dato de nuestro ecommerce<\/strong>, podemos consultarlo a trav\u00e9s de la API.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Como en este caso vamos a manejar informaci\u00f3n de los productos para realizar la importaci\u00f3n, os voy a mostrar el ejemplo que viene en la documentaci\u00f3n de la API para subir un producto simple:<\/p>\n\n\n<div class=\"gb-container gb-container-273b42ab code-example\"><div class=\"gb-inside-container\">\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; $data = [<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;name&#8217; =&gt; &#8216;Premium Quality&#8217;,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;type&#8217; =&gt; &#8216;simple&#8217;,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;regular_price&#8217; =&gt; &#8216;21.99&#8217;,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;description&#8217; =&gt; &#8216;Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.&#8217;,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;short_description&#8217; =&gt; &#8216;Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.&#8217;,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;categories&#8217; =&gt; [<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;id&#8217; =&gt; 9<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ],<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;id&#8217; =&gt; 14<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ],<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;images&#8217; =&gt; [<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;src&#8217; =&gt; &#8216;http:\/\/demo.woothemes.com\/woocommerce\/wp-content\/uploads\/sites\/56\/2013\/06\/T_2_front.jpg&#8217;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ],<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;src&#8217; =&gt; &#8216;http:\/\/demo.woothemes.com\/woocommerce\/wp-content\/uploads\/sites\/56\/2013\/06\/T_2_back.jpg&#8217;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; ];<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; print_r($woocommerce-&gt;post(&#8216;products&#8217;, $data));<\/p>\n\n<\/div><\/div>\n\n\n<p class=\"wp-block-paragraph\">Como v\u00e9is, los primeros datos son f\u00e1ciles de entender. Debemos indicarle a la API el nombre de nuestro producto, el tipo (si es simple o variable), el precio, las descripciones, etc\u2026 Los campos con los que debemos tener cuidado a la hora de exportar productos simples son <strong>las categor\u00edas y las im\u00e1genes<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para importar categor\u00edas, estas deben estar creadas antes en nuestro panel de administraci\u00f3n de Woocommerce y deben identificarse con el id. Para saber el id de cada categor\u00eda, lo m\u00e1s sencillo es<strong> ir al men\u00fa Categor\u00edas del panel de Productos de Woocommerce<\/strong>, seleccionar la categor\u00eda de la que queremos saber el id y fijarnos en los par\u00e1metros de la url.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Como ver\u00e9is gracias al resaltado, el id de la categor\u00eda aparece como par\u00e1metro, as\u00ed que solo ser\u00e1 cuesti\u00f3n de apuntar cu\u00e1l es el id de cada categor\u00eda de nuestro inventario.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En cuanto a la imagen, se pueden subir a la API pas\u00e1ndole una ruta y esto crear\u00e1 una nueva imagen en nuestra biblioteca de medios de WordPress, as\u00ed que si realiz\u00e1is varias importaciones <strong>tened cuidado para no acabar con varias im\u00e1genes repetidas dentro de WordPress<\/strong>, aunque tambi\u00e9n pod\u00e9is asociar la imagen de un producto a trav\u00e9s del ID de la base de datos, aunque eso os llevar\u00e1 un poquito m\u00e1s de trabajo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ahora bien, cuando tengamos todos los datos del producto, solo habr\u00e1 que guardarlos en una variable y mandarlos a la API de Woocommerce con la siguiente l\u00ednea de c\u00f3digo:<\/p>\n\n\n<div class=\"gb-container gb-container-6ecf352b code-example\"><div class=\"gb-inside-container\">\n\n<p class=\"wp-block-paragraph\">print_r($woocommerce-&gt;post(&#8216;products&#8217;, $data));<\/p>\n\n<\/div><\/div>\n\n\n<p class=\"wp-block-paragraph\">Seguro que estar\u00e9is pensando: \u201cVale, tengo 300 productos. No me sale a cuenta guardar los datos de los 300 productos en una variable, ni seguir el ejemplo de la documentaci\u00f3n de la API 300 veces. Adem\u00e1s, tengo la informaci\u00f3n de mis productos en una base de datos o en un ERP, \u00bfdebo ir copi\u00e1ndolos uno a uno en mi c\u00f3digo?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aqu\u00ed es donde entra la magia de PHP y de las APIs. Hay varias formas de leer los datos de vuestros productos <strong>sin tener que ir copiando los datos<\/strong> de todos ellos uno a uno.<\/p>\n\n\n\n<h2 class=\"gb-headline gb-headline-54f1c0ef gb-headline-text\"><span class=\"ez-toc-section\" id=\"Metodos_para_leer_los_datos_de_nuestro_inventario\"><\/span>M\u00e9todos para leer los datos de nuestro inventario<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"A_traves_de_una_API_REST\"><\/span>A trav\u00e9s de una API REST<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Si vuestro ERP o programa de gesti\u00f3n de inventarios <strong>permite leer datos a trav\u00e9s de endpoints<\/strong>, como por ejemplo: https:\/\/mierpdeinventario.com\/productos, y pod\u00e9is leer los datos en formato json, est\u00e1is de enhorabuena. Este es uno de los m\u00e9todos m\u00e1s c\u00f3modos para leer los datos de productos y solo tendr\u00edamos que leer los datos a trav\u00e9s de una una llamada curl como esta:<\/p>\n\n\n<div class=\"gb-container gb-container-3da4e845 code-example\"><div class=\"gb-inside-container\">\n\n<p class=\"wp-block-paragraph\">print_r($woocommerce-&gt;post(&#8216;products&#8217;, $data));<\/p>\n\n<\/div><\/div>\n\n\n<p class=\"wp-block-paragraph\">Cada ERP o API tendr\u00e1 sus m\u00e9todos de autentificaci\u00f3n para impedir que cualquiera entre a consultar informaci\u00f3n. Para agilizar, <strong>yo he usado un m\u00e9todo de autentificaci\u00f3n a trav\u00e9s de cookies<\/strong>, aunque lo id\u00f3neo es hacerlo a trav\u00e9s de un token de autentificaci\u00f3n. Lo importante es que os fij\u00e9is en que deb\u00e9is obtener una respuesta y guardarla en una variable, que emplearemos despu\u00e9s para importar los productos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"A_traves_de_una_base_de_datos_externa\"><\/span>A trav\u00e9s de una base de datos externa:<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A veces, no contamos con la oportunidad de consumir una API porque nuestro ERP no lo permite o por otros motivos. Sin embargo, s\u00ed tenemos los datos de nuestro inventario guardado en una base de datos, con lo que <strong>solo tendr\u00edamos que tener los datos de acceso a la base de datos<\/strong> (Servidor, Usuario, Nombre de la base de datos y Contrase\u00f1a) para poder acceder a la informaci\u00f3n. Este es un ejemplo de lectura de base de datos a trav\u00e9s de una conexi\u00f3n mysqli:<\/p>\n\n\n<div class=\"gb-container gb-container-ffbb52dd code-example\"><div class=\"gb-inside-container\">\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; $connection = mysqli_connect(DBHOST, DBUSER, DBPASSWORD, DBNAME);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; mysqli_query($connection, \u00abSET NAMES &#8216;utf8&#8242;\u00bb);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; $sql = \u00abSELECT `name`, `prize`, `description`, `categories`, `images` FROM `productos`\u00bb;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; $query = mysqli_query($connection, $sql);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; $data = [];<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; while($producto = mysqli_fetch_assoc($query)) {<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; array_push($data, $producto);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; return $data;<\/p>\n\n<\/div><\/div>\n\n\n<p class=\"wp-block-paragraph\">Hay m\u00e1s m\u00e9todos para conectarse a una base de datos. Yo estoy usando las funciones que te da PHP para hacer una conexi\u00f3n a trav\u00e9s de mysqli. Lo importante es que os d\u00e9is cuenta de que <strong>por este m\u00e9todo tambi\u00e9n necesitamos una variable data<\/strong> que guarde toda la informaci\u00f3n de nuestro inventario. En este c\u00f3digo, he realizado la conexi\u00f3n a trav\u00e9s de nuestras credenciales, luego he configurado que podamos leer los datos a trav\u00e9s de caracteres utf-8, he realizado la consulta y para obtener todos los datos de esa consulta, he realizado un buque while <strong>para guardar cada resultado en nuestra variable data<\/strong>, que emplearemos m\u00e1s adelante, aunque antes de eso, vamos a ver la \u00faltima forma que tenemos de leer los datos de nuestro inventario.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"A_traves_de_un_archivo_externo\"><\/span>A trav\u00e9s de un archivo externo<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Esta no es la soluci\u00f3n m\u00e1s id\u00f3nea porque dependeremos siempre de tener actualizado el archivo de inventario y tenerlo a buen recaudo, mientras que una API y una base de datos actualizan los datos de forma m\u00e1s autom\u00e1tica <strong>sin que nosotros tengamos que hacer nada<\/strong>, a no ser que seamos los encargados de gestionar esa informaci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si leemos los datos a trav\u00e9s de un archivo externo, este siempre tiene que estar en el mismo directorio de nuestro script o en una ruta accesible y los datos deben <strong>poder leerse en formato json<\/strong>. Si tenemos un excel, tampoco pasa nada porque hay much\u00edsimas herramientas virtuales de conversi\u00f3n para pasar un archivo de excel a uno json en un segundo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando tengamos a mano nuestro archivo, el c\u00f3digo para tener la variable data con toda la informaci\u00f3n de nuestro inventario es el siguiente:<\/p>\n\n\n<div class=\"gb-container gb-container-51110ea2 code-example\"><div class=\"gb-inside-container\">\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; $file = file_get_contents(&#8216;inventario.json&#8217;);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; $data = json_decode($file);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; return $data;<\/p>\n\n<\/div><\/div>\n\n\n<p class=\"wp-block-paragraph\">Como veis, el c\u00f3digo es muy sencillo. Hay que usar funci\u00f3n <strong>para obtener el contenido del archivo<\/strong>. Hay que pasarle como par\u00e1metro la ruta del archivo, as\u00ed que si el archivo est\u00e1 en el mismo directorio que nuestro script, con ponerle el nombre del archivo ser\u00e1 suficiente. Luego habr\u00e1 que decodificar el json para convertirlo en un array que pueda leer nuestro script.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En estos tres ejemplos que hemos puesto, el c\u00f3digo ir\u00eda dentro de una funci\u00f3n que nos devolver\u00eda la variable data que necesitamos para importar nuestros productos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ya estamos cerca del paso final. Con pocas l\u00edneas de c\u00f3digo <strong>hemos obtenido informaci\u00f3n de cientos de productos<\/strong>. Ahora solo queda subirlo a nuestra web.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Importacion_masiva_de_productos\"><\/span>Importaci\u00f3n masiva de productos<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Si tenemos la variable data con toda la informaci\u00f3n de nuestro inventario, ya hemos pasado la peor parte. La dificultad del paso anterior proviene de la organizaci\u00f3n de nuestros datos y, si la estructura de la informaci\u00f3n es bastante compleja, es posible que tengamos que hacer nuevas funciones para, por ejemplo, generarle el id correspondiente a la categor\u00eda de nuestros productos. Sin embargo, una vez obtenida la variable data, todo es coser y cantar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A trav\u00e9s de un bucle foreach, que leer\u00e1 cada elemento de nuestro conjunto de datos de forma individual, podemos organizar los datos para que los pueda leer la API de Woocoommerce. Aqu\u00ed est\u00e1 el ejemplo:<\/p>\n\n\n<div class=\"gb-container gb-container-84cab4b2 code-example\"><div class=\"gb-inside-container\">\n\n<p class=\"wp-block-paragraph\">foreach($data as $producto) {<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $datos_api = [<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;name&#8217; =&gt; $producto-&gt;name,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;type&#8217; =&gt; $producto-&gt;type,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;sku&#8217; =&gt; $producto-&gt;sku,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;regular_price&#8217; =&gt; $precio,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;description&#8217; =&gt; $producto-&gt;description,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;categories&#8217; =&gt; [<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;id&#8217; =&gt; $producto-&gt;id_categoria<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ],<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ],<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;images&#8217; =&gt; [<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8216;src&#8217; =&gt; $producto-&gt;src_imagen<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ],<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ];<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print_r($woocommerce-&gt;post(&#8216;products&#8217;, $datos_api));<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (Exception $error) {<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo \u00abError importando productos: \u00bb . $error-&gt;getMessage();<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; }<\/p>\n\n<\/div><\/div>\n\n\n<p class=\"wp-block-paragraph\">Como veis, en cada bucle solo debemos coger la informaci\u00f3n dentro de la variable data que nos interesa, para pas\u00e1rsela a su lugar correspondiente dentro de la informaci\u00f3n que va a leer la API.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un dato a tener en cuenta en este ejemplo, es que hemos usado una instrucci\u00f3n try &#8211; catch para evitar que la importaci\u00f3n se detenga si hay alg\u00fan error en alg\u00fan producto y pase a importar el producto siguiente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una vez ejecutado este c\u00f3digo en la terminal de Visual Studio Code con la instrucci\u00f3n: <strong>php nombre_script.php, <\/strong>solo nos queda sentarnos a esperar a que la importaci\u00f3n finalice.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Visto esto, cada inventario es un mundo, por lo que os tocar\u00e1 pensar c\u00f3mo adaptar la importaci\u00f3n para que vuestro script pase la informaci\u00f3n a la API de Woocommerce.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En la documentaci\u00f3n de la API, hay ejemplos sobre c\u00f3mo subir cada tipo de producto. Por ejemplo, para subir un producto variable a los campos normales de producto, deb\u00e9is <strong>a\u00f1adirle un campo para indicarle cu\u00e1ntos atributos tiene<\/strong> y si se usan para variaciones y si son visibles, como en este ejemplo:<\/p>\n\n\n<div class=\"gb-container gb-container-86de2f61 code-example\"><div class=\"gb-inside-container\">\n\n<p class=\"wp-block-paragraph\">&#8216;attributes&#8217;&nbsp; =&gt; [<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;id&#8217;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; $id_atributo,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;variation&#8217; =&gt; true,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;visible&#8217;&nbsp;&nbsp; =&gt; true,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;options&#8217;&nbsp;&nbsp; =&gt; [ &#8216;opcion 1&#8217;, &#8216;opcion 2&#8217;, &#8216;opcion 3&#8217; ],<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ],<\/p>\n\n<\/div><\/div>\n\n\n<p class=\"wp-block-paragraph\">Recordad que, al igual que en las categor\u00edas, los atributos deben estar creados antes y pod\u00e9is consultar su id en el par\u00e1metro de su url.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Como consejo de despedida, si vais a realizar una importaci\u00f3n muy compleja y vais a tener que usar muchas funciones para tener vuestra variable data lo m\u00e1s limpia posible, no hag\u00e1is un script kilom\u00e9trico. Dividid los scripts en cachos m\u00e1s peque\u00f1os donde est\u00e9 clara la funcionalidad de cada parte del c\u00f3digo para que as\u00ed sea m\u00e1s f\u00e1cil trabajar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El objetivo de la API de Woocommerce es dar una herramienta de importaci\u00f3n de productos para sistemas de gesti\u00f3n de inventario muy complejos o que no puedan pasar los datos a trav\u00e9s de un <strong>archivo de Excel<\/strong> al importador est\u00e1ndar de Woocommerce. Por eso, es muy f\u00e1cil que si la estructura de vuestros datos no se asemeja a la API de Woocommerce, acab\u00e9is teniendo una aplicaci\u00f3n con una estructura que tendr\u00e9is que cuidar con el mayor mimo del mundo para que no os acabe comiendo a vosotros.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A la hora de montar una tienda online, una de las tareas m\u00e1s importantes a tener en cuenta antes de empezar a rodar es tener control total del stock de nuestro ecommerce para poder gestionarlo c\u00f3modamente desde nuestra web. Woocommerce es la herramienta que WordPress nos ofrece para montar una tienda online f\u00e1cil de gestionar &#8230; <\/p>\n<p class=\"read-more-container\"><a title=\"Importar productos masivamente en Woocommerce\" class=\"read-more button\" href=\"https:\/\/birdcom.es\/blog\/importar-productos-masivamente-en-woocommerce\/#more-1194\" aria-label=\"M\u00e1s en Importar productos masivamente en Woocommerce\">Leer m\u00e1s<\/a><\/p>\n","protected":false},"author":16,"featured_media":1199,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-1194","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-consejos-diseno-web","generate-columns","tablet-grid-50","mobile-grid-100","grid-parent","grid-50","no-featured-image-padding"],"_links":{"self":[{"href":"https:\/\/birdcom.es\/blog\/wp-json\/wp\/v2\/posts\/1194","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/birdcom.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/birdcom.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/birdcom.es\/blog\/wp-json\/wp\/v2\/users\/16"}],"replies":[{"embeddable":true,"href":"https:\/\/birdcom.es\/blog\/wp-json\/wp\/v2\/comments?post=1194"}],"version-history":[{"count":0,"href":"https:\/\/birdcom.es\/blog\/wp-json\/wp\/v2\/posts\/1194\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/birdcom.es\/blog\/wp-json\/wp\/v2\/media\/1199"}],"wp:attachment":[{"href":"https:\/\/birdcom.es\/blog\/wp-json\/wp\/v2\/media?parent=1194"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/birdcom.es\/blog\/wp-json\/wp\/v2\/categories?post=1194"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/birdcom.es\/blog\/wp-json\/wp\/v2\/tags?post=1194"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}