php – How to get woocommerce orders with get_posts method in a shortcode
Question
I’m writing shortcode which must show all orders placed by current user. I followed this two guidee to get them:
However shortcode not working. Get the following error on line 31 of my file – Fatal error: Uncaught Error: Call to undefined method WP_Post::get_items().
On line 31 i have this: foreach ( $order->get_items() as $item_id => $item )
I’m relatively new to this, I don’t understand what I’m doing wrong, can anyone help me correct this mistake? I appreciate any help.
My Shortcode
// Start Shortcode.
add_shortcode( 'orders' , 'prc_orders' );
function prc_orders() {
// Get all orders for the current user.
$customer = get_posts(apply_filters('woocommerce_my_account_my_orders_query', array(
'numberposts' => -1,
'meta_key' => '_customer_user',
'meta_value' => get_current_user_id(),
'post_type' => wc_get_order_types('view-orders'),
'post_status' => array_keys(wc_get_order_statuses())
)));
$total_records = count($customer);
$posts_per_page = 5;
$total_pages = ceil($total_records / $posts_per_page);
$paged = ( get_query_var('page') ) ? get_query_var('page') : 1;
$customer_orders = get_posts(array(
'meta_key' => '_customer_user',
'meta_value' => get_current_user_id(),
'post_type' => wc_get_order_types('view-orders'),
'posts_per_page' => $posts_per_page,
'paged' => $paged,
'post_status' => array_keys(wc_get_order_statuses())
));
foreach ( $customer as $order ) {
foreach ( $order->get_items() as $item_id => $item ) {
// Get Order info elements - https://www.businessbloomer.com/woocommerce-easily-get-order-info-total-items-etc-from-order-object/
$order_id = $order->get_id();
$status = $order->get_status();
$date_created = $order->get_date_created()->date('d/m/Y - H:i');
// Get and Loop Over Order Items Variable - https://www.businessbloomer.com/woocommerce-easily-get-product-info-title-sku-desc-product-object/
$product_name = $item->get_name();
echo '<div class="items_orders_card name"> '. $order_id .' '. $product_name .' '. $status .' '. $date_created .' </div>';
}}
?><div class="pagination"><?php
$args = array(
'base' => '%_%',
'format' => '?pagina=%#%',
'total' => $total_pages,
'current' => $paged,
'show_all' => False,
'end_size' => 5,
'mid_size' => 5,
'prev_next' => True,
'prev_text' => __('« Previous'),
'next_text' => __('Next »'),
'type' => 'plain',
'add_args' => False,
'add_fragment' => ''
);
echo paginate_links($args);
?></div><?php
} // End Shortcode
0
2 years
2022-04-16T13:13:19-05:00
2022-04-16T13:13:19-05:00 0 Answers
0 views
0
Leave an answer