web-dev-qa-db-fra.com

Affichage des publications avec uniquement des dates à venir en fonction de la valeur de date de champ personnalisée

J'ai des publications dont la date de début est une valeur de champ personnalisée. J'affiche quelques-uns de ces messages dans ma barre latérale dans l'ordre croissant, de sorte que le message dont la date de début est la plus proche est affiché en premier. C'est ce que j'ai et ça marche très bien:

<?php query_posts('&post_type=events&posts_per_page=5&meta_key=start_date&orderby=meta_value&order=asc'); ?><?php while ( have_posts() ) : the_post(); ?><li><span class="eventtext"><?php the_title(); ?></span>

Mais je me demandais comment puis-je filtrer la requête afin qu’elle n’affiche pas les publications dont la date de début est déjà passée?

J'ai expérimenté ceci:

$today = date('d/m/Y', strtotime('+2 hours'));
      query_posts(array(
      'post_type' => 'events',
      'posts_per_page' => 5,
      'meta_key' => 'start_date',
      'orderby' => 'meta_value',
      'order' => 'ASC',
      'meta_query' => array(
         array(
         'key' => 'start_date',
         'meta-value' => $value,
         'value' => 'start_date',
         'compare' => '>=',
         'type' => 'CHAR'
         )
      )
   ));

Mais il ne montre rien. Une chose à noter est que la valeur de la date de début est enregistrée au format mm/jj/aaaa, mais changer le format de la date $ Today n'a pas aidé non plus.

UPDATE

Alors maintenant, j'ai ceci:

    <?php
$today = date('m/d/Y', strtotime('+2 hours'));
$the_query = new WP_Query( array(
      'post_type' => 'events',
      'posts_per_page' => 5,
      'meta_key' => 'start_date',
      'orderby' => 'meta_value',
      'order' => 'ASC',
      'meta_query' => array(
array(
         'key' => 'start_date',
'meta-value' => 'start_date',
         'value' => $today,
         'compare' => 'DATE',
         'type' => 'CHAR'
))
   ));
?>

Rien ne s'affiche dans la barre latérale.

Remarque: la date est dans ce format car les articles sont enregistrés avec le champ personnalisé start_date dans ce format. J'essaie simplement d'obtenir ce travail, puis je changerai le format de la date en un format plus approprié.

2
Andrew

Pour que cela fonctionne de manière fiable, le format de date dans la base de données doit être yyyy-mm-dd. Le type de comparaison doit être DATE ou NUMERIC. Si vous prenez la date du 25-04-2012 dans son format actuel et que vous la comparez numériquement à la date du 26-04-1986, vous pouvez voir quel sera le problème: 25042012 <26041986

De même, si vous effectuez ces requêtes en plus de votre boucle principale, utilisez une nouvelle instance de WP_Query .

MODIFIER-

il y a eu quelques erreurs que vous n'avez pas corrigées. notez que ceci still ne fonctionnera pas correctement tant que vous n'aurez pas corrigé le format de la date.

<?php
$today = date('m/d/Y', strtotime('+2 hours'));
$the_query = new WP_Query( array(
  'post_type' => 'events',
  'posts_per_page' => 5,
  'meta_key' => 'start_date',
  'orderby' => 'meta_value',
  'order' => 'ASC',
  'meta_query' => array(
  array(
    'key' => 'start_date',
    'value' => $today,
    'compare' => '>=',
    'type' => 'DATE'
  ))
));
?>
4
Milo