Woocommerce: Cenové rozpětí při variantách

Úvodní stránka Fórum podpory WordPressu Pluginy (funkčnost webu) Woocommerce: Cenové rozpětí při variantách

Zvolené téma obsahuje celkem 7 odpovědí. Do diskuze (2 účastníci) se naposledy zapojil uživatel  Landsman a poslední změna je stará 4 roky, 1 měsíc.

Aktuálně je na stránce zobrazeno 8 příspěvků - 1. až 8. (z celkem 8)
  • Autor
    Příspěvky
  • #29006

    Landsman
    Participant
    Web

    Zdravím,

    řešil jste někdo, jak zrušit výpis cenového rozpětí “1000 – 2000 Kč” pokud mají jednotlivé varianty produktu odlišné ceny?

    Rád bych tam měl jednu cenu, která se bude měnit, což tam vlastně je, právě nad tím rozpětím.

    Líbí se mi ale, že v rámci toho rozpětí jsou meta tagy s cenou a ona samostatná cena meta tagy nemá.

    Ideální by tedy bylo zobrazit pouze první část cenového rozpětí a vše ostatní skrýt.

    Přes CSS se to nedá, protože v případě jednoduchého produktu se skryje jeho cena a není tam žádná.

    díky

    #29021

    admin
    Keymaster
    Web

    Nejsem si jist, zda rozumím :-( V případě variant se mi zobrazuje rozmezí ceny např. 120 – 150 Kč, ale žádná samostatná cena? Až když nějakou variantu vyberu, tak se mi dole (nad tlačítkem přidat do košíku) zobrazí konkrétní cena zvolené varianty, ale nevím, co máte na mysli “meta tagy”? Nebyl by nějaký screenshot nebo ideálně odkaz na ukázku? Skrýt půjde určitě cokoli, ale zatím si nejsem jist, co konkrétně zamýšlíte…

    #29030

    Landsman
    Participant
    Web
    <div class="price_block" itemprop="offers" itemscope="" itemtype="http://schema.org/Offer">
        <p class="price"><span class="woocommerce-Price-amount amount">1 855<span class="woocommerce-Price-currencySymbol">Kč</span></span>–<span class="woocommerce-Price-amount amount">1 955<span class="woocommerce-Price-currencySymbol">Kč</span></span></p>
        <meta itemprop="price" content="1855">
        <meta itemprop="priceCurrency" content="CZK">
        <link itemprop="availability" href="http://schema.org/InStock">
    </div>

    Takto to vypadá

    #29032

    admin
    Keymaster
    Web

    Obrázek se nahrát nepodařilo? To ale asi nevadí, pokud jsem to dobře pochopil, tak chcete prostě skrýt vyšší cenu z uvedeného rozhraní? Tedy konkrétně tuto část:

    –<span class="woocommerce-Price-amount amount">1 955<span class="woocommerce-Price-currencySymbol">Kč</span></span>

    Asi bych to zkusil skrýt pomocí filtrů woocommerce_variable_price_html a woocommerce_variable_sale_price_html (pro akční nabídky). Nějaké ukázky jak na to naleznete např. zde a další diskuzi zde (nezkoušel jsem ale ani jedno).

    #29033

    Landsman
    Participant
    Web

    @admin Vyzkouším díky

    #29044

    admin
    Keymaster
    Web

    Dejte prosím vědět i když to (ne)bude fungovat, docela by mě to také zajímalo :-)

    #29127

    Landsman
    Participant
    Web

    @admin Hooky jsou správně.

    Vyřešeno prozatím na výpisu takto:

    
    /**
     * Dont't show variable price range
     */
    //add_filter( 'woocommerce_variable_sale_price_html', 'hide_variable_prices', PHP_INT_MAX, 2 );
    add_filter( 'woocommerce_variable_price_html', 'hide_variable_prices', PHP_INT_MAX, 2 );
    function hide_variable_prices($price, $context)
    {
    
        $display_price         = $context->get_display_price();
        $display_regular_price = $context->get_display_price( $context->get_regular_price() );
    
        if ( $context->get_price() > 0 ) {
    
            if ( $context->is_on_sale() && $context->get_regular_price() ) {
    
                $price= $context->get_price_html_from_to( $display_regular_price, $display_price ) . $context->get_price_suffix();
                $price = apply_filters( 'woocommerce_sale_price_html', $price, $context );
    
            } else {
    
                $price = wc_price( $display_price ) . $context->get_price_suffix();
                $price = apply_filters( 'woocommerce_price_html', $price, $context );
    
            }
    
        } elseif ( $context->get_price() === '' ) {
    
            $price = apply_filters( 'woocommerce_empty_price_html', '', $context );
    
        } elseif ( $context->get_price() == 0 ) {
    
            if ( $context->is_on_sale() && $context->get_regular_price() ) {
    
                $price .= $context->get_price_html_from_to( $display_regular_price, __( 'Free!', 'woocommerce' ) );
                $price = apply_filters( 'woocommerce_free_sale_price_html', $price, $context );
    
            } else {
    
                $price = '<span class="amount">' . __( 'Free!', 'woocommerce' ) . '</span>';
                $price = apply_filters( 'woocommerce_free_price_html', $price, $context );
    
            }
        }
    
        return $price;
    }
    

    Na detailu produktu jsem cenu upravil Javascriptem.

    #29135

    Landsman
    Participant
    Web

    Ještě zasílání javascript, který mi řeší skrývání “from-to” ceny na produktu, pokud je vybrána cena varianty (byly by vidět na stránce 2). Woocommerce tam má naštěstí custom triggery, které jsem využil:

    
    /**
     * Custom js for Woo
     */
    jQuery( function( $ ) {
    
        var product = $("body").hasClass("single-product");
        if(product)
        {
            var productType = $("#main div.product");
    
            /**
             * Variants
             */
            if(productType.hasClass("product-type-variable"))
            {
                $( ".variations_form" ).on( "woocommerce_variation_select_change", function () {
                    // Fires whenever variation selects are changed\
                    
                    $(".price_block").show();
    
                } );
    
                $( ".single_variation_wrap" ).on( "show_variation", function ( event, variation ) {
                    // Fired when the user selects all the required dropdowns / attributes
                    // and a final variation is selected / shown
                    
                    if(variation) {
                        $(".price_block").hide();
                    }
    
                } );
            }
        }
    });
Aktuálně je na stránce zobrazeno 8 příspěvků - 1. až 8. (z celkem 8)

Pokud chcete odpovědět na toto téma, musíte se nejdříve přihlásit.