• Saltar a la navegación principal
  • Saltar al contenido principal
  • Saltar a la barra lateral principal

DecodeCMS

Tu WordPress a otro Nivel ...

  • Acerca de
  • Contacto
  • Inicio
  • Tutoriales
    • Themes
    • Plugins
    • Core
    • Recursos
  • Cursos
  • Acceder
    • Mis cursos
    • Mi Cuenta
    • Acceder
Inicio / Tutoriales / Plugins / Sincronizar WooCommerce y Excel

Sincronizar WooCommerce y Excel

[ 22 diciembre 2022 ] [ Autor: Jhon Marreros Guzmán ][ Plugins - Avanzado] [ ]

librería woocommerce

Suscríbete a DecodeCMS:  

En este artículo veremos cómo sincronizar los productos de WooCommerce desde un archivo Excel, el cual contiene datos de stock y precio por cada SKU de producto. Veremos cómo hacerlo usando código.

 

Generalidades

  • Por simplicidad, tendremos el proyecto como parte de los archivos del tema hijo
  • Ejecutaremos el proceso a través de una URL, usando la funcionalidad de plantillas de página de WordPress
  • Para la lectura del archivo Excel usaremos usa librería llamada SimpleXLSX, la cual nos facilitará obtener los datos en formato Array para manipularlos con PHP.

 

Estructura del archivo Excel

En el archivo Excel simplemente tendremos las columnas del SKU, precio y stock del producto, tal como se muestra en la siguiente imagen:

Estructura archivo a sincronizar

 

Actualización de stock y precios desde Excel

Primero necesitamos organizar el proyecto, crearemos una carpeta contenedora de todo llamada sync-woo, y allí colocaremos el archivo Excel, la librería y el archivo principal, de acuerdo a la siguiente estructura:

Archivos y carpetas, estructura

Puedes incluso crear un plugin con una estructura de carpetas similar.
Descarga los archivos de este proyecto desde este enlace.

El código del archivo principal será el siguiente:

<?php

include_once( "includes/SimpleXLSX.php" );

use Shuchkin\SimpleXLSX;

$file = get_stylesheet_directory() . "/sync-woo/data/stock-precios.xlsx";

if ( $xlsx = SimpleXLSX::parse( $file ) ) {
	foreach($xlsx->rows() as $index => $row){
		if ( $index > 0 ){
			$id = wc_get_product_id_by_sku($row[0]);
			if ( $id ){
				$price = $row[1];
				$stock = $row[2];

				$product = wc_get_product( $id );
				$product->set_regular_price($price);
				$product->set_stock_quantity($stock);
				$product->save();
			}
		}
	}
} else {
	error_log( print_r( SimpleXLSX::parseError(), true ) );
}

En el código anterior:

  • Incluimos la librería SimpleXLSX y también su namespace para usar directamente la clase
  • Ubicamos la ruta del archivo .xls en la variable $file
  • Abrimos el archivo y lo parseamos con la función parse se la clase SimpleXLSX
  • Recorremos las filas, excluyendo la primera de ellas que es la cabecera del archivo
  • Obtenemos el ID del producto en base al sku con la función wc_get_product_id_by_sku()
  • Si el producto existe entonces obtenemos el objeto producto en base al ID con la función wc_get_product()
  • Tiendo el objeto producto podemos actualizar el precio y el stock y luego grabar los datos

 

Llamar al código desde una URL

Para ejecutar este código podemos construir un plugin que muestre un botón para ejecutarlo manualmente, o también como parte de un plugin podemos hacer un Hook con la funcionalidad de cron de WordPress para que se ejecute periódicamente.

Sin embargo en este caso para mantener las cosas simples y puesto que necesitamos ejecutarlo en el entorno de WordPress, crearemos una plantilla de página de WordPress que hará referencia al archivo principal.

El archivo de página tendrá el siguiente código PHP:

<?php
/* Template Name: Sincronización excel-woo */

include_once ("sync-woo/process-sync.php");

 
Si usamos esta plantilla de página en una página llamada por ejemplo sincronización, entonces la ejecución del script se hará a través de una URL como: https://tudominio.com/sincronizacion.

Puedes usar esa URL para ejecutar el código manualmente o para crear una tarea cron desde tu cuenta de Hosting.

 

Conclusión

Como has podido comprobar, puedes actualizar el stock y precios de tus productos directamente desde un archivo .xls, en este artículo hemos visto como realizarlo directamente a través de código.

 

¿Me ayudas a llegar a más gente?

Twittear Compartir LinkedIn WhatsApp

Artículos Relacionados

  • Sincronizar WooCommerce y Google SheetsSincronizar WooCommerce y Google Sheets
  • Etiqueta de Agotado en lista de productos WooCommerce sin pluginsEtiqueta de Agotado en lista de productos WooCommerce sin plugins
  • Agregar el campo de cantidad en la lista de productos de WooCommerceAgregar el campo de cantidad en la lista de productos de WooCommerce
  • Actualizar el stock de productos usando la API de WooCommerceActualizar el stock de productos usando la API de WooCommerce
Valora este artículo : 1 barra2 barras3 barras4 barras5 barras (5 votos, promedio: 5,00 de 5)
Cargando...

Interacciones con los lectores

Comentarios

  1. Antonio

    24 diciembre, 2022

    Hola, estupendo tutorial que resuelve muchos problemas de control de stock.
    Se podría enlazar a una hoja de Google sheet?

    Gracias.

    • Jhon Marreros Guzmán

      24 diciembre, 2022

      Hola Antonio,
      En ese caso se tendría que usar la API de Google, voy a evaluar hacer un artículo sobre eso. Saludos.

  2. Antonio

    26 diciembre, 2022

    Muchas gracias, sería de mucha ayuda para que los clientes no tengan que actualizar los excel en el servidor de hosting.

  3. Carlos

    11 enero, 2023

    Hola, muy buen tutorial, solo un detalle yo tengo alojado mi wordpress en aws y al querer ingresar esa carpeta al tema hijo por medio de ftp no me deja me dice permiso denegado, como puedo ingresar esa carpeta, ya intente otorgarle permisos y no me permite. Alguna técnica para que me deje meter carpetas en un tema hijo.

    • Jhon Marreros Guzmán

      12 enero, 2023

      Hola, pues por lo que comentas efectivamente debe ser un tema de permisos. Sin embargo algo que puedes probar es trabajarlo de manera local y luego empaquetar el tema hijo e instalarlo desde el propio WordPress, a ver si de esa forma te permite.

  4. Anabela

    28 julio, 2023

    ¡Excelente artículo! Me sirvió a la perfección.

  5. Ramon

    29 septiembre, 2023

    Sirve en las dos direcciones Excel>Woo<Excel

    • Jhon Marreros Guzmán

      4 octubre, 2023

      Hola, no, sólo es programado en una dirección, de Excel a WooCommerce

  6. Ernesto

    13 octubre, 2023

    Hola, gracias por el video tutorial.
    Me queda una duda, cómo puedo hacer para que cuando ejecuto la sincronización, lea un archivo excel que tengo localmente en mi computadora?
    Por lo que entiendo eso no está resuelto en este tutorial, o si?

    Veo que al ubicar la ruta del archivo .xls en la variable $file, no puedo remitir esta ruta al archivo local de mi computadora

    • Jhon Marreros Guzmán

      16 octubre, 2023

      Hola, efectivamente, tienes que cambiar la ruta del archivo en la variable $file, por una ruta absoluta.

  7. Ibon

    24 enero, 2024

    Buenas tardes,
    Creo que mi comentario anterior se borro por error. Te comentaba que he realizado la prueba del código y aparentemente no da error, pero tampoco hace nada.

    ¿Podrías ayudarme? la ruta donde se ejecuta es en https://gdegastronomia.es/sincro-stock-precios/

    Gracias!!

    • Jhon Marreros Guzmán

      24 enero, 2024

      Hola, si se deben estar generando errores, tienes que habilitar la depuración en WordPress para que veas los errores en el archivo debug.log, revisa este artículo: https://decodecms.com/habilitar-el-modo-debug-en-wordpress/ , con los errores que aparezcan tendremos una mejor idea de que es lo que puede estar pasando.

  8. Anabela

    19 junio, 2024

    Buenas tardes,
    Con la última actualización de WooCommerce los productos se actualizan con la última versión del archivo xlsx que existía antes de esta actualización. ¿Qué se debería modificar en el código?
    Importándolo de manera manual como csv veo que al tener el mismo nombre de archivo le agrega el número como versión. Ej: Archivo subido: stock-precios-4.csv (Siendo la 4ta vez que se sube)
    ¿Puede ser esta actualización que provoque que el archivo que se suba se lo considere con otra versión y termine tomando el que existía originalmente sin esa «versión»?

    • Jhon Marreros Guzmán

      5 septiembre, 2024

      Hola, algo que podrías evaluar hacer es listar los archivos de la ruta indicada y obtener el más reciente (por la fecha) y este asignarlo a la variable $file

      Revisa: https://stackoverflow.com/questions/11597421/how-to-get-the-newest-file-in-a-directory-in-php

      Saludos.

  9. Jhon Marreros Guzmán

    24 junio, 2024

    Hola, en el ejemplo estoy asumiendo que el archivo correcto ya esta subido en la ruta indicada, como subes el archivo a tu servidor? ya que posiblemente sea más una funcionalidad del sistema operativo. Saludos.

    • Anabela

      26 junio, 2024

      Hola, el archivo se sube mediante FTP. Ya comprobé las rutas, también regresé WooCommerce a una versión anterior, ya verifiqué si era un error de caché, ya probé cambiando el nombre del archivo y ajustándolo en el código. Ya intenté encontrar en mi servidor el archivo antiguo ya que de algún lado tiene que traer la información. Es muy raro ya que no existe el archivo anterior y el nuevo no lo toma.

      • Jhon Marreros Guzmán

        5 septiembre, 2024

        Supongo que es por esto que comentas: https://decodecms.com/sincronizar-woocommerce-y-excel/#comment-18161

  10. Pablo F

    10 septiembre, 2024

    Buenas.
    Muchas gracias por el artículo…era justo lo que necesitaba.
    Por si alguien más tuvo este problema, Quería comentarles que pude solucionar este Warning modificando

    include_once («sync-woo/process-sync.php»);
    por
    include_once(get_stylesheet_directory() . ‘/sync-woo/process-sync.php’);
    en el archivo page-sync-woo-excel.php

    Warning: include_once(sync-woo/process-sync.php): Failed to open stream: No such file or directory in \wp-content\themes\oceanwp\page-templates\page-sync-woo-excel.php on line 3

    Warning: include_once(): Failed opening ‘sync-woo/process-sync.php’ for inclusion (include_path=’.:/usr/share/php:/www/wp-content/pear’) in \wp-content\themes\oceanwp\page-templates\page-sync-woo-excel.php on line 3

  11. Guido

    15 julio, 2025

    Hola mi consulta es al siguiente, hay alguna forma de que woocommerce sincronice automáticamente la base de datos a cada instante o tengo que actualizarlo de manera manual?

Para escribir código envolver con: <pre class="language-xxx"><code> </code></pre> ,reemplaza las xxx (php, css, html)

*

* Gravatar habilitado

Barra lateral principal

Curso Decodifica WordPress

Únete a DecodeCMS

Recibirás como regalo:

Guia práctica con video:
¿Quieres agregar código a WordPress? Revisa las diferentes opciones que tienes.Ver más

Omnisend
Alojamiento Wordpress

Niveles

Básico Intermedio Avanzado

Etiquetas

accesibilidad css dashboard editor error funcionalidad herramientas imagen js librería mejoras optimización seguridad SEO social woocommerce

Populares

Relación bidireccional entre diferentes tipos de contenido con ACF

Modificar automáticamente un plugin luego de su actualización

Mostrar mensajes en la administración de WordPress y en Gutenberg

Igualar altura de elementos de un grid

© logo decode pie
Política de Privacidad | Política de devoluciones
Copyrigth 2026 Todos los derechos reservados