<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Prestashop | Eligeunaweb Agencia de marketing y programación web</title>
	<atom:link href="https://eligeunaweb.es/category/e-commerce/prestashop/feed/" rel="self" type="application/rss+xml" />
	<link>https://eligeunaweb.es</link>
	<description>Diseño de paginas web, tiendas online, posicionamiento SEO  y redes sociales</description>
	<lastBuildDate>Sat, 12 Jul 2025 07:07:48 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://eligeunaweb.es/wp-content/uploads/2018/09/favicon.png</url>
	<title>Prestashop | Eligeunaweb Agencia de marketing y programación web</title>
	<link>https://eligeunaweb.es</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Crear informe de ventas por MySQL en PrestaShop</title>
		<link>https://eligeunaweb.es/crear-informe-de-ventas-por-mysql-en-prestashop/</link>
					<comments>https://eligeunaweb.es/crear-informe-de-ventas-por-mysql-en-prestashop/#respond</comments>
		
		<dc:creator><![CDATA[eligeunaweb]]></dc:creator>
		<pubDate>Wed, 16 Jul 2025 07:00:00 +0000</pubDate>
				<category><![CDATA[E-commerce]]></category>
		<category><![CDATA[Prestashop]]></category>
		<category><![CDATA[Recomendaciones]]></category>
		<guid isPermaLink="false">https://eligeunaweb.es/?p=987610937</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<div class="et_pb_section et_pb_section_0 et_section_regular" >
				
				
				
				
				
				
				<div class="et_pb_row et_pb_row_0">
				<div class="et_pb_column et_pb_column_4_4 et_pb_column_0  et_pb_css_mix_blend_mode_passthrough et-last-child">
				
				
				
				
				<div class="et_pb_module et_pb_text et_pb_text_0  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><h1>Cómo crear un informe de ventas por MySQL en PrestaShop: Guía completa para ecommerce y técnicos</h1>

<p>¿Tu PrestaShop empieza a tener cada vez más pedidos y necesitas controlar tus ventas de forma más precisa? Aunque PrestaShop tiene informes, muchas veces se quedan cortos, especialmente en tiendas con alto volumen o necesidades específicas.</p>

<p>La solución es generar <strong>informes personalizados con SQL</strong>. Hoy aprenderás cómo crear un informe de ventas directo desde la base de datos de PrestaShop. ¡Ideal para ecommerce managers y técnicos!</p>

<div style="height:40px;"></div>

<h2>Índice de contenidos</h2>

<ul>
  <li><a href="#por-que-informes-sql">¿Por qué hacer informes por SQL en PrestaShop?</a></li>
  <li><a href="#tablas-clave">Tablas clave en la base de datos de PrestaShop</a></li>
  <li><a href="#consulta-basica">Consulta básica de informe de ventas</a></li>
  <li><a href="#ejemplo-practico">Ejemplo práctico paso a paso</a></li>
  <li><a href="#campos-adicionales">Campos adicionales útiles</a></li>
  <li><a href="#buenas-practicas">Buenas prácticas y seguridad</a></li>
  <li><a href="#seo-beneficios">Beneficios comerciales y estratégicos</a></li>
  <li><a href="#conclusion">Conclusión</a></li>
</ul>

<div style="height:40px;"></div>

<h2 id="por-que-informes-sql">¿Por qué hacer informes por SQL en PrestaShop?</h2>

<p>Crear informes personalizados tiene enormes ventajas:</p>

<ul>
  <li>Flexibilidad total: eliges exactamente qué datos ver.</li>
  <li>Mucho más rápido que depender del backoffice en tiendas grandes.</li>
  <li>Integración directa con Excel, BI o Google Sheets.</li>
  <li>Detectar productos estrella, zonas de venta, o hábitos de compra.</li>
</ul>

<p>¡Es clave para escalar tu ecommerce!</p>

<div style="height:40px;"></div>

<h2 id="tablas-clave">Tablas clave en la base de datos de PrestaShop</h2>

<p>Para extraer datos de ventas necesitas estas tablas:</p>

<table border="1" cellpadding="5" cellspacing="0">
  <tr>
    <th>Tabla</th>
    <th>Descripción</th>
  </tr>
  <tr>
    <td>ps_orders</td>
    <td>Cabecera de los pedidos (fecha, total, etc.).</td>
  </tr>
  <tr>
    <td>ps_order_detail</td>
    <td>Productos comprados en cada pedido.</td>
  </tr>
  <tr>
    <td>ps_product</td>
    <td>Información básica de productos.</td>
  </tr>
  <tr>
    <td>ps_customer</td>
    <td>Datos de clientes.</td>
  </tr>
  <tr>
    <td>ps_order_state_lang</td>
    <td>Estados de pedido (para filtrar solo pagados, etc.).</td>
  </tr>
</table>

<div style="height:40px;"></div>

<h2 id="consulta-basica">Consulta básica de informe de ventas</h2>

<p>Una consulta básica para saber cuántas unidades has vendido por producto sería:</p>

<pre class="caja-codigo-blog">
SELECT od.product_id, p.reference, od.product_name, SUM(od.product_quantity) as total_vendidos
FROM ps_order_detail od
JOIN ps_product p ON od.product_id = p.id_product
JOIN ps_orders o ON od.id_order = o.id_order
WHERE o.current_state IN (2, 4) -- estados pagados o enviados, por ejemplo
GROUP BY od.product_id, od.product_name, p.reference;
</pre>

<p><strong>Explicación línea a línea:</strong></p>

<ul>
  <li><code>SUM(product_quantity)</code> → total unidades vendidas.</li>
  <li><code>JOIN</code> con ps_product para obtener referencias.</li>
  <li><code>JOIN</code> con ps_orders para filtrar estados.</li>
</ul>

<p>¡Así tendrás un informe de tus ventas por producto!</p>

<div style="height:40px;"></div>

<h2 id="ejemplo-practico">Ejemplo práctico paso a paso</h2>

<p>Imagina que quieres saber las ventas del último mes.</p>

<h3>1. Haz backup de la base de datos</h3>

<pre class="caja-codigo-blog">
mysqldump -u user -p base_de_datos > backup_ps.sql
</pre>

<h3>2. Ejecuta la consulta</h3>

<pre class="caja-codigo-blog">
SELECT od.product_id, p.reference, od.product_name, SUM(od.product_quantity) as total_vendidos
FROM ps_order_detail od
JOIN ps_product p ON od.product_id = p.id_product
JOIN ps_orders o ON od.id_order = o.id_order
WHERE o.current_state IN (2,4)
AND o.date_add BETWEEN '2024-06-01' AND '2024-06-30'
GROUP BY od.product_id, od.product_name, p.reference;
</pre>

<p>Así obtendrás ventas por producto solo en ese rango de fechas.</p>

<div style="height:40px;"></div>

<h2 id="campos-adicionales">Campos adicionales útiles</h2>

<p>Otros campos que puedes incluir:</p>

<ul>
  <li>Precio unitario (<code>od.unit_price_tax_incl</code>).</li>
  <li>Total por producto (<code>SUM(od.total_price_tax_incl)</code>).</li>
  <li>Nombre del cliente (<code>ps_customer</code>).</li>
  <li>Estado del pedido.</li>
</ul>

<p>¡Puedes construir informes a medida según tus necesidades!</p>

<div style="height:40px;"></div>

<h2 id="buenas-practicas">Buenas prácticas y seguridad</h2>

<ul>
  <li>Siempre haz backup antes de ejecutar consultas.</li>
  <li>Prueba en entornos de staging primero.</li>
  <li>Evita consultas sobre toda la base de datos en horas pico.</li>
  <li>Documenta las queries para poder replicarlas o modificarlas después.</li>
</ul>

<div style="height:40px;"></div>

<h2 id="seo-beneficios">Beneficios comerciales y estratégicos</h2>

<p>Crear tus propios informes de ventas te permite:</p>

<ul>
  <li>Detectar productos estrella.</li>
  <li>Planificar estrategias de marketing basadas en datos reales.</li>
  <li>Evitar sobrestock o roturas de stock.</li>
  <li>Mejorar la rentabilidad de tu negocio.</li>
</ul>

<p>¡La información es poder!</p>

<div style="height:40px;"></div>

<h2 id="conclusion">Conclusión</h2>

<p>Crear informes de ventas por SQL en PrestaShop es una herramienta poderosa para cualquier ecommerce que quiera crecer. Con estas consultas, podrás analizar tus datos de forma más profunda y tomar decisiones estratégicas.</p>

<p><strong>¿Quieres que creemos tus informes a medida en PrestaShop?</strong> ¡<strong>Contáctanos y optimiza tu negocio!</strong></p>

<div style="height:40px;"></div>

<h2>Textos para redes sociales</h2>

<h3>LinkedIn (versión no técnica)</h3>
<p>🛍️ <strong>¿Controlas realmente tus ventas en PrestaShop?</strong><br><br>
Hoy te explico cómo crear un informe de ventas con SQL para conocer tus productos más vendidos y optimizar tu negocio.<br><br>
¡Tu ecommerce merece datos reales para crecer!<br><br>
#PrestaShop #SQL #Ecommerce #Datos #NegocioDigital</p>

<div style="height:20px;"></div>

<h3>LinkedIn (versión técnica)</h3>
<p><strong>SQL + PrestaShop = Potencia para ecommerce managers 🚀</strong><br><br>
✅ Cómo consultar tus ventas reales por producto.<br>
✅ Tablas clave: orders, order_detail, products.<br>
✅ Queries explicadas paso a paso.<br><br>
¡No dependas solo del backoffice para conocer tu negocio!<br><br>
#PrestaShop #SQL #BusinessIntelligence #DesarrolloWeb #Ecommerce</p>

<div style="height:20px;"></div>

<h3>Facebook / Instagram publicación</h3>
<p>🛍️ <strong>¡Crea tus propios informes de ventas en PrestaShop!</strong><br><br>
Aprende cómo generar estadísticas reales de tu tienda con SQL y toma mejores decisiones.<br><br>
👉 Descúbrelo paso a paso en nuestro blog.<br><br>
#PrestaShop #SQL #TiendaOnline #NegocioDigital</p>

<div style="height:20px;"></div>

<h3>Carrusel Instagram / Facebook</h3>
<p><strong>Slide 1:</strong> 🛍️ ¿Sabes qué productos vendes más en PrestaShop?<br><br>
<strong>Slide 2:</strong> 📊 Los informes básicos se quedan cortos.<br><br>
<strong>Slide 3:</strong> 💻 Con SQL puedes saberlo todo al detalle.<br><br>
<strong>Slide 4:</strong> 🚀 Mejora tu estrategia y tus ganancias.<br><br>
<strong>Slide 5:</strong> 👉 Aprende cómo en nuestro blog técnico.</p>

<div style="height:40px;"></div></div>
			</div>
			</div>
				
				
				
				
			</div>
				
				
			</div>La entrada <a href="https://eligeunaweb.es/crear-informe-de-ventas-por-mysql-en-prestashop/">Crear informe de ventas por MySQL en PrestaShop</a> apareció primero en <a href="https://eligeunaweb.es">Eligeunaweb Agencia de marketing y programación web</a>.]]></content:encoded>
					
					<wfw:commentRss>https://eligeunaweb.es/crear-informe-de-ventas-por-mysql-en-prestashop/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Cómo auditar la integridad de productos, precios, stock y categorías con SQL en PrestaShop</title>
		<link>https://eligeunaweb.es/como-auditar-la-integridad-de-productos-precios-stock-y-categorias-con-sql-en-prestashop/</link>
					<comments>https://eligeunaweb.es/como-auditar-la-integridad-de-productos-precios-stock-y-categorias-con-sql-en-prestashop/#respond</comments>
		
		<dc:creator><![CDATA[eligeunaweb]]></dc:creator>
		<pubDate>Thu, 10 Jul 2025 07:00:00 +0000</pubDate>
				<category><![CDATA[E-commerce]]></category>
		<category><![CDATA[Prestashop]]></category>
		<category><![CDATA[Recomendaciones]]></category>
		<guid isPermaLink="false">https://eligeunaweb.es/?p=987610910</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<div class="et_pb_section et_pb_section_1 et_section_regular" >
				
				
				
				
				
				
				<div class="et_pb_row et_pb_row_1">
				<div class="et_pb_column et_pb_column_4_4 et_pb_column_1  et_pb_css_mix_blend_mode_passthrough et-last-child">
				
				
				
				
				<div class="et_pb_module et_pb_text et_pb_text_1  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><h1>Cómo auditar la integridad de productos, precios, stock y categorías con SQL en PrestaShop: Guía completa para ecommerce y técnicos</h1>

<p>¿Tu tienda PrestaShop empieza a dar datos raros en productos, precios o stock? Es más habitual de lo que parece. Migraciones, módulos de terceros o errores en la base de datos pueden dejar registros inconsistentes.</p>

<p>En esta guía aprenderás a <strong>auditar la integridad</strong> de tu catálogo usando consultas SQL. Te mostraré cómo detectar:</p>

<ul>
  <li>Productos huérfanos sin categoría.</li>
  <li>Stock negativo o incoherente.</li>
  <li>Precios mal asignados o a cero.</li>
  <li>Problemas de duplicidad de registros.</li>
</ul>

<p>Está pensada tanto para gerentes de ecommerce que quieren entender el problema, como para técnicos que necesitan consultas listas para trabajar.</p>

<div style="height:40px;"></div>

<h2>Índice de contenidos</h2>

<ul>
  <li><a href="#por-que-auditar">¿Por qué auditar tu base de datos en PrestaShop?</a></li>
  <li><a href="#estructura-bbdd">Estructura de las tablas clave en PrestaShop</a></li>
  <li><a href="#productos-huerfanos">Detectar productos huérfanos sin categoría</a></li>
  <li><a href="#stock-negativo">Detectar stock negativo o incoherente</a></li>
  <li><a href="#precios-cero">Detectar productos con precio cero</a></li>
  <li><a href="#duplicidades">Detectar duplicidades en registros</a></li>
  <li><a href="#buenas-practicas">Buenas prácticas y seguridad</a></li>
  <li><a href="#seo-beneficios">Impacto SEO y ventajas comerciales</a></li>
  <li><a href="#conclusion">Conclusión</a></li>
</ul>

<div style="height:40px;"></div>

<h2 id="por-que-auditar">¿Por qué auditar tu base de datos en PrestaShop?</h2>

<p>Los motivos principales para hacer una auditoría SQL en PrestaShop:</p>

<ul>
  <li>Evitar errores en catálogo visible al cliente.</li>
  <li>Corregir problemas tras importaciones masivas.</li>
  <li>Mejorar rendimiento del backend.</li>
  <li>Garantizar que precios, stock y categorías estén bien enlazados.</li>
</ul>

<p>Un error como un producto sin categoría puede implicar que ese producto <strong>no se muestre en la tienda</strong> aunque esté activo.</p>

<div style="height:40px;"></div>

<h2 id="estructura-bbdd">Estructura de las tablas clave en PrestaShop</h2>

<p>Para auditar datos necesitas conocer estas tablas:</p>

<table border="1" cellpadding="5" cellspacing="0">
  <tr>
    <th>Tabla</th>
    <th>Descripción</th>
  </tr>
  <tr>
    <td>ps_product</td>
    <td>Productos básicos (id, referencias, activo, etc.)</td>
  </tr>
  <tr>
    <td>ps_product_lang</td>
    <td>Traducciones y nombres de producto.</td>
  </tr>
  <tr>
    <td>ps_category_product</td>
    <td>Relación producto-categoría.</td>
  </tr>
  <tr>
    <td>ps_stock_available</td>
    <td>Stock de cada producto o combinación.</td>
  </tr>
  <tr>
    <td>ps_product_shop</td>
    <td>Relación producto-tienda (multi-store).</td>
  </tr>
  <tr>
    <td>ps_specific_price</td>
    <td>Precios especiales o descuentos.</td>
  </tr>
</table>

<p>Vamos a ver cómo consultar estos datos.</p>

<div style="height:40px;"></div>

<h2 id="productos-huerfanos">Detectar productos huérfanos sin categoría</h2>

<p>¿Por qué es un problema?</p>

<ul>
  <li>Un producto sin categoría no se muestra en la tienda.</li>
  <li>Afecta negativamente al SEO.</li>
</ul>

<p>Consulta SQL para encontrar productos huérfanos:</p>

<pre class="caja-codigo-blog">
SELECT p.id_product, pl.name
FROM ps_product p
LEFT JOIN ps_category_product cp ON p.id_product = cp.id_product
LEFT JOIN ps_product_lang pl ON p.id_product = pl.id_product AND pl.id_lang = 1
WHERE cp.id_category IS NULL;
</pre>

<p><strong>Explicación:</strong></p>

<ul>
  <li>Busca productos que NO tienen relación en <code>ps_category_product</code>.</li>
  <li>Devuelve ID y nombre para localizarlos fácilmente.</li>
</ul>

<div style="height:40px;"></div>

<h2 id="stock-negativo">Detectar stock negativo o incoherente</h2>

<p>PrestaShop puede tener stock negativo si hay errores en ventas o devoluciones.</p>

<p>Consulta SQL:</p>

<pre class="caja-codigo-blog">
SELECT p.id_product, pl.name, sa.quantity
FROM ps_product p
JOIN ps_stock_available sa ON p.id_product = sa.id_product
JOIN ps_product_lang pl ON p.id_product = pl.id_product AND pl.id_lang = 1
WHERE sa.quantity < 0;
</pre>

<p><strong>Explicación:</strong></p>

<ul>
  <li>Te devuelve todos los productos con stock negativo.</li>
  <li>Útil para corregir errores antes de rebajar stock.</li>
</ul>

<div style="height:40px;"></div>

<h2 id="precios-cero">Detectar productos con precio cero</h2>

<p>Otro clásico: productos cuyo precio se ha quedado en cero tras importaciones masivas.</p>

<p>Consulta SQL:</p>

<pre class="caja-codigo-blog">
SELECT p.id_product, pl.name, ps.price
FROM ps_product p
JOIN ps_product_lang pl ON p.id_product = pl.id_product AND pl.id_lang = 1
JOIN ps_product_shop ps ON p.id_product = ps.id_product
WHERE ps.price = 0;
</pre>

<p>Revisa siempre estos productos, ¡puedes estar regalando artículos sin saberlo!</p>

<div style="height:40px;"></div>

<h2 id="duplicidades">Detectar duplicidades en registros</h2>

<p>Un problema frecuente son duplicidades en productos que pueden causar errores en módulos o en la web.</p>

<p>Consulta SQL para encontrar productos duplicados por referencia:</p>

<pre class="caja-codigo-blog">
SELECT reference, COUNT(*) as total
FROM ps_product
WHERE reference != ''
GROUP BY reference
HAVING total > 1;
</pre>

<p>Así detectas referencias repetidas que pueden confundirse en integraciones externas o ERP.</p>

<div style="height:40px;"></div>

<h2 id="buenas-practicas">Buenas prácticas y seguridad</h2>

<ul>
  <li>Haz backup antes de ejecutar cualquier consulta DELETE o UPDATE.</li>
  <li>Prueba las consultas primero en un entorno staging.</li>
  <li>Verifica IDs de idioma si trabajas en multi-idioma.</li>
  <li>Documenta cambios que apliques tras auditoría.</li>
</ul>

<p>Auditar es el primer paso antes de modificar datos.</p>

<div style="height:40px;"></div>

<h2 id="seo-beneficios">Impacto SEO y ventajas comerciales</h2>

<p>Auditar la integridad del catálogo tiene impacto directo en el SEO y en la conversión:</p>

<ul>
  <li>Mejora la indexación en buscadores.</li>
  <li>Evita páginas huérfanas.</li>
  <li>Refuerza la consistencia de categorías.</li>
  <li>Minimiza errores 404 en fichas de producto.</li>
</ul>

<p>Un catálogo limpio es clave para evitar sorpresas en campañas de Google Shopping o marketplaces.</p>

<div style="height:40px;"></div>

<h2 id="conclusion">Conclusión</h2>

<p>Auditar la base de datos de PrestaShop con SQL es esencial para evitar errores invisibles que pueden costarte ventas y posicionamiento. Las consultas que has visto hoy te permitirán revisar los puntos críticos de tu catálogo y mantener tu tienda sana y optimizada.</p>

<p><strong>¿Necesitas ayuda para auditar tu tienda PrestaShop y dejarla perfecta?</strong> ¡<strong>Contáctanos y te ayudamos!</strong></p>

<div style="height:40px;"></div></div>
			</div>
			</div>
				
				
				
				
			</div>
				
				
			</div>La entrada <a href="https://eligeunaweb.es/como-auditar-la-integridad-de-productos-precios-stock-y-categorias-con-sql-en-prestashop/">Cómo auditar la integridad de productos, precios, stock y categorías con SQL en PrestaShop</a> apareció primero en <a href="https://eligeunaweb.es">Eligeunaweb Agencia de marketing y programación web</a>.]]></content:encoded>
					
					<wfw:commentRss>https://eligeunaweb.es/como-auditar-la-integridad-de-productos-precios-stock-y-categorias-con-sql-en-prestashop/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Cómo sincronizar precios o stock desde CSV externo en PrestaShop</title>
		<link>https://eligeunaweb.es/como-sincronizar-precios-o-stock-desde-csv-externo-en-prestashop/</link>
					<comments>https://eligeunaweb.es/como-sincronizar-precios-o-stock-desde-csv-externo-en-prestashop/#respond</comments>
		
		<dc:creator><![CDATA[eligeunaweb]]></dc:creator>
		<pubDate>Mon, 30 Jun 2025 07:00:00 +0000</pubDate>
				<category><![CDATA[E-commerce]]></category>
		<category><![CDATA[Prestashop]]></category>
		<category><![CDATA[Recomendaciones]]></category>
		<guid isPermaLink="false">https://eligeunaweb.es/?p=987610855</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<div class="et_pb_section et_pb_section_2 et_section_regular" >
				
				
				
				
				
				
				<div class="et_pb_row et_pb_row_2">
				<div class="et_pb_column et_pb_column_4_4 et_pb_column_2  et_pb_css_mix_blend_mode_passthrough et-last-child">
				
				
				
				
				<div class="et_pb_module et_pb_text et_pb_text_2  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><h3><strong>Introducción</strong></h3><p>PrestaShop permite gestionar precios y stock de forma masiva importando datos desde un CSV externo. Es la mejor opción para actualizar miles de productos sin tener que modificarlos uno a uno desde el panel de administración.</p><p>En este artículo aprenderás a <strong>sincronizar precios o stock en PrestaShop desde un archivo CSV</strong> de forma técnica y segura, incluso si no tienes conocimientos avanzados.</p><div style="height:40px;"></div><h4>Índice</h4><ul><li><a href="#estructura"><strong>1. Estructura recomendada del CSV</strong></a></li><li><a href="#tablas"><strong>2. Tablas de PrestaShop implicadas</strong></a></li><li><a href="#script"><strong>3. Script PHP para sincronizar precios y stock</strong></a></li><li><a href="#buenas"><strong>4. Buenas prácticas y consejos SEO</strong></a></li><li><a href="#conclusion"><strong>5. Conclusión</strong></a></li></ul><div style="height:40px;"></div><h3 id="estructura"><strong>1. Estructura recomendada del CSV</strong></h3><p>Tu archivo CSV debería tener un aspecto similar a este:</p><pre class="caja-codigo-blog">id_product;reference;price;quantity
101;CAMISA-001;29.95;100
102;PANTALON-002;49.50;35
103;ZAPATO-003;79.00;12</pre><p>Explicación de campos:</p><ul><li><strong>id_product:</strong> ID interno del producto en PrestaShop.</li><li><strong>reference:</strong> Código de referencia (puede ser único).</li><li><strong>price:</strong> Precio del producto (sin impuestos).</li><li><strong>quantity:</strong> Stock disponible.</li></ul><div style="height:40px;"></div><h3 id="tablas"><strong>2. Tablas implicadas en PrestaShop</strong></h3><p>Al modificar precios y stock, estas son las tablas que se ven afectadas:</p><table><thead><tr><th>Tabla</th><th>Campo</th><th>Descripción</th></tr></thead><tbody><tr><td>ps_product</td><td>price</td><td>Precio base del producto (sin impuestos).</td></tr><tr><td>ps_product_shop</td><td>price</td><td>Precio en la tienda específica (multitienda).</td></tr><tr><td>ps_stock_available</td><td>quantity</td><td>Stock disponible para el producto.</td></tr></tbody></table><div style="height:40px;"></div><h3 id="script"><strong>3. Script PHP para sincronizar datos</strong></h3><p>Ejemplo de cómo procesar el CSV con PHP:</p><pre class="caja-codigo-blog">&lt;?php
// Datos conexión
$host = 'localhost';
$user = 'usuario_mysql';
$pass = 'clave_mysql';
$db = 'nombre_base_datos';

$conn = new mysqli($host, $user, $pass, $db);
if ($conn->connect_error) {
    die("Conexión fallida: " . $conn->connect_error);
}

$csv = fopen('productos.csv', 'r');
while (($line = fgetcsv($csv, 1000, ";")) !== FALSE) {
    $id_product = (int)$line[0];
    $price = (float)$line[2];
    $quantity = (int)$line[3];

    // Actualizar precio
    $sql1 = "UPDATE ps_product SET price = $price WHERE id_product = $id_product";
    $sql2 = "UPDATE ps_product_shop SET price = $price WHERE id_product = $id_product";

    // Actualizar stock
    $sql3 = "UPDATE ps_stock_available SET quantity = $quantity WHERE id_product = $id_product";

    $conn->query($sql1);
    $conn->query($sql2);
    $conn->query($sql3);
}
fclose($csv);
$conn->close();
?&gt;</pre><p><strong>Explicación paso a paso:</strong></p><ul><li>Conecta a la base de datos MySQL.</li><li>Abre el CSV línea por línea.</li><li>Lee el ID del producto, precio y stock.</li><li>Ejecuta las consultas SQL para actualizar precios y stock.</li></ul><div style="height:40px;"></div><h3 id="buenas"><strong>4. Buenas prácticas y SEO</strong></h3><ul><li>💾 Haz siempre un backup antes de actualizar datos masivos.</li><li>📊 Prueba primero en entorno de staging.</li><li>🔍 Incluye keywords como “actualizar stock CSV PrestaShop” para SEO.</li><li>🛠️ Controla errores y guarda logs del proceso PHP.</li></ul><div style="height:40px;"></div><h3 id="conclusion"><strong>5. Conclusión</strong></h3><p>Automatizar la sincronización de precios o stock desde CSV en PrestaShop es una forma eficiente de mantener el catálogo actualizado sin depender del panel manualmente.</p><p>📩 ¿Necesitas que te creemos un script personalizado? ¡Contáctanos!</p></div>
			</div>
			</div>
				
				
				
				
			</div>
				
				
			</div>La entrada <a href="https://eligeunaweb.es/como-sincronizar-precios-o-stock-desde-csv-externo-en-prestashop/">Cómo sincronizar precios o stock desde CSV externo en PrestaShop</a> apareció primero en <a href="https://eligeunaweb.es">Eligeunaweb Agencia de marketing y programación web</a>.]]></content:encoded>
					
					<wfw:commentRss>https://eligeunaweb.es/como-sincronizar-precios-o-stock-desde-csv-externo-en-prestashop/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Cómo automatizar la limpieza de datos huérfanos (transients, carritos, logs) en PrestaShop</title>
		<link>https://eligeunaweb.es/como-automatizar-la-limpieza-de-datos-huerfanos-transients-carritos-logs-en-prestashop/</link>
					<comments>https://eligeunaweb.es/como-automatizar-la-limpieza-de-datos-huerfanos-transients-carritos-logs-en-prestashop/#respond</comments>
		
		<dc:creator><![CDATA[eligeunaweb]]></dc:creator>
		<pubDate>Mon, 23 Jun 2025 07:00:00 +0000</pubDate>
				<category><![CDATA[E-commerce]]></category>
		<category><![CDATA[Prestashop]]></category>
		<category><![CDATA[Recomendaciones]]></category>
		<guid isPermaLink="false">https://eligeunaweb.es/?p=987610828</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<div class="et_pb_section et_pb_section_3 et_section_regular" >
				
				
				
				
				
				
				<div class="et_pb_row et_pb_row_3">
				<div class="et_pb_column et_pb_column_4_4 et_pb_column_3  et_pb_css_mix_blend_mode_passthrough et-last-child">
				
				
				
				
				<div class="et_pb_module et_pb_text et_pb_text_3  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><h3><strong>Introducción</strong></h3>
<p>Con el tiempo, una tienda PrestaShop acumula datos temporales como transients caducados, carritos abandonados o logs viejos. Estos registros huérfanos ocupan espacio, ralentizan la base de datos y pueden afectar el rendimiento.</p>
<p>En esta guía aprenderás a <strong>automatizar la limpieza de datos huérfanos en PrestaShop</strong> usando SQL y un script PHP para programarlo como tarea cron.</p>

<div style="height:40px;"></div>

<h4>Índice</h4>
<ul>
<li><a href="#quees"><strong>1. ¿Qué son los datos huérfanos?</strong></a></li>
<li><a href="#tablas"><strong>2. Tablas y registros más comunes</strong></a></li>
<li><a href="#sql"><strong>3. Consultas SQL para localizarlos</strong></a></li>
<li><a href="#script"><strong>4. Script PHP para automatizar la limpieza</strong></a></li>
<li><a href="#cron"><strong>5. Cómo programar la tarea cron</strong></a></li>
<li><a href="#buenaspracticas"><strong>6. Buenas prácticas y backups</strong></a></li>
<li><a href="#conclusion"><strong>7. Conclusión</strong></a></li>
</ul>

<div style="height:40px;"></div>

<h3 id="quees"><strong>1. ¿Qué son los datos huérfanos?</strong></h3>
<ul>
<li>⏳ <strong>Transients caducados:</strong> datos temporales de caché.</li>
<li>🛒 <strong>Carritos abandonados:</strong> carritos no finalizados sin actividad en X días.</li>
<li>🗂️ <strong>Logs obsoletos:</strong> registros de errores y actividad que ya no necesitas.</li>
</ul>

<div style="height:40px;"></div>

<h3 id="tablas"><strong>2. Tablas más afectadas</strong></h3>
<table>
<thead><tr><th>Tabla</th><th>Descripción</th></tr></thead>
<tbody>
<tr><td>ps_cart</td><td>Carritos abandonados</td></tr>
<tr><td>ps_connections</td><td>Sesiones de usuario</td></tr>
<tr><td>ps_guest</td><td>Datos de visitantes sin registro</td></tr>
<tr><td>ps_log</td><td>Registros de actividad</td></tr>
<tr><td>ps_smarty_cache</td><td>Caché de plantillas</td></tr>
</tbody>
</table>

<div style="height:40px;"></div>

<h3 id="sql"><strong>3. SQL para localizarlos</strong></h3>
<pre class="caja-codigo-blog">-- Carritos abandonados (30 días sin actualizar)
SELECT * FROM ps_cart
WHERE date_upd &lt; NOW() - INTERVAL 30 DAY;

-- Logs antiguos (más de 90 días)
SELECT * FROM ps_log
WHERE date_add &lt; NOW() - INTERVAL 90 DAY;</pre>

<div style="height:40px;"></div>

<h3 id="script"><strong>4. Script PHP para limpieza</strong></h3>
<pre class="caja-codigo-blog">&lt;?php
$mysqli = new mysqli('localhost','usuario','clave','base_prestashop');

// Eliminar carritos abandonados
$mysqli->query("DELETE FROM ps_cart WHERE date_upd &lt; NOW() - INTERVAL 30 DAY");

// Eliminar logs antiguos
$mysqli->query("DELETE FROM ps_log WHERE date_add &lt; NOW() - INTERVAL 90 DAY");

// Vaciar caché smarty
$mysqli->query("TRUNCATE TABLE ps_smarty_cache");

$mysqli->close();
?&gt;</pre>

<div style="height:40px;"></div>

<h3 id="cron"><strong>5. Programar cron</strong></h3>
<p>Añade en tu servidor:</p>
<pre class="caja-codigo-blog">0 3 * * 0 /usr/bin/php /ruta/del/script/limpiar_prestashop.php</pre>

<p>Esto ejecuta la limpieza cada domingo a las 3:00 AM.</p>

<div style="height:40px;"></div>

<h3 id="buenaspracticas"><strong>6. Buenas prácticas</strong></h3>
<ul>
<li>💾 Haz backup antes de eliminar registros.</li>
<li>⚙️ Prueba primero en un entorno staging.</li>
<li>🔒 Ajusta los intervalos según el volumen de tu tienda.</li>
</ul>

<div style="height:40px;"></div>

<h3 id="conclusion"><strong>7. Conclusión</strong></h3>
<p>Automatizar la limpieza de datos huérfanos mejora la velocidad y reduce el tamaño de la base de datos sin plugins externos.</p>
<p>📩 ¿Quieres que lo configuremos para tu tienda? Contáctanos.</p></div>
			</div>
			</div>
				
				
				
				
			</div>
				
				
			</div>La entrada <a href="https://eligeunaweb.es/como-automatizar-la-limpieza-de-datos-huerfanos-transients-carritos-logs-en-prestashop/">Cómo automatizar la limpieza de datos huérfanos (transients, carritos, logs) en PrestaShop</a> apareció primero en <a href="https://eligeunaweb.es">Eligeunaweb Agencia de marketing y programación web</a>.]]></content:encoded>
					
					<wfw:commentRss>https://eligeunaweb.es/como-automatizar-la-limpieza-de-datos-huerfanos-transients-carritos-logs-en-prestashop/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Guía práctica para blindar PrestaShop contra ataques</title>
		<link>https://eligeunaweb.es/guia-practica-para-blindar-prestashop-contra-ataques/</link>
					<comments>https://eligeunaweb.es/guia-practica-para-blindar-prestashop-contra-ataques/#respond</comments>
		
		<dc:creator><![CDATA[eligeunaweb]]></dc:creator>
		<pubDate>Wed, 21 May 2025 07:00:00 +0000</pubDate>
				<category><![CDATA[E-commerce]]></category>
		<category><![CDATA[Prestashop]]></category>
		<category><![CDATA[Recomendaciones]]></category>
		<category><![CDATA[Seguridad]]></category>
		<guid isPermaLink="false">https://eligeunaweb.es/?p=987501822</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<div class="et_pb_section et_pb_section_4 et_section_regular" >
				
				
				
				
				
				
				<div class="et_pb_row et_pb_row_4">
				<div class="et_pb_column et_pb_column_4_4 et_pb_column_4  et_pb_css_mix_blend_mode_passthrough et-last-child">
				
				
				
				
				<div class="et_pb_module et_pb_text et_pb_text_4  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><h3><strong>Introducción</strong></h3>
<p>PrestaShop es una plataforma robusta para ecommerce, pero como cualquier software web, si no se configura y protege adecuadamente, puede quedar expuesta a ataques comunes como inyecciones, accesos no autorizados, subida de archivos maliciosos o explotación de módulos vulnerables.</p>
<p>En esta guía te mostramos cómo <strong>blindar tu PrestaShop contra ataques frecuentes</strong>, con prácticas probadas en seguridad web, configuración de servidor, limpieza de módulos, permisos, y más.</p>

<div style="height:40px;"></div>

<h4>Índice</h4>
<ul>
<li><a href="#paso1"><strong>1. Proteger el acceso al backoffice</strong></a></li>
<li><a href="#paso2"><strong>2. Controlar permisos de archivos y carpetas</strong></a></li>
<li><a href="#paso3"><strong>3. Desactivar funciones PHP inseguras</strong></a></li>
<li><a href="#paso4"><strong>4. Revisar y limpiar módulos innecesarios</strong></a></li>
<li><a href="#paso5"><strong>5. Evitar exposición de archivos sensibles</strong></a></li>
<li><a href="#paso6"><strong>6. Bloquear ejecución en carpetas de subida</strong></a></li>
<li><a href="#paso7"><strong>7. Activar reglas de seguridad en el servidor</strong></a></li>
<li><a href="#paso8"><strong>8. Conclusión y checklist</strong></a></li>
</ul>

<div style="height:40px;"></div>

<h3 id="paso1"><strong>1. Proteger el acceso al backoffice</strong></h3>
<ul>
<li>🔐 Cambia la ruta de acceso desde `/admin123/` a algo personalizado</li>
<li>💂‍♂️ Aplica protección por IP o contraseña adicional (htpasswd)</li>
<li>🔑 Usa doble autenticación (2FA)</li>
</ul>

<div style="height:40px;"></div>

<h3 id="paso2"><strong>2. Permisos recomendados de archivos</strong></h3>
<table>
<thead><tr><th>Carpeta / archivo</th><th>Permiso recomendado</th></tr></thead>
<tbody>
<tr><td>/config, /upload, /download</td><td>750</td></tr>
<tr><td>Archivos .php</td><td>644</td></tr>
<tr><td>.htaccess</td><td>444</td></tr>
</tbody></table>

<p>✔️ Usa <code>chmod</code> y <code>chown</code> desde consola para aplicarlos correctamente.</p>

<div style="height:40px;"></div>

<h3 id="paso3"><strong>3. Desactivar funciones PHP peligrosas</strong></h3>
<p>Desde <code>php.ini</code> o panel de hosting:</p>
<pre class="caja-codigo-blog">disable_functions = exec,passthru,shell_exec,system,proc_open,popen</pre>

<p>🔒 Estas funciones no son necesarias en PrestaShop y suelen ser objetivo de exploits.</p>

<div style="height:40px;"></div>

<h3 id="paso4"><strong>4. Limpieza de módulos</strong></h3>
<ul>
<li>🧹 Elimina módulos inactivos desde el backoffice o por SQL</li>
<li>💣 Revisa módulos de terceros sin mantenimiento</li>
<li>🧠 Desinstala los que no uses, no solo los desactives</li>
</ul>

<pre class="caja-codigo-blog">DELETE FROM ps_module WHERE active = 0;</pre>

<div style="height:40px;"></div>

<h3 id="paso5"><strong>5. Evitar exposición de archivos sensibles</strong></h3>
<p>Bloquea el acceso directo a rutas como:</p>
<pre class="caja-codigo-blog">/config/, /var/, /vendor/, /classes/</pre>
<p>✔️ Usa reglas en `.htaccess` o configuración del servidor:</p>
<pre class="caja-codigo-blog">RewriteRule ^(config|var|vendor|classes) - [F,L]</pre>

<div style="height:40px;"></div>

<h3 id="paso6"><strong>6. Bloquear ejecución de PHP en carpetas inseguras</strong></h3>
<p>Ejemplo para `/upload`:</p>
<pre class="caja-codigo-blog">&lt;FilesMatch "\.php$"&gt;
  Deny from all
&lt;/FilesMatch&gt;</pre>

<p>💡 Crea un `.htaccess` con esta regla en cada carpeta de subida.</p>

<div style="height:40px;"></div>

<h3 id="paso7"><strong>7. Seguridad desde el servidor</strong></h3>
<ul>
<li>Activa firewall o WAF si usas NGINX/Apache</li>
<li>Usa CDN con protección como Cloudflare</li>
<li>Revisa logs de errores o accesos sospechosos</li>
<li>Configura alertas de integridad de archivos</li>
</ul>

<div style="height:40px;"></div>

<h3 id="paso8"><strong>8. Conclusión y checklist final</strong></h3>
<p>✅ Checklist rápida:</p>
<ul>
<li>Backoffice oculto o protegido</li>
<li>Permisos seguros en carpetas clave</li>
<li>Funciones PHP peligrosas desactivadas</li>
<li>Módulos limpios y actualizados</li>
<li>Archivos sensibles protegidos</li>
<li>Firewall activo + logs revisados</li>
</ul>

<p>📩 ¿Quieres que revisemos tu PrestaShop o lo reforcemos con reglas personalizadas? Escríbenos.</p></div>
			</div>
			</div>
				
				
				
				
			</div>
				
				
			</div>La entrada <a href="https://eligeunaweb.es/guia-practica-para-blindar-prestashop-contra-ataques/">Guía práctica para blindar PrestaShop contra ataques</a> apareció primero en <a href="https://eligeunaweb.es">Eligeunaweb Agencia de marketing y programación web</a>.]]></content:encoded>
					
					<wfw:commentRss>https://eligeunaweb.es/guia-practica-para-blindar-prestashop-contra-ataques/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Cómo sincronizar combinaciones de productos entre dos tiendas PrestaShop</title>
		<link>https://eligeunaweb.es/como-sincronizar-combinaciones-de-productos-entre-dos-tiendas-prestashop/</link>
					<comments>https://eligeunaweb.es/como-sincronizar-combinaciones-de-productos-entre-dos-tiendas-prestashop/#respond</comments>
		
		<dc:creator><![CDATA[eligeunaweb]]></dc:creator>
		<pubDate>Wed, 14 May 2025 05:00:00 +0000</pubDate>
				<category><![CDATA[E-commerce]]></category>
		<category><![CDATA[Prestashop]]></category>
		<category><![CDATA[Recomendaciones]]></category>
		<guid isPermaLink="false">https://eligeunaweb.es/?p=987501793</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<div class="et_pb_section et_pb_section_5 et_section_regular" >
				
				
				
				
				
				
				<div class="et_pb_row et_pb_row_5">
				<div class="et_pb_column et_pb_column_4_4 et_pb_column_5  et_pb_css_mix_blend_mode_passthrough et-last-child">
				
				
				
				
				<div class="et_pb_module et_pb_text et_pb_text_5  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><h3><strong>Introducción</strong></h3>
<p>En tiendas multitienda o cuando gestionas varios entornos (producción, staging, marketplaces), mantener sincronizadas las combinaciones de productos en PrestaShop puede volverse una tarea crítica.</p>
<p>Las combinaciones —como talla, color o versión— se gestionan a través de múltiples tablas conectadas entre sí. Cualquier desajuste puede romper el stock, los precios o incluso impedir añadir productos al carrito.</p>
<p>En este artículo aprenderás cómo <strong>sincronizar las combinaciones entre dos tiendas PrestaShop</strong> usando MySQL y PHP, con control total sobre atributos, stock, precios y referencias.</p>

<div style="height:40px;"></div>

<h4>Índice</h4>
<ul>
<li><a href="#paso1"><strong>1. ¿Qué es una combinación en PrestaShop?</strong></a></li>
<li><a href="#paso2"><strong>2. Tablas involucradas en las combinaciones</strong></a></li>
<li><a href="#paso3"><strong>3. Estrategias de sincronización entre tiendas</strong></a></li>
<li><a href="#paso4"><strong>4. Consultas SQL para extraer combinaciones</strong></a></li>
<li><a href="#paso5"><strong>5. Insertar combinaciones en tienda destino</strong></a></li>
<li><a href="#paso6"><strong>6. Consideraciones sobre IDs, stock y precios</strong></a></li>
<li><a href="#paso7"><strong>7. Conclusión</strong></a></li>
</ul>

<div style="height:40px;"></div>

<h3 id="paso1"><strong>1. ¿Qué es una combinación?</strong></h3>
<p>Una combinación en PrestaShop es una variación de un producto basada en atributos (ej. Camiseta Roja – Talla L). Se gestionan como entradas únicas con su propio stock, referencia y precio adicional.</p>

<div style="height:40px;"></div>

<h3 id="paso2"><strong>2. Tablas involucradas</strong></h3>
<table>
<thead><tr><th>Tabla</th><th>Contenido</th></tr></thead>
<tbody>
<tr><td>ps_product_attribute</td><td>Combinación del producto (referencia, precio, etc.)</td></tr>
<tr><td>ps_product_attribute_combination</td><td>Relación entre combinación y atributos</td></tr>
<tr><td>ps_stock_available</td><td>Stock por combinación</td></tr>
<tr><td>ps_product_attribute_shop</td><td>Datos multitienda</td></tr>
<tr><td>ps_product_attribute_image</td><td>Imágenes asociadas a la combinación</td></tr>
</tbody></table>

<div style="height:40px;"></div>

<h3 id="paso3"><strong>3. Estrategias de sincronización</strong></h3>
<ul>
<li>🟢 Sincronización puntual → script manual que clona combinaciones de una tienda a otra</li>
<li>🔄 Sincronización continua → cron PHP o trigger que compara cada X horas</li>
<li>🔁 Sincronización bidireccional → más compleja, se recomienda usar APIs</li>
</ul>

<div style="height:40px;"></div>

<h3 id="paso4"><strong>4. Consultas SQL para extraer combinaciones</strong></h3>
<p><strong>Ejemplo para clonar combinaciones del producto con ID 123:</strong></p>
<pre class="caja-codigo-blog">SELECT pa.id_product_attribute, pa.reference, pa.price, pac.id_attribute
FROM ps_product_attribute pa
JOIN ps_product_attribute_combination pac ON pa.id_product_attribute = pac.id_product_attribute
WHERE pa.id_product = 123;</pre>

<p>💡 Puedes exportar este resultado a CSV o JSON para insertarlo en la otra tienda.</p>

<div style="height:40px;"></div>

<h3 id="paso5"><strong>5. Insertar combinaciones en tienda destino</strong></h3>
<p>Usando PHP, puedes clonar combinaciones así:</p>
<pre class="caja-codigo-blog">&lt;?php
require(dirname(__FILE__).'/config/config.inc.php');
require(dirname(__FILE__).'/init.php');

$id_product = 123;
$combinacion = new Combination();
$combinacion->id_product = $id_product;
$combinacion->reference = 'SKU123-L';
$combinacion->price = 0.00;
$combinacion->default_on = 1;
$combinacion->add();

Attribute::addAttributeCombination($combinacion->id, [1, 4]); // IDs de atributos
StockAvailable::setQuantity($id_product, $combinacion->id, 10);
?&gt;</pre>

<p>💡 Repite este proceso para cada combinación del producto origen.</p>

<div style="height:40px;"></div>

<h3 id="paso6"><strong>6. Consideraciones clave</strong></h3>
<ul>
<li>Los <strong>ID de atributos deben existir</strong> previamente en ambas tiendas</li>
<li>Evita duplicados: comprueba combinaciones antes de insertarlas</li>
<li>Valida el <strong>stock y precios específicos</strong> por combinación</li>
<li>En multitienda: asegúrate de insertar en <code>ps_product_attribute_shop</code></li>
</ul>

<div style="height:40px;"></div>

<h3 id="paso7"><strong>7. Conclusión</strong></h3>
<p>Sincronizar combinaciones entre dos tiendas PrestaShop puede evitar errores de stock, duplicidades y pérdida de ventas.</p>
<p>Con SQL y PHP puedes automatizar el proceso y garantizar coherencia entre catálogos.</p>
<p>📩 ¿Quieres que preparemos un sistema de sincronización por cron o con Google Sheets? Escríbenos.</p></div>
			</div>
			</div>
				
				
				
				
			</div>
				
				
			</div>La entrada <a href="https://eligeunaweb.es/como-sincronizar-combinaciones-de-productos-entre-dos-tiendas-prestashop/">Cómo sincronizar combinaciones de productos entre dos tiendas PrestaShop</a> apareció primero en <a href="https://eligeunaweb.es">Eligeunaweb Agencia de marketing y programación web</a>.]]></content:encoded>
					
					<wfw:commentRss>https://eligeunaweb.es/como-sincronizar-combinaciones-de-productos-entre-dos-tiendas-prestashop/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Forzar la regeneración de miniaturas en PrestaShop desde PHP con control avanzado</title>
		<link>https://eligeunaweb.es/forzar-la-regeneracion-de-miniaturas-en-prestashop-desde-php-con-control-avanzado/</link>
					<comments>https://eligeunaweb.es/forzar-la-regeneracion-de-miniaturas-en-prestashop-desde-php-con-control-avanzado/#respond</comments>
		
		<dc:creator><![CDATA[eligeunaweb]]></dc:creator>
		<pubDate>Thu, 08 May 2025 05:00:00 +0000</pubDate>
				<category><![CDATA[E-commerce]]></category>
		<category><![CDATA[Prestashop]]></category>
		<category><![CDATA[Recomendaciones]]></category>
		<guid isPermaLink="false">https://eligeunaweb.es/?p=987501775</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<div class="et_pb_section et_pb_section_6 et_section_regular" >
				
				
				
				
				
				
				<div class="et_pb_row et_pb_row_6">
				<div class="et_pb_column et_pb_column_4_4 et_pb_column_6  et_pb_css_mix_blend_mode_passthrough et-last-child">
				
				
				
				
				<div class="et_pb_module et_pb_text et_pb_text_6  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><h3><strong>Introducción</strong></h3>
<p>Las miniaturas de productos en PrestaShop son clave para la presentación visual de tu catálogo. Sin embargo, pueden dañarse o perderse tras migraciones, cambios de tema, actualizaciones de módulos o limpieza de imágenes antiguas.</p>
<p>En este artículo te enseño cómo <strong>forzar la regeneración de miniaturas desde un script PHP</strong>, con control total sobre los tamaños, tipo de contenido y comportamiento del proceso.</p>

<div style="height:40px;"></div>

<h4>Índice</h4>
<ul>
<li><a href="#paso1"><strong>1. ¿Cuándo es necesario regenerar miniaturas?</strong></a></li>
<li><a href="#paso2"><strong>2. ¿Qué tipos de miniaturas existen en PrestaShop?</strong></a></li>
<li><a href="#paso3"><strong>3. Tablas y rutas que intervienen</strong></a></li>
<li><a href="#paso4"><strong>4. Script PHP para regenerar miniaturas</strong></a></li>
<li><a href="#paso5"><strong>5. Añadir control y filtros personalizados</strong></a></li>
<li><a href="#paso6"><strong>6. Automatización, rendimiento y backups</strong></a></li>
<li><a href="#paso7"><strong>7. Conclusión</strong></a></li>
</ul>

<div style="height:40px;"></div>

<h3 id="paso1"><strong>1. ¿Cuándo deberías regenerar miniaturas?</strong></h3>
<ul>
<li>🖼️ Has cambiado de tema y las imágenes no encajan con el nuevo diseño</li>
<li>📂 Has borrado imágenes manualmente desde FTP</li>
<li>⚠️ Tienes errores en el front al cargar ciertas imágenes</li>
<li>🔄 Has importado productos por CSV sin sus miniaturas</li>
</ul>

<div style="height:40px;"></div>

<h3 id="paso2"><strong>2. Tipos de miniaturas en PrestaShop</strong></h3>
<table>
<thead><tr><th>Tipo</th><th>Ubicación / Uso</th></tr></thead>
<tbody>
<tr><td>products</td><td>Imágenes de productos en el catálogo y ficha</td></tr>
<tr><td>categories</td><td>Imágenes asociadas a categorías</td></tr>
<tr><td>manufacturers</td><td>Marcas o fabricantes</td></tr>
<tr><td>suppliers</td><td>Proveedores</td></tr>
<tr><td>stores</td><td>Imágenes de tiendas físicas</td></tr>
</tbody></table>

<div style="height:40px;"></div>

<h3 id="paso3"><strong>3. Tablas y rutas involucradas</strong></h3>
<ul>
<li><strong>ps_image</strong>: almacena las imágenes subidas por producto</li>
<li><strong>ps_image_type</strong>: define los tamaños de miniaturas por tipo (home_default, cart_default&#8230;)</li>
<li><strong>Ruta base:</strong> <code>/img/p/</code> con subdirectorios por ID de imagen</li>
</ul>

<div style="height:40px;"></div>

<h3 id="paso4"><strong>4. Script PHP para regenerar miniaturas</strong></h3>
<p>Este script recorre las imágenes de productos y regenera sus versiones usando las clases nativas de PrestaShop.</p>

<pre class="caja-codigo-blog">&lt;?php
require(dirname(__FILE__).'/config/config.inc.php');
require(dirname(__FILE__).'/init.php');

$images = Image::getAllImages();
foreach ($images as $img) {
    $id_product = $img['id_product'];
    $id_image = $img['id_image'];
    
    $image = new Image($id_image);
    $path = $image->getPathForCreation();

    $types = ImageType::getImagesTypes('products');
    foreach ($types as $type) {
        ImageManager::resize(
            $path.'.jpg',
            $path.'-'.$type['name'].'.jpg',
            (int)$type['width'],
            (int)$type['height']
        );
    }

    echo "Miniaturas regeneradas para ID $id_product - Imagen $id_image<br>";
}
?&gt;</pre>

<div style="height:40px;"></div>

<h3 id="paso5"><strong>5. Filtros y personalización</strong></h3>
<p>💡 Puedes regenerar solo las imágenes faltantes añadiendo una verificación:</p>
<pre class="caja-codigo-blog">if (!file_exists($path.'-'.$type['name'].'.jpg')) {
    // regenerar solo si no existe
}</pre>

<p>O limitar a productos de una categoría específica, combinándolo con una subconsulta SQL.</p>

<div style="height:40px;"></div>

<h3 id="paso6"><strong>6. Consideraciones de rendimiento</strong></h3>
<ul>
<li>Evita regenerar todas las imágenes en sitios con >10.000 productos sin paginar</li>
<li>Haz un backup del directorio <code>/img/</code> antes de ejecutar</li>
<li>Considera ejecutar por cron en bloques de 100 o 500 imágenes</li>
<li>Si usas CDN o caché de imágenes, invalida esos recursos al finalizar</li>
</ul>

<div style="height:40px;"></div>

<h3 id="paso7"><strong>7. Conclusión</strong></h3>
<p>Regenerar miniaturas desde PHP te permite ahorrar tiempo y tener control total sobre el proceso, sin depender del backoffice ni plugins.</p>
<p>¿Necesitas adaptar este script a tu tienda o hacerlo compatible con CDN y combinaciones? Escríbenos y lo dejamos funcionando a medida.</p></div>
			</div>
			</div>
				
				
				
				
			</div>
				
				
			</div>La entrada <a href="https://eligeunaweb.es/forzar-la-regeneracion-de-miniaturas-en-prestashop-desde-php-con-control-avanzado/">Forzar la regeneración de miniaturas en PrestaShop desde PHP con control avanzado</a> apareció primero en <a href="https://eligeunaweb.es">Eligeunaweb Agencia de marketing y programación web</a>.]]></content:encoded>
					
					<wfw:commentRss>https://eligeunaweb.es/forzar-la-regeneracion-de-miniaturas-en-prestashop-desde-php-con-control-avanzado/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Cómo integrar PrestaShop con Google Sheets para gestión de productos o stock</title>
		<link>https://eligeunaweb.es/como-integrar-prestashop-con-google-sheets-para-gestion-de-productos-o-stock/</link>
					<comments>https://eligeunaweb.es/como-integrar-prestashop-con-google-sheets-para-gestion-de-productos-o-stock/#respond</comments>
		
		<dc:creator><![CDATA[eligeunaweb]]></dc:creator>
		<pubDate>Fri, 02 May 2025 05:00:00 +0000</pubDate>
				<category><![CDATA[Prestashop]]></category>
		<category><![CDATA[Recomendaciones]]></category>
		<guid isPermaLink="false">https://eligeunaweb.es/?p=987501748</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<div class="et_pb_section et_pb_section_7 et_section_regular" >
				
				
				
				
				
				
				<div class="et_pb_row et_pb_row_7">
				<div class="et_pb_column et_pb_column_4_4 et_pb_column_7  et_pb_css_mix_blend_mode_passthrough et-last-child">
				
				
				
				
				<div class="et_pb_module et_pb_text et_pb_text_7  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><h3><strong>Introducción</strong></h3>
<p>¿Gestionas tu inventario o precios desde Google Sheets y luego tienes que actualizar PrestaShop manualmente? Eso es ineficiente y propenso a errores.</p>
<p>En este artículo aprenderás cómo <strong>integrar tu hoja de Google Sheets con PrestaShop</strong> para sincronizar stock y precios automáticamente.</p>
<p>Ideal para comerciantes que trabajan con proveedores, listas externas o equipos sin acceso al backoffice.</p>
<p>&nbsp;</p>
<h4>Índice</h4>
<ul>
<li><a href="#paso1"><strong>1. Qué puedes automatizar con esta integración</strong></a></li>
<li><a href="#paso2"><strong>2. Requisitos previos</strong></a></li>
<li><a href="#paso3"><strong>3. Tablas que se verán afectadas</strong></a></li>
<li><a href="#paso4"><strong>4. Estructura de la hoja de Google Sheets</strong></a></li>
<li><a href="#paso5"><strong>5. Script PHP para importar datos desde Sheets</strong></a></li>
<li><a href="#paso6"><strong>6. Automatización con cron</strong></a></li>
<li><a href="#paso7"><strong>7. Buenas prácticas y seguridad</strong></a></li>
<li><a href="#paso8"><strong>8. Conclusión</strong></a></li>
</ul>
<p><strong></strong></p>
<h3 id="paso1"><strong>1. ¿Qué puedes automatizar con esta integración?</strong></h3>
<table>
<thead>
<tr>
<th>Acción</th>
<th>Resultado</th>
</tr>
</thead>
<tbody>
<tr>
<td>Actualizar stock desde Google Sheets</td>
<td>Evitas entrar al backoffice</td>
</tr>
<tr>
<td>Modificar precios automáticamente</td>
<td>Reduces errores humanos</td>
</tr>
<tr>
<td>Exportar datos de PrestaShop a Sheets</td>
<td>Visualizas datos sin entrar al panel</td>
</tr>
</tbody>
</table>
<h3><strong></strong></h3>
<h3><strong></strong></h3>
<h3 id="paso2"><strong>2. Requisitos previos</strong></h3>
<ul>
<li>Acceso a Google Cloud Console</li>
<li>Composer instalado en el servidor</li>
<li>PHP 7.4+ y PrestaShop funcionando</li>
<li>Una hoja compartida con cabecera y datos bien estructurados</li>
</ul>
<h3><strong></strong></h3>
<h3><strong></strong></h3>
<h3 id="paso3"><strong>3. Tablas de PrestaShop afectadas</strong></h3>
<table>
<thead>
<tr>
<th>Tabla</th>
<th>Contenido</th>
</tr>
</thead>
<tbody>
<tr>
<td>ps_product</td>
<td>Precios base de productos</td>
</tr>
<tr>
<td>ps_stock_available</td>
<td>Stock por producto</td>
</tr>
</tbody>
</table>
<h3><strong></strong></h3>
<h3><strong></strong></h3>
<h3 id="paso4"><strong>4. Estructura de la hoja de cálculo</strong></h3>
<p>Tu hoja debe tener columnas como:</p>
<table>
<thead>
<tr>
<th>ID producto</th>
<th>Referencia</th>
<th>Stock</th>
<th>Precio</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>PS001</td>
<td>25</td>
<td>49.90</td>
</tr>
<tr>
<td>2</td>
<td>PS002</td>
<td>10</td>
<td>29.99</td>
</tr>
</tbody>
</table>
<h3><strong></strong></h3>
<h3><strong></strong></h3>
<h3 id="paso5"><strong>5. Script PHP para importar datos desde Sheets</strong></h3>
<p>Este script lee datos desde una hoja de cálculo y actualiza productos.</p>
<pre class="caja-codigo-blog">&lt;?php
require 'vendor/autoload.php';
require '../config/config.inc.php';
require '../init.php';

$client = new Google_Client();
$client-&gt;setAuthConfig('credenciales.json');
$client-&gt;addScope(Google_Service_Sheets::SPREADSHEETS_READONLY);
$service = new Google_Service_Sheets($client);

$spreadsheetId = 'TU_ID_HOJA';
$range = 'Sheet1!A2:D';
$response = $service-&gt;spreadsheets_values-&gt;get($spreadsheetId, $range);
$values = $response-&gt;getValues();

foreach ($values as $row) {
    list($id, $ref, $stock, $precio) = $row;
    if (!is_numeric($id)) continue;

    StockAvailable::setQuantity((int)$id, 0, (int)$stock);
    $product = new Product((int)$id);
    $product-&gt;price = (float)$precio;
    $product-&gt;update();

    echo "Producto $ref actualizado: stock=$stock, precio=$precio\n";
}
?&gt;</pre>
<h3><strong></strong></h3>
<h3><strong></strong></h3>
<h3 id="paso6"><strong>6. Automatización con cron</strong></h3>
<p>Programa este script para que se ejecute automáticamente cada cierto tiempo:</p>
<pre class="caja-codigo-blog">*/30 * * * * /usr/bin/php /ruta/sync-google-prestashop.php</pre>
<p>Así se actualiza cada 30 minutos automáticamente.</p>
<h3><strong></strong></h3>
<h3><strong></strong></h3>
<h3 id="paso7"><strong>7. Buenas prácticas y seguridad</strong></h3>
<ul>
<li>Protege el script con autenticación por token o IP</li>
<li>No dejes las credenciales de Google visibles en producción</li>
<li>Valida que los IDs existen antes de hacer cambios</li>
<li>Guarda logs de cada ejecución por si necesitas depurar</li>
</ul>
<h3><strong></strong></h3>
<h3><strong></strong></h3>
<h3 id="paso8"><strong>8. Conclusión</strong></h3>
<p>Integrar Google Sheets con PrestaShop te permite ahorrar tiempo y errores al mantener actualizado tu catálogo.</p>
<p>¿Quieres que conectemos tu hoja con tu tienda sin depender de plugins de pago? 📩 Escríbenos y lo dejamos funcionando.</p></div>
			</div>
			</div>
				
				
				
				
			</div>
				
				
			</div>La entrada <a href="https://eligeunaweb.es/como-integrar-prestashop-con-google-sheets-para-gestion-de-productos-o-stock/">Cómo integrar PrestaShop con Google Sheets para gestión de productos o stock</a> apareció primero en <a href="https://eligeunaweb.es">Eligeunaweb Agencia de marketing y programación web</a>.]]></content:encoded>
					
					<wfw:commentRss>https://eligeunaweb.es/como-integrar-prestashop-con-google-sheets-para-gestion-de-productos-o-stock/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Cómo auditar la integridad de productos, precios, stock y categorías en PrestaShop con SQL</title>
		<link>https://eligeunaweb.es/como-auditar-la-integridad-de-productos-precios-stock-y-categorias-en-prestashop-con-sql/</link>
					<comments>https://eligeunaweb.es/como-auditar-la-integridad-de-productos-precios-stock-y-categorias-en-prestashop-con-sql/#respond</comments>
		
		<dc:creator><![CDATA[eligeunaweb]]></dc:creator>
		<pubDate>Fri, 25 Apr 2025 05:00:00 +0000</pubDate>
				<category><![CDATA[Prestashop]]></category>
		<category><![CDATA[Recomendaciones]]></category>
		<guid isPermaLink="false">https://eligeunaweb.es/?p=987501713</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<div class="et_pb_section et_pb_section_8 et_section_regular" >
				
				
				
				
				
				
				<div class="et_pb_row et_pb_row_8">
				<div class="et_pb_column et_pb_column_4_4 et_pb_column_8  et_pb_css_mix_blend_mode_passthrough et-last-child">
				
				
				
				
				<div id="introduccion" class="et_pb_module et_pb_text et_pb_text_8  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><h3><strong>Introduccion</strong></h3>
<p>Con el tiempo, muchas tiendas PrestaShop empiezan a mostrar <strong>síntomas de caos interno</strong>:</p>
<ul>
<li>Productos publicados sin precio.</li>
<li>Stock negativo o incoherente.</li>
<li>Artículos sin categoría o duplicados.</li>
<li>Combinaciones mal enlazadas.</li>
</ul>
<p>Todo esto no solo afecta al rendimiento y la experiencia del cliente, sino que <strong>destruye el SEO y la conversión</strong>.</p>
<p>En este artículo te enseño a realizar una <strong>auditoría técnica completa</strong> de productos, stock, precios y categorías en tu tienda PrestaShop usando <strong>consultas SQL</strong>. Sin módulos de pago. Sin plugins. Solo información precisa para saber qué está mal y por qué.</p></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_9  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong>¿Qué es una auditoría de integridad?</strong></p>
<p>Es una revisión estructurada de tu base de datos para detectar:</p>
<ul>
<li>Errores comunes en la carga de productos.</li>
<li>Campos esenciales vacíos o inconsistentes.</li>
<li>Relaciones rotas (productos sin categoría, combinaciones huérfanas&#8230;).</li>
</ul>
<p>Duplicados que pueden afectar búsquedas y navegación.</p></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_10  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong>Requisitos</strong></p>
<ul>
<li>Acceso a la base de datos (phpMyAdmin, Adminer o consola SQL).</li>
<li>Conocimiento básico de MySQL.</li>
</ul>
<p>Tener un backup antes de hacer cambios si decides limpiar algo.</p></div>
			</div><div class="et_pb_module et_pb_divider et_pb_divider_0 et_pb_space"><div class="et_pb_divider_internal"></div></div><div id="paso1" class="et_pb_module et_pb_text et_pb_text_11  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong>Auditoría 1: Productos sin precio</strong></p>
<pre>SELECT id_product, reference, price<br />FROM ps_product<br />WHERE price = 0 OR price IS NULL;</pre></div>
			</div><div class="et_pb_module et_pb_divider et_pb_divider_1 et_pb_space"><div class="et_pb_divider_internal"></div></div><div id="paso2" class="et_pb_module et_pb_text et_pb_text_12  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong>Auditoría 2: Productos sin stock (o con stock negativo)</strong></p>
<pre>SELECT sa.id_product, p.reference, sa.quantity<br />FROM ps_stock_available sa<br />JOIN ps_product p ON p.id_product = sa.id_product<br />WHERE sa.quantity &lt;= 0;</pre>
<p>Puedes adaptarlo para detectar solo los que deberían estar activos (active = 1).</p></div>
			</div><div class="et_pb_module et_pb_divider et_pb_divider_2 et_pb_space"><div class="et_pb_divider_internal"></div></div><div id="paso3" class="et_pb_module et_pb_text et_pb_text_13  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong>Auditoría 3: Productos sin categoría asignada</strong></p>
<pre>SELECT p.id_product, p.reference<br />FROM ps_product p<br />LEFT JOIN ps_category_product cp ON cp.id_product = p.id_product<br />WHERE cp.id_category IS NULL;</pre></div>
			</div><div class="et_pb_module et_pb_divider et_pb_divider_3 et_pb_space"><div class="et_pb_divider_internal"></div></div><div id="paso4" class="et_pb_module et_pb_text et_pb_text_14  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong>Auditoría 4: Productos sin imagen principal</strong></p>
<pre>SELECT p.id_product, p.reference<br />FROM ps_product p<br />LEFT JOIN ps_image i ON i.id_product = p.id_product<br />WHERE i.id_image IS NULL;</pre></div>
			</div><div class="et_pb_module et_pb_divider et_pb_divider_4 et_pb_space"><div class="et_pb_divider_internal"></div></div><div id="paso5" class="et_pb_module et_pb_text et_pb_text_15  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong>Auditoría 5: Productos duplicados por referencia (SKU)</strong></p>
<pre>SELECT reference, COUNT(*) AS total<br />FROM ps_product<br />GROUP BY reference<br />HAVING total &gt; 1;</pre>
<p>Esto puede causar problemas en sincronizaciones, búsquedas internas o integraciones.</p></div>
			</div><div class="et_pb_module et_pb_divider et_pb_divider_5 et_pb_space"><div class="et_pb_divider_internal"></div></div><div class="et_pb_module et_pb_text et_pb_text_16  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong>Auditoría 6: Combinaciones sin producto (huérfanas)</strong></p>
<pre>SELECT pa.id_product_attribute<br />FROM ps_product_attribute pa<br />LEFT JOIN ps_product p ON p.id_product = pa.id_product<br />WHERE p.id_product IS NULL;</pre></div>
			</div><div class="et_pb_module et_pb_divider et_pb_divider_6 et_pb_space"><div class="et_pb_divider_internal"></div></div><div class="et_pb_module et_pb_text et_pb_text_17  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong>Auditoría 7: Categorías vacías (sin productos)</strong></p>
<pre>SELECT c.id_category, cl.name<br />FROM ps_category c<br />JOIN ps_category_lang cl ON c.id_category = cl.id_category<br />LEFT JOIN ps_category_product cp ON cp.id_category = c.id_category<br />WHERE cp.id_product IS NULL<br />  AND c.id_category NOT IN (1, 2); -- excluye HOME y ROOT</pre></div>
			</div><div class="et_pb_module et_pb_divider et_pb_divider_7 et_pb_space"><div class="et_pb_divider_internal"></div></div><div class="et_pb_module et_pb_text et_pb_text_18  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong>Opcional: Auditoría general en un solo informe</strong></p>
<p>Puedes combinar varias consultas y generar un <strong>dashboard PHP</strong> que te diga cuántos errores tienes de cada tipo, para revisar desde el navegador.</p>
<p>También puedes exportar los resultados a CSV y trabajarlos desde Excel o Google Sheets.</p></div>
			</div><div class="et_pb_module et_pb_divider et_pb_divider_8 et_pb_space"><div class="et_pb_divider_internal"></div></div><div class="et_pb_module et_pb_text et_pb_text_19  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong>Buenas prácticas tras la auditoría</strong></p>
<ul>
<li>Arregla primero lo que <strong>afecta a ventas</strong>: stock, precio y visibilidad.</li>
<li>Luego pasa a limpiar relaciones huérfanas.</li>
<li>Finalmente, optimiza duplicados o estructuras confusas.</li>
</ul>
<p>Programa auditorías periódicas cada 30 días si manejas muchos productos.</p></div>
			</div><div class="et_pb_module et_pb_divider et_pb_divider_9 et_pb_space"><div class="et_pb_divider_internal"></div></div><div class="et_pb_module et_pb_text et_pb_text_20  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong>¿Y si no sé cómo arreglar los errores?</strong></p>
<p>Es totalmente normal. PrestaShop tiene una estructura compleja y puede ser confusa.</p>
<p>Lo importante es detectar lo que está mal. Luego, puedes:</p>
<ul>
<li>Repararlo con SQL si sabes.</li>
<li>Usar scripts de automatización para limpiar.</li>
<li>O <strong>pedir ayuda profesional para dejar la tienda optimizada</strong>.</li>
</ul></div>
			</div><div id="conclusion" class="et_pb_module et_pb_text et_pb_text_21  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><h3><strong>Conclusión</strong></h3>
<p>Una tienda sin errores vende más, carga más rápido y posiciona mejor.</p>
<p>Con estas consultas SQL puedes hacer una auditoría real de tu catálogo en pocos minutos y detectar <strong>fallos invisibles que afectan en tus ventas sin que lo sepas</strong>.</p>
<p>¿Quieres que prepare un informe de tu tienda y lo revise contigo paso a paso?</p>
<p>📩 Escríbenos y te entregamos un diagnóstico personalizado.</p></div>
			</div>
			</div>
				
				
				
				
			</div>
				
				
			</div>La entrada <a href="https://eligeunaweb.es/como-auditar-la-integridad-de-productos-precios-stock-y-categorias-en-prestashop-con-sql/">Cómo auditar la integridad de productos, precios, stock y categorías en PrestaShop con SQL</a> apareció primero en <a href="https://eligeunaweb.es">Eligeunaweb Agencia de marketing y programación web</a>.]]></content:encoded>
					
					<wfw:commentRss>https://eligeunaweb.es/como-auditar-la-integridad-de-productos-precios-stock-y-categorias-en-prestashop-con-sql/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Cómo generar títulos y descripciones de productos con ChatGPT vía API</title>
		<link>https://eligeunaweb.es/como-generar-titulos-y-descripciones-de-productos-con-chatgpt-via-api/</link>
					<comments>https://eligeunaweb.es/como-generar-titulos-y-descripciones-de-productos-con-chatgpt-via-api/#respond</comments>
		
		<dc:creator><![CDATA[eligeunaweb]]></dc:creator>
		<pubDate>Thu, 24 Apr 2025 05:00:00 +0000</pubDate>
				<category><![CDATA[E-commerce]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[Prestashop]]></category>
		<category><![CDATA[WooCommerce]]></category>
		<guid isPermaLink="false">https://eligeunaweb.es/?p=987501707</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<p><div class="et_pb_section et_pb_section_9 et_section_regular" >
				
				
				
				
				
				
				<div class="et_pb_row et_pb_row_9">
				<div class="et_pb_column et_pb_column_4_4 et_pb_column_9  et_pb_css_mix_blend_mode_passthrough et-last-child">
				
				
				
				
				<div id="introduccion" class="et_pb_module et_pb_text et_pb_text_22  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><h3><strong>Introduccion</strong></h3>
<p>Uno de los grandes retos para cualquier tienda online es crear <strong>títulos y descripciones que vendan</strong>.<br />En eCommerce con catálogos grandes, esto se vuelve una tarea repetitiva, lenta y cara. Además, muchos productos quedan con textos genéricos o vacíos, afectando al SEO y a la conversión.</p>
<p>En este artículo te enseño cómo integrar la API de OpenAI (ChatGPT) con tu tienda para:</p>
<ul>
<li>Generar automáticamente títulos y descripciones atractivas.</li>
<li>Usar datos reales de tu catálogo (nombre, categoría, marca…).</li>
<li>Automatizar el proceso desde un archivo CSV o directamente desde tu base de datos.</li>
</ul>
<p>Esta solución es ideal para:</p>
<ul>
<li>Comerciantes con grandes catálogos sin descripciones.</li>
<li>Agencias que quieren ofrecer contenido optimizado y escalable.</li>
<li>Equipos que buscan mejorar la calidad de sus fichas sin invertir horas.</li>
</ul></div>
			</div><div class="et_pb_module et_pb_divider et_pb_divider_10 et_pb_space"><div class="et_pb_divider_internal"></div></div><div class="et_pb_module et_pb_text et_pb_text_23  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><h4>Índice</h4>
<p><a href="#introduccion"></p>
<p><strong>Introducción</strong></a></p>
<p><a href="#paso1"><strong>1: Obtener tu API Key de OpenAI</strong></a></p>
<p><a href="#paso2"><strong>2. Crear el prompt adecuado</strong></a></p>
<p><a href="#paso3"><strong>3. Código PHP para generar contenido desde la API</strong></a></p>
<p><a href="#paso4"><strong>4. ¿Y luego qué hago con los textos generados?</strong></a></p>
<p><a href="#paso5"><strong>5. Ampliaciones útiles</strong></a></p>
<p><a href="#paso6"><strong>6. Seguridad y buenas prácticas</strong></a></p>
<p><a href="#conclusion"><strong>Conclusión</strong></a></p></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_24  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong>Requisitos previos</strong></p>
<ul>
<li>Cuenta en OpenAI con una API Key activa.</li>
<li>Acceso a tu tienda (WooCommerce, PrestaShop, etc.).</li>
<li>PHP + cURL o alguna librería como Guzzle.</li>
<li>Datos básicos del producto: nombre, tipo, uso, etc.</li>
</ul></div>
			</div>
			</div>
				
				
				
				
			</div><div class="et_pb_row et_pb_row_10">
				<div class="et_pb_column et_pb_column_4_4 et_pb_column_10  et_pb_css_mix_blend_mode_passthrough et-last-child">
				
				
				
				
				<div id="paso1" class="et_pb_module et_pb_text et_pb_text_25  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong>Paso 1: Obtener tu API Key de OpenAI</strong></p>
<ol>
<li>Ve a: <a href="https://platform.openai.com/account/api-keys">https://platform.openai.com/account/api-keys</a></li>
<li>Copia tu clave secreta.</li>
<li>Guarda esta clave en un archivo .env, variable de entorno o configuración segura.</li>
</ol></div>
			</div><div class="et_pb_module et_pb_divider et_pb_divider_11 et_pb_space"><div class="et_pb_divider_internal"></div></div><div id="paso2" class="et_pb_module et_pb_text et_pb_text_26  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong>Paso 2: Crear el prompt adecuado</strong></p>
<p>Un buen prompt marca la diferencia. Aquí un ejemplo claro:</p>
<p>Eres un redactor profesional de eCommerce. Genera un título atractivo y una descripción breve de un producto. </p>
<p><strong><em>Datos:</em></strong></p>
<p>Nombre: Zapatillas deportivas ProRun 5000</p>
<p>Categoría: Calzado running</p>
<p>Color: Negro</p>
<p>Material: Malla transpirable</p>
<p>Público: Hombre</p>
<p>Precio: 59,99€ </p>
<p><strong><em>Devuelve:</em></strong></p>
<p>&#8211; Título</p>
<p>&#8211; Descripción de máximo 300 caracteres</p>
<p>🎯 Puedes adaptar el prompt según idioma, estilo de marca, tono (profesional, casual, técnico, etc.).</p></div>
			</div><div class="et_pb_module et_pb_divider et_pb_divider_12 et_pb_space"><div class="et_pb_divider_internal"></div></div><div id="paso3" class="et_pb_module et_pb_text et_pb_text_27  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong>Paso 3: Código PHP para generar contenido desde la API</strong></p>
<p>Aquí un script en PHP que toma productos desde un CSV y genera título + descripción vía OpenAI:</p></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_28 caja-codigo-blog  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p>&lt;?php</p>
<p>$apiKey = &#8216;TU_API_KEY&#8217;;</p>
<p>$csv = fopen(&#8216;productos.csv&#8217;, &#8216;r&#8217;);</p>
<p>$headers = fgetcsv($csv);</p>
<p>&nbsp;</p>
<p>while (($row = fgetcsv($csv)) !== FALSE) {</p>
<p>    $data = array_combine($headers, $row);</p>
<p>&nbsp;</p>
<p>    $prompt = «Eres un redactor profesional de eCommerce. Genera un título atractivo y una descripción breve de un producto.</p>
<p>&nbsp;</p>
<p>Datos:</p>
<p>Nombre: {$data[&#8216;nombre&#8217;]}</p>
<p>Categoría: {$data[&#8216;categoria&#8217;]}</p>
<p>Color: {$data[&#8216;color&#8217;]}</p>
<p>Material: {$data[&#8216;material&#8217;]}</p>
<p>Público: {$data[&#8216;publico&#8217;]}</p>
<p>Precio: {$data[&#8216;precio&#8217;]}</p>
<p>&nbsp;</p>
<p>Devuelve:</p>
<p>&#8211; Título</p>
<p>&#8211; Descripción de máximo 300 caracteres»;</p>
<p>&nbsp;</p>
<p>    $response = generarConChatGPT($prompt, $apiKey);</p>
<p>    echo «Producto: {$data[&#8216;nombre&#8217;]}\n»;</p>
<p>    echo $response . «\n\n»;</p>
<p>}</p>
<p>&nbsp;</p>
<p>fclose($csv);</p>
<p>&nbsp;</p>
<p>// Función para llamar a la API</p>
<p>function generarConChatGPT($prompt, $apiKey) {</p>
<p>    $ch = curl_init(&#8216;https://api.openai.com/v1/chat/completions&#8217;);</p>
<p>&nbsp;</p>
<p>    $data = [</p>
<p>        «model» =&gt; «gpt-4»,</p>
<p>        «messages» =&gt; [</p>
<p>            [«role» =&gt; «user», «content» =&gt; $prompt]</p>
<p>        ],</p>
<p>        «temperature» =&gt; 0.7</p>
<p>    ];</p>
<p>&nbsp;</p>
<p>    curl_setopt_array($ch, [</p>
<p>        CURLOPT_RETURNTRANSFER =&gt; true,</p>
<p>        CURLOPT_HTTPHEADER =&gt; [</p>
<p>            «Content-Type: application/json»,</p>
<p>            «Authorization: Bearer $apiKey»</p>
<p>        ],</p>
<p>        CURLOPT_POSTFIELDS =&gt; json_encode($data)</p>
<p>    ]);</p>
<p>&nbsp;</p>
<p>    $result = curl_exec($ch);</p>
<p>    curl_close($ch);</p>
<p>&nbsp;</p>
<p>    $response = json_decode($result, true);</p>
<p>    return $response[&#8216;choices&#8217;][0][&#8216;message&#8217;][&#8216;content&#8217;] ?? &#8216;Error al generar contenido&#8217;;</p>
<p>}</p>
<p>?&gt;</p></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_29  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong>¿Y luego qué hago con los textos generados?</strong></p>
<ol>
<li>Puedes volcarlos automáticamente en tu tienda (por API, SQL o script).</li>
<li>Revisarlos manualmente si quieres un control editorial.</li>
<li>Crear múltiples variaciones para pruebas A/B.</li>
</ol></div>
			</div><div class="et_pb_module et_pb_divider et_pb_divider_13 et_pb_space"><div class="et_pb_divider_internal"></div></div><div id="paso4" class="et_pb_module et_pb_text et_pb_text_30  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong>Ampliaciones útiles</strong></p>
<ul>
<li><strong>Idiomas</strong>: Pide a ChatGPT que lo devuelva en varios idiomas.</li>
<li><strong>Estilo de marca</strong>: Entrénalo con tono corporativo si tu web tiene voz propia.</li>
<li><strong>Meta etiquetas SEO</strong>: Puedes pedir también una meta title y meta description para SEO.</li>
<li><strong>Procesamiento en lote</strong>: Hazlo por partes si tu CSV es muy grande (ej. 100 productos por ejecución).</li>
<li><strong>Desde base de datos</strong>: Extrae productos sin descripción directamente desde MySQL y pásalos al script.</li>
</ul></div>
			</div><div class="et_pb_module et_pb_divider et_pb_divider_14 et_pb_space"><div class="et_pb_divider_internal"></div></div><div id="paso5" class="et_pb_module et_pb_text et_pb_text_31  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong>Seguridad y buenas prácticas</strong></p>
<ul>
<li>Nunca expongas tu API Key públicamente.</li>
<li>Añade límites o retardo si haces muchas llamadas para evitar bloqueo.</li>
<li>Revisa los términos de uso de OpenAI para contenido automatizado.</li>
</ul></div>
			</div><div class="et_pb_module et_pb_divider et_pb_divider_15 et_pb_space"><div class="et_pb_divider_internal"></div></div><div id="conclusion" class="et_pb_module et_pb_text et_pb_text_32  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><h3><strong>Conclusión</strong></h3>
<p>Generar contenido de calidad para tu eCommerce <strong>ya no tiene por qué ser un cuello de botella</strong>.<br />Con ChatGPT puedes escalar descripciones, títulos y SEO de productos sin perder coherencia ni tiempo.</p>
<p>Esto te permite lanzar más productos, testear textos de venta y mantener una tienda profesional, sin depender 100% de redactores externos.</p>
<p>👉 ¿Te gustaría tener esto funcionando sobre tu tienda? ¿Necesitas algo más avanzado (multiidioma, desde base, con control por panel)?</p>
<p>📩 <strong>Contáctanos y te ayudamos a integrarlo a medida.</strong></p></div>
			</div>
			</div>
				
				
				
				
			</div>
				
				
			</div></p>La entrada <a href="https://eligeunaweb.es/como-generar-titulos-y-descripciones-de-productos-con-chatgpt-via-api/">Cómo generar títulos y descripciones de productos con ChatGPT vía API</a> apareció primero en <a href="https://eligeunaweb.es">Eligeunaweb Agencia de marketing y programación web</a>.]]></content:encoded>
					
					<wfw:commentRss>https://eligeunaweb.es/como-generar-titulos-y-descripciones-de-productos-con-chatgpt-via-api/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
