Я пытаюсь отобразить все элементы заказа (с Item Meta) для всех завершенных заказов из плагина WooCommerce. Я также хочу ограничить отображение только 10 элементами заказа. Я выяснил, как отображать ВСЕ позиции заказа, но не может ограничить число до 10. Вот код, который я использую для отображения всех позиций заказа:
$args = array( 'post_type' => 'shop_order', 'post_status' => 'publish', 'posts_per_page' => -1, 'tax_query' => array( array( 'taxonomy' => 'shop_order_status', 'field' => 'slug', 'terms' => array('completed') ) ) ); $loop = new WP_Query( $args ); while ( $loop->have_posts() ) : $loop->the_post(); $order_id = $loop->post->ID; $order = new WC_Order($order_id); foreach( $order->get_items() as $item ) { $date = $item['Booking Date']; $time = $item['Booking Time']; $fname = $item['First Name - First Name']; $church = $item['Church Information - Church Name']; $city = $item['Church Information - City']; $state = $item['Church Information - State']; ?> <div class="wc-upcoming-booking"> <div class="wc-upcoming-time"> <span class="upcoming-hour"><?php echo $time; ?></span> <span class="upcoming-date"><?php echo $date; ?></span> </div> <div class="wc-upcoming-details"> <?php echo $fname . ', ' . $church . ', ' . $city . ', ' . $state; ?> </div> </div> <?php } endwhile;
Этот код запрашивает ВСЕ завершенные заказы, а затем циклически перебирает ВСЕ позиции заказа для каждого запрошенного ордера. В некоторых заказах может быть более одного элемента заказа, поэтому, если я ограничиваю количество сообщений на странице до 10, и все эти заказы имеют 5 предметов заказа, чем у меня будет отображаться 50 отображаемых позиций заказа. Я попытался добавить переменную «итерация» в цикл foreach, чтобы ограничить это, но это только происходит через позиции «5» для одного ордера, а НЕ – «50» позиций заказа.
Во-первых, мне нужно ЗАКАЗАТЬ все позиции заказа по переменной $ date и $ time (которую, я считаю, могу сделать, преобразов их в временную метку, используя функцию strtotime ()).
Во-вторых, я хотел бы отображать ТОЛЬКО первые 10 пунктов заказа (на основе метки времени) из всех ордеров.
Любые идеи о том, как изменить этот код, чтобы это можно было сделать?
Что-то вроде этого должно ограничивать количество отображаемых предметов до 10:
<?php $args = array( 'post_type' => 'shop_order', 'post_status' => 'publish', 'posts_per_page' => 10, 'tax_query' => array( array( 'taxonomy' => 'shop_order_status', 'field' => 'slug', 'terms' => array('completed') ) ) ); $orders=get_posts($args); $i=0; foreach($orders as $o): if($i>10){ break; } $order_id = $o->ID; $order = new WC_Order($order_id); foreach( $order->get_items() as $item ): if($i>10){ break; } $i++; $date = $item['Booking Date']; $time = $item['Booking Time']; $fname = $item['First Name - First Name']; $church = $item['Church Information - Church Name']; $city = $item['Church Information - City']; $state = $item['Church Information - State']; ?> <div class="wc-upcoming-booking"> <div class="wc-upcoming-time"> <span class="upcoming-hour"><?php echo $time; ?></span> <span class="upcoming-date"><?php echo $date; ?></span> </div> <div class="wc-upcoming-details"> <?php echo $fname . ', ' . $church . ', ' . $city . ', ' . $state; ?> </div> </div> <?php endforeach; endforeach;?>
Если я правильно понимаю, что вы ищете, это должно сделать трюк.
Я не думаю, что wordpress предоставляет вам такой тип запроса. Для этого вам нужно построить свою собственную логику. Надеюсь, это может помочь вам …
$args = array( 'post_type' => 'shop_order', 'post_status' => 'publish', 'posts_per_page' => -1, 'tax_query' => array( array( 'taxonomy' => 'shop_order_status', 'field' => 'slug', 'terms' => array('completed') ) ) ); $count = 0; $loop = new WP_Query( $args ); while ( $loop->have_posts() ) : $loop->the_post(); $order_id = $loop->post->ID; $order = new WC_Order($order_id); foreach( $order->get_items() as $item ) { if( $count > 10){ break 2; //break both loops } $count++; $date = $item['Booking Date']; $time = $item['Booking Time']; $fname = $item['First Name - First Name']; $church = $item['Church Information - Church Name']; $city = $item['Church Information - City']; $state = $item['Church Information - State']; ?> <div class="wc-upcoming-booking"> <div class="wc-upcoming-time"> <span class="upcoming-hour"><?php echo $time; ?></span> <span class="upcoming-date"><?php echo $date; ?></span> </div> <div class="wc-upcoming-details"> <?php echo $fname . ', ' . $church . ', ' . $city . ', ' . $state; ?> </div> </div> <?php } endwhile;