3 votes

Obtenir la somme de toutes les personnes pour toutes les réservations WooCommerce

J'utilise le plugin officiel de réservation woocommerce et j'essaie d'obtenir la quantité de toutes les personnes qui ont réservé un produit.

pour une seule commande, cela ne pose aucun problème :

if ( is_callable( 'WC_booking_Data_Store::get_booking_ids_from_order_id') ) {
        $booking_data = new WC_booking_Data_Store();
        $booking_ids = $booking_data->get_booking_ids_from_order_id( $order->get_id() );
    }
            foreach ( $booking_ids as $booking_id ) {
            $booking = new WC_booking( $booking_id );

            $person_count = array_sum( $booking->get_person_counts() );
            $total_person_count .= 'Booking id: ' . $booking_id . ' Person Count: ' . $person_count . ' ';
        }

mais comment puis-je collecter la somme de toutes les réservations ? J'espère que vous pourrez m'aider

2voto

LoicTheAztec Points 72349

Pour obtenir toutes les réservations "complètes", le nombre de personnes doit être calculé comme suit :

// get all bookings Ids with a status "complete"
$bookings_ids = get_posts( array(
    'posts_per_page' => -1,
    'post_type'      => 'wc_booking', // booking post type
    'post_status'    => 'complete',
    'fields'         => 'ids',
));

$persons_count = 0; // Initializing
$persons_html  = '<table><tr><th>Booking id</th><th>Persons count</th></tr>'; // Initializing

// Loop through booking Ids
foreach ( $bookings_ids as $booking_id ) {
    $booking = new WC_Booking( $booking_id ); // Get the WC_Booking instance object
    $count   = array_sum( $booking->get_person_counts() );

    $persons_count += $count;
    $persons_html  .= '<tr><td>' . $booking_id . '</td><td>' . $count . '</td></tr>';
}
$persons_html .= '<tr><th><strong>Total count</th><td style="color:red">' . $persons_count . '</td></tr>';

// Output
echo $persons_html . '</table>';

Testé et fonctionnel.

Pour l'alléger, vous pouvez le remplacer :

    $booking = new WC_Booking( $booking_id ); // Get the WC_Booking instance object
    $count   = array_sum( $booking->get_person_counts() );

simplement par :

    $count   = array_sum( get_post_meta($booking_id, '_booking_persons', true) );

0voto

Burhan Kashour Points 151

En suivant votre code mis à jour, essayez ceci

<?php
if ( is_callable( 'WC_booking_Data_Store::get_booking_ids_from_order_id') ) {
    $booking_data = new WC_booking_Data_Store();
    $booking_ids = $booking_data->get_booking_ids_from_order_id( $order->get_id() );
}
$total_count_data = array();
$total_count_persons = 0;
foreach ( $booking_ids as $booking_id ) {
    $booking = new WC_booking( $booking_id );
    $person_count = array_sum( $booking->get_person_counts() );
    $total_count_persons+= $person_count;
    $total_count_data[] = array(
            'Booking'   => $booking_id,
            'Person'    => $person_count
        );
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X