WooCommerce Holen Sie sich Artikel-Meta aus allen Bestellungen

Lesezeit: 4 Minuten

Ich versuche, alle Bestellartikel (mit dem Artikel-Meta) für alle abgeschlossenen Bestellungen aus dem WooCommerce-Plugin anzuzeigen. Außerdem möchte ich die Anzeige auf nur 10 Bestellpositionen beschränken. Ich habe herausgefunden, wie ALLE Bestellartikel angezeigt werden, kann aber die Anzahl nicht auf 10 begrenzen. Hier ist der Code, den ich derzeit verwende, um alle Bestellartikel anzuzeigen:

$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;

Dieser Code fragt ALLE abgeschlossenen Bestellungen ab und durchläuft dann ALLE Bestellartikel für jede abgefragte Bestellung. Einige Bestellungen haben möglicherweise mehr als 1 Bestellartikel. Wenn ich also die Beiträge pro Seite auf 10 beschränke und alle diese Bestellungen 5 Bestellartikel haben, werden insgesamt 50 Bestellartikel angezeigt. Ich habe versucht, der foreach-Schleife eine “iterate”-Variable hinzuzufügen, um dies zu begrenzen, aber das durchläuft nur die “5” Bestellartikel für eine Bestellung und NICHT die gesamten “50” Bestellartikel.

Zuerst muss ich alle Bestellartikel mit der $date- und $time-Variablen BESTELLEN (was ich meiner Meinung nach tun kann, indem ich sie mit der Funktion strtotime() in einen Zeitstempel umwandele).

Zweitens möchte ich NUR die ersten 10 Bestellartikel (basierend auf dem Zeitstempel) von Alle Bestellungen anzeigen.

Irgendwelche Ideen, wie man diesen Code ändert, um dies zu ermöglichen?

So etwas sollte die Anzahl der angezeigten Elemente auf 10 begrenzen:

<?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;?>

Wenn ich richtig verstanden habe, wonach du suchst, sollte das reichen.

Ich glaube nicht, dass WordPress Ihnen eine solche Art von Abfrage bietet. Dazu müssen Sie Ihre eigene Logik aufbauen. Hoffe das kann dir helfen…

$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;

1003910cookie-checkWooCommerce Holen Sie sich Artikel-Meta aus allen Bestellungen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy