dtrz17917 2018-05-24 06:30
浏览 285
已采纳

在不设置变量的情况下设置WooCommerce产品的价格范围

IN woocommerce I would like to be able to put a price range on my simple products without setting a variable product as I don't need that.

See the link below: https://www.tnbloom.com.au/product/memorial-wreath/

For example, instead of the actual price of $45, I would like to replace it by $45 - $120 (without setting variable product).

Any help would be much appreciated.

  • 写回答

1条回答 默认 最新

  • donglingyi4679 2018-05-24 07:17
    关注

    The following code will add a custom price field in the product options pricing settings, to set the max price for your displayed price range. So you will have to set that max price for each product.

    Then it will display on front end a price range, on shop, archives and single product pages, only if the max range field has a price set for it.

    The code:

    // Add a custom field for price range to product in backend
    add_action( 'woocommerce_product_options_pricing', 'add_field_product_options_pricing' );
    function add_field_product_options_pricing() {
        global $post;
    
        echo '<div class="options_group show_if_simple">';
    
        woocommerce_wp_text_input( array(
            'id'            => '_max_price_for_range',
            'label'         => __('Max price for range', 'woocommerce').' ('.get_woocommerce_currency_symbol().')',
            'placeholder'   => __('Set the max price for range', 'woocommerce'),
            'description'   => __('Set the max price for range, to activate it…', 'woocommerce'),
            'desc_tip'      => 'true',
        ));
    
        echo '</div>';
    }
    
    // Save product custom field to database when submitted in Backend
    add_action( 'woocommerce_process_product_meta', 'save_product_options_custom_fields', 30, 1 );
    function save_product_options_custom_fields( $post_id ){
        // Saving custom field value
        if( isset( $_POST['_max_price_for_range'] ) ){
            update_post_meta( $post_id, '_max_price_for_range', sanitize_text_field( $_POST['_max_price_for_range'] ) );
        }
    }
    
    // Frontend: display a price range when the max price is set for the product
    add_filter( 'woocommerce_get_price_html', 'custom_range_price_format', 10, 2 );
    function custom_range_price_format( $price, $product ) {
    
        // Only for simple product type
        if( $product->is_type('simple') ){
            // Get the max price for range
            $max_price = get_post_meta( $product->get_id(), '_max_price_for_range', true );
    
            if( empty($max_price) )
                return $price; // exit
    
            $active_price = wc_get_price_to_display( $product, array( 'price' => $product->get_price() ) );
    
            $price = sprintf( '%s &ndash; %s', wc_price($active_price), wc_price($max_price) );
        }
        return $price;
    }
    

    Code goes in function.php file of your active child theme (or active theme). Tested and works.

    In backend product option settings:

    enter image description here

    Frontend products:

    enter image description here

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度