web-dev-qa-db-fra.com

Get_post () avec meta_key lorsque la comparaison est une date

Ceci est similaire, mais plus spécifique, à la question trouvée ici . Cette question suggère l'exemple Wordpress WP_Query , qui est utile, mais ne fonctionne pas pour moi.

Mon code est le suivant:

    $posts = get_posts(array(
        'post_type'         => 'events',
        'posts_per_page'    => -1,
        'meta_key'          => 'from_datetime',
        'meta_value'        => date( "F d, Y g:i a" ), 
        'meta_compare'      => '>',
        'orderby'           => 'meta_value',
        'order'             => 'ASC'
    ));

Les champs personnalisés sont créés avec ACF dans notre blog. Le champ from_datetime se présente comme suit:

April 18, 2017 2:30 pm

J'ai donc traduit cela dans la nomenclature des dates:

date( "F d, Y g:i a" )

Les événements sont un type de publication personnalisé. En gros, je veux montrer les 2 événements à venir qui ne sont PAS passés. Donc, cela est assez proche de l'exemple de la page WP_Query, mais ce qui précède ne fonctionne toujours pas. La requête ne renvoie rien. Je sais que si je supprime les éléments meta_value ci-dessus, il y a quatre événements à montrer qui vont au-delà de "maintenant".

Des idées sur ce que je peux faire mal? La requête semble correcte selon la documentation de WP. Je vous remercie!

3
PKHunter

Je pense que vous avez une erreur dans votre requête. S'il vous plaît essayez ceci:

$posts = get_posts(array(
    'post_type'         => 'events',
    'posts_per_page'    => -1,
    'meta_query'        => array(
        'meta_key'          => 'from_datetime',
        'type'              => 'DATETIME',  // You can also try changing it to TIME or DATE if it doesn't work
        'meta_value'        => date( "F d, Y g:i a" ),
        'meta_compare'      => '>',
    ),
    'orderby'           => 'meta_value',
    'order'             => 'ASC'
));
2
Abdul Awal

Utilisez-vous ACF Pro (par exemple, en utilisant le type de champ "Sélecteur de date et d'heure"), ou l'un des plug-ins qui ajoute un type de champ date/heure au format "normal" ACF (par exemple, Sélecteur de date et d'heure pour la personnalisation avancée Des champs ).

Dans le premier cas, il stocke les valeurs de date/heure dans $wpdb->postmeta comme 2017-04-18 14:30:00, quel que soit le "Format d'affichage" ou le "Format de retour" spécifié dans la définition du champ. Ainsi, vous devriez interroger en tant que:

$posts = get_posts(array(
    'post_type'         => 'events',
    'posts_per_page'    => -1,
    'meta_key'          => 'from_datetime',
    'meta_value'        => date( "Y-m-d h:i:s" ), 
    'meta_compare'      => '>',
    'orderby'           => 'meta_value',
    'order'             => 'ASC'
));

Si vous utilisez l'un des plug-ins qui ajoute un type de champ date/heure à ACF "normal", vous devrez déterminer comment ce plug-in stocke les valeurs et le format meta_value en conséquence.