#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 );