在 WooCommerce 管理订单列表中显示商品总重量

问题描述 投票:0回答:1

我目前有一个脚本计算并在我的 woocommerce 网站订单页面的单独列中显示每个订单的权重。这很有效,但意味着每次页面加载时都必须重新计算所有内容。

我找到了一个保存订单权重的脚本,但我的 php 知识还不够好,无法结合这两个脚本。这会是什么样子?也就是说,显示保存的重量而不是每次都计算?

保存脚本:

add_action( 'woocommerce_checkout_update_order_meta', 'solhatt_save_weight_order' );
 
function solhatt_save_weight_order( $order_id ) {
    $weight = WC()->cart->get_cart_contents_weight();
    update_post_meta( $order_id, '_cart_weight', $weight );
}

计算脚本:

add_filter( 'manage_edit-shop_order_columns', 'woo_order_weight_column' );
function woo_order_weight_column( $columns ) {
  $columns['total_weight'] = __( 'Weight', 'woocommerce' );
    return $columns;
}

add_action( 'manage_shop_order_posts_custom_column', 'woo_custom_order_weight_column', 2 );
function woo_custom_order_weight_column( $column ) {
    global $post, $woocommerce, $the_order;

    if ( empty( $the_order ) || $the_order->get_id() !== $post->ID )
        $the_order = new WC_Order( $post->ID );

    if ( $column == 'total_weight' ) {
        $weight = 0;
        if ( sizeof( $the_order->get_items() ) > 0 ) {
            foreach( $the_order->get_items() as $item ) {
                if ( $item['product_id'] > 0 ) {
                    $_product = $item->get_product();
                    if ( ! $_product->is_virtual() ) {
                        $weight += $_product->get_weight() * $item['qty'];
                    }
                }
            }
        }
        if ( $weight > 0 ) {
            print $weight . ' ' . esc_attr( get_option('woocommerce_weight_unit' ) );
        } else {
            print 'N/A';
        }
    }
}

我的 php 知识还不够好,我尝试将两者结合起来,但出现了错误......

php wordpress woocommerce metadata orders
1个回答
0
投票

将所有代码(包括第一个函数)替换为以下代码,该代码将直接使用管理订单列表中的“_cart_weight”元数据,以显示格式化的总重量:

add_action( 'woocommerce_checkout_create_order', 'add_order_total_weight_metadata' );
function add_order_total_weight_metadata( $order ) {
    $order->add_meta_data('_cart_weight', intval( WC()->cart->get_cart_contents_weight() ) );
}

add_filter( 'manage_edit-shop_order_columns', 'woo_order_weight_column' );
function woo_order_weight_column( $columns ) {
  $columns['total_weight'] = __( 'Weight', 'woocommerce' );
    return $columns;
}

add_action( 'manage_shop_order_posts_custom_column', 'woo_custom_order_weight_column', 2 );
function woo_custom_order_weight_column( $column ) {
    if ( $column == 'total_weight' ) {
        global $the_order;

        // Get total weight metadata value
        $total_weight = $the_order->get_meta('_cart_weight');

        if ( $total_weight > 0 ) {
            echo wc_format_weight( $total_weight );
        } else {
            _e('N/A', 'woocommerce');
        }
    }
}

代码位于子主题的functions.php 文件中(或插件中)。应该可以。

© www.soinside.com 2019 - 2024. All rights reserved.