• 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

Viendo 6 respuestas - de la 1 a la 6 (de un total de 6)
  • 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.

    Iniciador del debate Sergiotechs

    (@singletontechs)

    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:

    1. ¿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?
    2. ¿Cómo has insertado el código?
      • ¿Con el plugin Code Snippets (o Advanced Scripts)?
      • ¿Directamente en el functions.php de tu tema hijo?
    3. ¿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.
    4. ¿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)?

    Hola de nuevo.

    He comprobado el código y funciona.

    Revisa las opciones de mi respuesta anterior y limpia todas las cachés.

    Iniciador del debate Sergiotechs

    (@singletontechs)

    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_products

    La 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 JOIN de la base de datos ni hace referencia explícita a wpbe_posts.ID en un JOIN. Ese código solo modifica los argumentos (como meta_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.

Viendo 6 respuestas - de la 1 a la 6 (de un total de 6)

Debes estar registrado para responder a este debate.