Показать количество запасов на единицу заказа в пользовательском столбце в списке заказов администратора WooCommerce

#php #wordpress #woocommerce #product #orders

Вопрос:

Я пытаюсь показать оставшиеся запасы по каждому продукту в пользовательской колонке в списке заказов администратора WooCommerce, но безуспешно.

Я хотел бы показать это рядом с «количеством».

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'] . 'amp;action=edit' ) . '">'. $order_item['quantity'] .'</a><br />';
            
           }
        }

    }
}
 

Есть какие-нибудь советы?

Ответ №1:

Вы можете использовать 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() . 'amp;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 );