Ocultar productos sin stock de una tienda solo en productos relacionados
-
Hola,
Estoy llevando una tienda con woocomerce y me pregunta el cliente si es posible ocultar los productos de venta cruzada, dirigida y recomendados de los sugeridos… Pero que se puedan seguir accediendo por navegación, por eg para poder reservar, ver información etc
Gracias se antemano
-
Hola Sergio.
Si te he entendido bien, quieres ocultar los productos sin stock únicamente en las secciones de productos sugeridos (relacionados, ventas dirigidas y ventas cruzadas), pero mantenerlos visibles en el resto de la tienda para que los clientes puedan consultarlos o reservarlos.
Si es así, la solución más limpia y eficiente es utilizar un pequeño fragmento de código PHP que se añada a tu web. Este código modificará las consultas que hace WooCommerce para obtener esos productos específicos, añadiendo la condición de que solo muestre los que tienen stock.
Te dejo el código y la explicación de cómo implementarlo en este artículo de mi web:
https://joseramonbernabeu.com/solucion/como-ocultar-productos-agotados-sugerencias-woocommerce/Saludos.
-
Esta respuesta fue modificada hace 1 mes, 2 semanas por
Jose Ramón Bernabeu.
Hola Jose Ramón,
Si, es justamente eso. Probé tu shortcode y falla. Tenía uno similar desde hace unos años y tampoco funciona, por ello, tras muchas pruebas, no se si es algún cambio en el core de wordpress el que impide esta ocultación
Hola.
Vale. Voy a comprobarlo.
Por favor, dime:
- ¿Qué tipo de fallo observas exactamente?
- ¿Aparece un «Error crítico» en la web (pantalla blanca)?
- ¿El código simplemente no hace nada (los productos agotados siguen apareciendo en las sugerencias)?
- ¿Hay algún mensaje de error específico que puedas ver (en la web, en el log de errores de tu servidor o en el panel de administración de WordPress)?
- ¿Se ocultan todos los productos agotados, incluso los del catálogo general?
- ¿Cómo has insertado el código?
- ¿Con el plugin Code Snippets (o Advanced Scripts)?
- ¿Directamente en el
functions.phpde tu tema hijo?
- ¿Tienes activada la opción de WooCommerce «Ocultar en el catálogo los artículos agotados»? (En
WooCommerce > Ajustes > Productos > Inventario). Para esta solución, esa opción debería estar DESACTIVADA, ya que si está activada, WooCommerce ya los ocultará en todas partes de forma global, y el código no tendría efecto sobre las sugerencias si ya están ocultos antes de que el código actúe. - ¿Puedes darme la URL de un producto donde se muestren los «productos relacionados» o «ventas dirigidas» y donde esperas que el código actúe (es decir, que no salgan los agotados, pero sí estén otros en stock)?
-
Esta respuesta fue modificada hace 1 mes, 2 semanas por
Jose Ramón Bernabeu.
Hola de nuevo.
He comprobado el código y funciona.
Revisa las opciones de mi respuesta anterior y limpia todas las cachés.
Disculpa no responder antes. No puedo compartir la URL por privacidad del cliente. El fichero de error muestra el siguiente error:
22 {main}
thrown in /home/user/laweb.com/wp-content/themes/flatsome-child/functions.php on line 19
[28-Aug-2025 06:41:50 UTC] WordPress database error Unknown column ‘wpbe_posts.ID’ in ‘ON’ for query
SELECT DISTINCT ID FROM wpbe_posts p
LEFT JOIN ( SELECT object_id FROM wpbe_term_relationships WHERE term_taxonomy_id IN ( 8 ) ) AS exclude_join ON exclude_join.object_id = p.ID INNER JOIN ( SELECT object_id FROM wpbe_term_relationships INNER JOIN wpbe_term_taxonomy using( term_taxonomy_id ) WHERE term_id IN ( 37,197,269,199,179,266,175,267,268,164,265,87,40,181,124,195,36 ) ) AS include_join ON include_join.object_id = p.ID INNER JOIN wpbe_postmeta ON (wpbe_posts.ID = wpbe_postmeta.post_id)
WHERE 1=1
AND p.post_status = ‘publish’
AND p.post_type = ‘product’AND exclude_join.object_id IS NULL AND p.ID NOT IN ( 0,273 ) AND wpbe_postmeta.meta_key = '_stock_status' AND wpbe_postmeta.meta_value = 'instock' LIMIT 28 made by require('wp-blog-header.php'), require_once('wp-includes/template-loader.php'), include('/themes/flatsome/woocommerce/single-product.php'), wc_get_template_part, load_template, require('/themes/flatsome/woocommerce/content-single-product.php'), wc_get_template_part, load_template, require('/themes/flatsome/woocommerce/single-product/layouts/product-left-sidebar-small.php'), do_action('woocommerce_after_single_product_summary'), WP_Hook->do_action, WP_Hook->apply_filters, woocommerce_output_related_products, woocommerce_related_products, wc_get_related_products, WC_Data_Store->__call, WC_Product_Data_Store_CPT->get_related_productsLa primera linea del shortcode es la cuarta linea del fichero funtcions.php
Hola.
El código que hay en el artículo no debería generar un error de SQL de ese tipo, porque no manipula directamente las cláusulas
JOINde la base de datos ni hace referencia explícita awpbe_posts.IDen unJOIN. Ese código solo modifica los argumentos (comometa_query) que WordPress/WooCommerce luego usarán para construir la consulta SQL de forma interna.Además, veo una fecha anterior a su implementación:
[28-Aug-2025 06:41:50 UTC] WordPress database error Unknown column ‘wpbe_posts.ID’ in ‘ON’ for query¿Puede que haya otro código o plugin que esté generando ese error?
Saludos. -
Esta respuesta fue modificada hace 1 mes, 2 semanas por
Debes estar registrado para responder a este debate.