在 WooCommerce 管理员订单列表的自定义列中显示每个订单项目的库存数量

Show stock quantity per order item in a custom column on WooCommerce admin orders list

我试图在 WooCommerce 管理员订单列表的自定义列中显示每个产品的剩余库存,但没有成功。

我想在 'quantity' 旁边展示它。

Ej。产品 A x 1 (3)

我的代码尝试:

add_filter('manage_edit-shop_order_columns', 'new_order_items_column' );
function new_order_items_column( $order_columns ) {
    $order_columns['order_products'] = "Productos";
    return $order_columns;
}

add_action( 'manage_shop_order_posts_custom_column' , 'new_order_items_column_cnt' );
function new_order_items_column_cnt( $colname ) {
    global $the_order; // the global order object

    if( $colname == 'order_products' ) {

    // get items from the order global object
    $order_items = $the_order->get_items();

    if ( !is_wp_error( $order_items ) ) {
        foreach( $order_items as $order_item ) {

            echo '▪️ ' . $order_item['name'] .' × <a href="' . admin_url('post.php?post=' . $order_item['product_id'] . '&action=edit' ) . '">'. $order_item['quantity'] .'</a><br />';
            
           }
        }

    }
}

有什么建议吗?

您可以使用 get_stock_quantity(),请注意,有变体的产品和不含库存的产品也会被考虑在内

所以你得到:

// Add a Header
function filter_manage_edit_shop_order_columns( $columns ) {
    // Add new column
    $columns['order_products'] = __( 'Products', 'woocommerce' );

    return $columns;
}
add_filter( 'manage_edit-shop_order_columns', 'filter_manage_edit_shop_order_columns', 10, 1 );

// Populate the Column
function action_manage_shop_order_posts_custom_column( $column, $post_id ) {        
    // Compare
    if ( $column == 'order_products' ) {
        // Get an instance of the WC_Order object from an Order ID
        $order = wc_get_order( $post_id );
        
        // Is a WC_Order
        if ( is_a( $order, 'WC_Order' ) ) {
            foreach( $order->get_items() as $item ) {
                // Product ID
                $product_id = $item->get_variation_id() > 0 ? $item->get_variation_id() : $item->get_product_id();
                
                // Get product
                $product = wc_get_product( $product_id );
                
                // Get stock quantity
                $get_stock_quantity = $product->get_stock_quantity();
                
                // NOT empty
                if ( ! empty ( $get_stock_quantity ) ) {
                    $stock_output = ' (' . $get_stock_quantity . ')';
                } else {
                    $stock_output = '';
                }
                
                // Output
                echo '▪ <a href="' . admin_url( 'post.php?post=' . $item->get_product_id() . '&action=edit' ) . '">'.  $item->get_name() . '</a> × ' . $item->get_quantity() . $stock_output . '<br />';
           }
        }
    }
}
add_action( 'manage_shop_order_posts_custom_column' , 'action_manage_shop_order_posts_custom_column', 10, 2 );