Soporte » Plugins y Hacks » WooCommerce » Producto variable con precio por unidad

  • Resuelto marcvilap

    (@marcvilap)


    Hola,

    Tengo un problema que ya me ha aparecido en un par de proyectos woocomerce, a ver si podeis ayudarme.

    Utilizando productos variables creo diferentes lotes de productos. En este caso son invitaciones de boda.

    Por ejemplo: 50 invitaciones valen 100€, 100 invitaciones valen 180€ ….

    Con atributos logro modificar el precio definitivo de la parte inferior. Sin embargo lo que busco es,tanto en el listado de productos como en la ficha en su parte superior, poner el precio unitario ( 1,5€).

    Lo unico que he conseguido es mediante una combinación de atributos poner el precio unitario y ocultar la opción con css. De esta manera y junto a un plugin q solo me muestra el precio más bajo logro el objetivo pero de una manera incorrecta.

    A Alguien se le ocurre alguna posible solición o se h encontrado con el mismo problema.

    Muchas gracias!!

    La página con la que necesito ayuda: [accede para ver el enlace]

Viendo 7 respuestas - de la 1 a la 7 (de un total de 7)
  • Moderador Fernando Tellado

    (@fernandot)

    Yo crearía un paquete básico de 1 unidad, no seleccionable, sin inventario, y luego le instalaría este plugin, que muestra el coste de la variación más baja:

    https://es.wordpress.org/plugins/show-only-lowest-prices-in-woocommerce-variable-products/

    Iniciador del debate marcvilap

    (@marcvilap)

    Hola Fernando,

    Eso es lo que tenía pensado, pero no encuentro la manera de que esta opción no sea seleccionable, sin inventario.

    Para gestionar la cantidad lo que hago es, mediante productos variables, utilizar un atributo cantidad con los valores 20 unidades | 50 unidades | 75 unidades ….

    Desde variaciones indico el precio de cada uno de los packs.

    Con lo que comentas he añadido el valor 1 unidad delante del valor del atributo y he indicado en las variaciones que esta variación de producto está agotada. Con esto cuando voy a la ficha del producto me deja seleccionar el prack de 1 unidad y me dice que está agotado, en lugar de no mostrarme la opción de 1 unidad en el select.

    No encuentro otra manera de ocultar la opción del select

    Mil gracias!

    Moderador Fernando Tellado

    (@fernandot)

    Se me ocurren dos posibles soluciones:

    Con PHP:

    add_filter( 'woocommerce_variation_is_active', 'grey_out_variations_when_out_of_stock', 10, 2 );
    function grey_out_variations_when_out_of_stock( $grey_out, $variation ){
    if ( ! $variation->is_in_stock() ){
      return false;
     }else{
      return true;
     }
    }

    Con CSS:

    .variations option:disabled {
      display:none;
    }
    Moderador Fernando Tellado

    (@fernandot)

    Ah, y pasa por los ajustes de WooCommerce para activar la casilla de «Ocultar en el catálogo los artículos agotados»

    Moderador Fernando Tellado

    (@fernandot)

    Si no te funciona el código PHP anterior puede ser por la versión de WooCommerce, este debería funcionar en todas las versiones 3.x:

    add_action( 'pre_get_posts', 'ft_hide_out_of_stock_products' );
    
    function ft_hide_out_of_stock_products( $q ) {
    
        if ( ! $q->is_main_query() || is_admin() ) {
            return;
        }
    
        if ( $outofstock_term = get_term_by( 'name', 'outofstock', 'product_visibility' ) ) {
    
            $tax_query = (array) $q->get('tax_query');
    
            $tax_query[] = array(
                'taxonomy' => 'product_visibility',
                'field' => 'term_taxonomy_id',
                'terms' => array( $outofstock_term->term_taxonomy_id ),
                'operator' => 'NOT IN'
            );
    
            $q->set( 'tax_query', $tax_query );
    
        }
    
        remove_action( 'pre_get_posts', 'ft_hide_out_of_stock_products' );
    
    }
    Moderador Fernando Tellado

    (@fernandot)

    Otra posible solución si no funciona ni el ajuste ni los códigos anteriores:

    function custom_wc_ajax_variation_threshold( $qty, $product ) {
        return 10;
    }
    
    add_filter( 'woocommerce_ajax_variation_threshold', 'custom_wc_ajax_variation_threshold', 10, 2 );
    Iniciador del debate marcvilap

    (@marcvilap)

    Hola Fernando,

    Muchas gracias por tu ayuda.

    Finalmente he podido solucionar el problema combinando 2 plugins:

    https://wordpress.org/plugins/simple-linked-variations-for-woocommerce/

    Y este otro que me proponías, que veo está desarrollado por ti y que ya había utilizado anteriormente (Muy buen aporte).
    https://es.wordpress.org/plugins/show-only-lowest-prices-in-woocommerce-variable-products/

    Lo que he realizado, por si alguien se encuentra en situación parecida, es crear un atributo para crear una variación con el precio unitario que quiero mostrar.

    Una vez creado este atributo y la variación con el precio unitario, este atributo se me muestra en la ficha. Para ocultarlo utilizo el primer plugin, de esta manera el usuario no podrá «acceder a este precio» de ninguna manera.

    Una vez realizado esto y mediante el 2n plugin muestro solo el precio más bajo de todo el rango que es el precio unitario.

    Muchas gracias!

    PD: Por cierto fernando he tenido problemas a la hora de traducir tu plugin.

Viendo 7 respuestas - de la 1 a la 7 (de un total de 7)
  • El debate ‘Producto variable con precio por unidad’ está cerrado a nuevas respuestas.