Changement du script d'un widget de booking
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Je suis entrain de créer un site web de réservation en ligne. J'utilise wordpress, plus précisément un thème qui s'appelle Listeo.
Ce thème contient un widget qui permet de rechercher les produits non réservés entre une période X et Y. Cependant le widget est conçu de sorte à retourner les produits qui ne sont réservés pendant aucun jour entre la période X et Y (Similaire aux réservations des hôtels). Je souhaiterai changer le code du widget de sorte à retourner les produits qui ne sont pas réservés pendant au moins un jour entre la période X et Y.
J'ai repéré le fichier .php et les lignes de code de ce widget.
function listeo_date_range_filter( $where ) {
global $wpdb;
$date_range = get_query_var( 'date_range' );
if(!empty($date_range)) :
//TODO replace / with - if first is day - month- year
$dates = explode(' - ',$date_range);
//setcookie('listeo_date_range', $date_range, time()+31556926);
$date_start = $dates[0];
$date_end = $dates[1];
$date_start_object = DateTime::createFromFormat('!'.listeo_date_time_wp_format_php(), $date_start);
$date_end_object = DateTime::createFromFormat('!'.listeo_date_time_wp_format_php(), $date_end);
$format_date_start = esc_sql($date_start_object->format("Y-m-d H:i:s"));
$format_date_end = esc_sql($date_end_object->format("Y-m-d H:i:s"));
// $format_date_start = esc_sql ( date( "Y-m-d H:i:s", strtotime( $wpdb->esc_like( $date_start ) ) ) );
// $format_date_end = esc_sql ( date( "Y-m-d H:i:s", strtotime( $wpdb->esc_like( $date_end ) ) ) );
// //
// $booking_hours = Listeo_Core_Bookings_Calendar::wpk_change_booking_hours( $date_start, $date_end );
// $date_start = $booking_hours[ 'date_start' ];
// $date_end = $booking_hours[ 'date_end' ];
$table_name = $wpdb->prefix . 'bookings_calendar';
$where .= $GLOBALS['wpdb']->prepare( " AND {$wpdb->prefix}posts.ID ".
'NOT IN ( '.
'SELECT listing_id '.
"FROM {$wpdb->prefix}bookings_calendar ".
'WHERE
(( %s > date_start AND %s < date_end )
OR
( %s > date_start AND %s < date_end )
OR
( date_start >= %s AND date_end < %s ))
AND type = "reservation" AND NOT status="cancelled" AND NOT status="expired"
GROUP BY listing_id '.
' ) ', $format_date_start, $format_date_start, $format_date_end, $format_date_end, $format_date_start, $format_date_end );
//var_dump($where);
endif;
return $where;
Merci pour votre aide.
Windows / Chrome 103.0.0.0
- Changement du script d'un widget de booking
- Widget iphone - Guide
- Changer de dns - Guide
- Widget windows 11 - Guide
- Script vidéo youtube - Guide
- C'est quoi un widget - Guide
3 réponses
Bonjour,
Ta question concerne d'avantage les requêtes SQL que le langage PHP ... (je la déplace donc dans le bon forum)
Et pour y répondre, il suffirait d'ajouter/modifier une condition dans le WHERE de ta requête
en utilisant la fonction DATEDIFF()
Un truc du genre
OR ( %s > date_start AND %s < date_end AND DATEFIFF(date_end, date_start) >1 )
Bonjour,
Au temps pour moi.
Merci de ta réponse. Juste pour être sur le code devrait ressembler à ça :
$where .= $GLOBALS['wpdb']->prepare( " AND {$wpdb->prefix}posts.ID ".
'NOT IN ( '.
'SELECT listing_id '.
"FROM {$wpdb->prefix}bookings_calendar ".
'WHERE
(( %s > date_start AND %s < date_end )
OR
( %s > date_start AND %s < date_end AND DATEDIFF(date_end, date_start) >1)
AND type = "reservation" AND NOT status="cancelled" AND NOT status="expired"
GROUP BY listing_id '.
' ) ', $format_date_start, $format_date_start, $format_date_end, $format_date_end, $format_date_start, $format_date_end );
En mettant ce code, la fonction ne retourne plus rien (No result found) :
$where .= $GLOBALS['wpdb']->prepare( " AND {$wpdb->prefix}posts.ID ".
'NOT IN ( '.
'SELECT listing_id '.
"FROM {$wpdb->prefix}bookings_calendar ".
'WHERE
(( %s > date_start AND %s < date_end AND DATEDIFF(date_end, date_start) >1)
AND type = "reservation" AND NOT status="cancelled" AND NOT status="expired"
GROUP BY listing_id '.
' ) ', $format_date_start, $format_date_start, $format_date_end, $format_date_end, $format_date_start, $format_date_end );