2014-06-18 1 views
2

Dans Wordpress, j'ai créé un type de message personnalisé appelé "Evénements" et ajouté dans des champs personnalisés à l'aide de champs personnalisés avancés. Je n'ai que des champs basiques car notre besoin d'un calendrier est fondamental en soi.Tableau de date de requête pour afficher uniquement les événements futurs - PHP

Les champs sont les suivants: Date de début, date de fin, Heure de début, heure de fin, Lieu, Titre

Je suis en train d'interroger les messages avec un tableau qui est essentiellement « Si date de fin est supérieure à la date d'aujourd'hui, puis spectacle des postes".

Le problème est Advanced Custom Fields a un DatePicker intégré qui met en forme les dates comme YYYYMMDD et non YYYY-MM-DD comme le fait PHP. Voici mon code tel qu'il est aujourd'hui:

if (isset($_GET['_m'])) { 

    $current_month = $_GET['_m']; 
    $current_day = date('d'); // the actual day 
    $current_year = $_GET['_y']; 
    $future_year = 2016; 

    $startday = $current_year.$current_month.$current_day; 
    $endday = $future_year.$current_month.$current_day; 

    echo $startday; 
    echo $endday; 

} 
    $args = array(
     'post_type' => 'events', 
    'post_status' => 'publish', 
    'posts_per_page' => '10', 
    'meta_key' => 'event_date_ends', 
    'meta_query' => array( 
       'key' => 'event_date_ends', 
       'compare' => '>=', 
       'value' => $startday, 
       'type' => 'DATE' 
      ), 
    'orderby' => 'meta_value_num', 
    'order' => 'ASC', 
    'paged' => (get_query_var('paged') ? get_query_var('paged') : 1), 
); 

J'ai essayé au moins 20 variations et techniques avec le résultat final étant soit A) tous les « événements » qui sont publiés sont renvoyés ou B) Non « Events » publié sont retournés. J'essaie d'éviter d'utiliser un plugin de calendrier pour diverses raisons principalement parce que la plupart sont encombrants en ressources et aussi le client veut les valeurs de retour énoncées en particulier et je n'ai pas été en mesure de trouver un plugin de calendrier était-ce personnalisable. Visuellement, il est approuvé tel quel, mais les événements passés ne seront pas automatiquement supprimés par eux-mêmes.

MISE À JOUR:

j'ai pu convertir la date Champs personnalisés Avancé pour AAAA-MM-JJ et utilisé ce code mais il est de retour tous les « événements »

$args = array(
     'post_type' => 'events', 
    'post_status' => 'publish', 
    'posts_per_page' => '10', 
    'meta_query' => array(
       'key' => 'event_date_ends', 
       'compare' => '>=', 
       'value' => date(Y-m-d), 
       'type' => 'DATE' 
      ), 
    'orderby' => 'meta_value_num', 
    'order' => 'ASC', 
    'paged' => (get_query_var('paged') ? get_query_var('paged') : 1), 
); 
+0

Pour votre information, vous pouvez modifier le format dans lequel ACF enregistre la date. – pmandell

+0

@pmandell merci. J'ai été capable de faire le changement de format! – svsdnb

Répondre

0

J'ai trouvé le problème réel et j'ai pensé que je le mettrais à jour. La documentation ACF indique utiliser $ today = date ('Ymd') pour comparer les dates, mais vous devez vraiment utiliser current_time ('Ymd'), j'ai donc supprimé le code functions.php que j'avais ajouté et j'ai corrigé le problème plutôt que travailler autour d'elle.

Voilà ma question maintenant

$event1 = current_time('Ymd'); 
    $args = array(
     'post_type' => 'events', 
    'post_status' => 'publish', 
    'posts_per_page' => '10', 
    'meta_query' => array(
     array(
      'key' => 'event_date_ends', 
      'compare' => '>=', 
      'value' => $event1, 
      ) 
      ), 
    'meta_key' => 'event_date_ends', 
    'orderby' => 'meta_value', 
    'order' => 'ASC', 
    'paged' => (get_query_var('paged') ? get_query_var('paged') : 1), 
); 
1

s'avère que je devais juste convertissez ceci via functions.php en timestamp unix et cela a fonctionné.

functions.php

function custom_unixtimesamp ($post_id) { 
    if (get_post_type($post_id) == 'events') { 
    $startdate = get_post_meta($post_id, 'event_date_begins', true); 

     if($startdate) { 
      $dateparts = explode('/', $startdate); 
      $newdate1 = strtotime(date('d.m.Y H:i:s', strtotime($dateparts[1].'/'.$dateparts[0].'/'.$dateparts[2]))); 
      update_post_meta($post_id, 'unixstartdate', $newdate1 ); 
     } 
    } 
} 
add_action('save_post', 'custom_unixtimesamp', 100, 2); 

puis requête

$today = time();  

    $args = array(
     'post_type' => 'events', 
    'post_status' => 'publish', 
    'posts_per_page' => '10', 
    'meta_query' => array(
     array(
      'key' => 'unixstartdate', 
      'compare' => '>=', 
      'value' => $today, 
      ) 
      ), 
    'meta_key' => 'event_date_begins', 
    'orderby' => 'meta_value', 
    'order' => 'ASC', 
    'paged' => (get_query_var('paged') ? get_query_var('paged') : 1), 
); 

Espérons que quelqu'un d'autre peut trouver cela utile.

Questions connexes