【问题标题】:Display and save formated dimensions of the product everywhere随处显示和保存产品的格式化尺寸
【发布时间】:2020-08-04 21:25:35
【问题描述】:

Display the weight of cart and order items in WooCommerce@LoicTheAztec 的回答启发,通过用产品尺寸替换产品重量进行了一些更改,我能够在购物车项目和订单项目的任何地方显示项目尺寸。

问题是我不知道如何显示标签或形容词:

西班牙网站的经度 cm x Ancho cm x Alto cm。

非常感谢任何帮助。

// Display the cart item dimensions in cart and checkout pages 
add_filter( 'woocommerce_get_item_data', 'display_custom_item_data_dimensions', 10, 2 ); 
function display_custom_item_data_dimensions( $cart_item_data, $cart_item ) { 
    if ( $cart_item['data']->has_dimensions() > 0 ){ 
        $cart_item_data[] = array( 'name' => __( 'Dimensions', 'woocommerce' ), 'value' => $cart_item['data']->get_dimensions() . ' ' . get_option('woocommerce_dimensions_unit') ); 
    } 
    return $cart_item_data; 
}

// Save and Display the order item dimensions (everywhere) 
add_action( 'woocommerce_checkout_create_order_line_item', 'display_order_item_data_dimensions', 20, 4 ); 
function display_order_item_data_dimensions( $item, $cart_item_key, $values, $order ) { 
    if ( $values['data']->has_dimensions() > 0 ){ 
        $item->update_meta_data( __( 'Dimensions', 'woocommerce' ), $values['data']->get_dimensions() . ' ' . get_option('woocommerce_dimensions_unit') ); 
    } 
}

【问题讨论】:

    标签: php wordpress woocommerce hook-woocommerce dimension


    【解决方案1】:

    首先,get_dimensions() 方法具有显示格式化尺寸的选项,因此您可以使用以下方法更改尺寸格式,以根据需要添加尺寸标签:

    add_filter( 'woocommerce_format_dimensions', 'custom_formated_product_dimentions', 10, 2 );
    function custom_formated_product_dimentions( $dimension_string, $dimensions ){
        $text_domain    = 'woocommerce';
        $dimension_unit = get_option('woocommerce_dimensions_unit');
    
        if ( empty( $dimension_string ) )
            return __( 'N/A', $text_domain );
    
        // Set here your new array of dimensions based on existing keys/values
        $new_dimensions = array(
            __('width', $text_domain)  => $dimensions['width'],
            __('length', $text_domain) => $dimensions['length'],
            __('height', $text_domain) => $dimensions['height'],
        );
    
        $dimensions = array_filter( array_map( 'wc_format_localized_decimal', $new_dimensions ) );
    
        // Loop through new dimensions array adding spanish labels 
        foreach( $dimensions as $key => $dimention ){
            $dimensions[$key] = ucfirst($key) . ' ' . $dimention. ' ' . $dimension_unit;
        }
    
        return implode( ' × ',  $dimensions);
    }
    

    对于西班牙语,您可以使用Loco plugin 翻译字符串,也可以替换:

    $new_dimensions = array(
        __('width', $text_domain)  => $dimensions['width'],
        __('length', $text_domain) => $dimensions['length'],
        __('height', $text_domain) => $dimensions['height'],
    );
    

    作者:

    $new_dimensions = array(
        __('longitud', $text_domain) => $dimensions['width'],
        __('ancho', $text_domain)    => $dimensions['length'],
        __('alto', $text_domain)     => $dimensions['height'],
    );
    

    现在在您的代码中,您将使用get_dimensions( true ) 方法来显示格式化尺寸,如下所示:

    // Display the cart item dimensions in cart and checkout pages
    add_filter( 'woocommerce_get_item_data', 'display_custom_item_data_dimensions', 10, 2 );
    function display_custom_item_data_dimensions( $cart_item_data, $cart_item ) {
        $product =  $cart_item['data'];
    
        if ( $product->has_dimensions() ){
            $cart_item_data[] = array(
                'name' => __( 'Dimensions', 'woocommerce' ),
                'value' => $product->get_dimensions( true ),
            );
        }
        return $cart_item_data;
    }
    
    // Save and Display the order item dimensions (everywhere)
    add_action( 'woocommerce_checkout_create_order_line_item', 'display_order_item_data_dimensions', 10, 4 );
    function display_order_item_data_dimensions( $item, $cart_item_key, $values, $order ) {
        $product =  $values['data'];
    
        if ( $product->has_dimensions() ){
            $item->update_meta_data( __( 'Dimensions', 'woocommerce' ), $product->get_dimensions( true ) );
        }
    }
    

    代码在您的活动子主题(或活动主题)的functions.php 文件中。经过测试并且可以工作。

    注意:由于has_dimensions()是一个返回布尔值的条件方法,它不需要任何其他的条件。

    类似:Rename Length to Diameter in WooCommerce formatted product dimensions output

    【讨论】:

    • 感谢@LoicTheAztec,第二个代码中有一个点和比较错误。
    • 每个单位不显示 (cm)。 longitud 是长度,ancho 是宽度 ` __('longitud', $text_domain) => $dimensions['length'], __('ancho', $text_domain) => $dimensions['width'], __('alto ', $text_domain) => $dimensions['height'],`
    • @Williams 看截图错了...... 每个都显示厘米。如果这个答案回答了你的问题,你可以请accept回答,如果你喜欢/希望你也可以upvote回答,还是谢谢你。
    • 发生了一些奇怪的事情,当我使用您的完整代码时,它没有显示(厘米)。但是,如果您将您的代码与我正在修改的代码结合起来,它会完美运行。同样,非常感谢。
    • @Williams 在最后一个带有 Storefront 主题的 woocommerce 版本中,它运行良好......所以也许还有其他东西正在交互。
    猜你喜欢
    • 2019-04-08
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 2015-08-08
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    相关资源
    最近更新 更多