web-dev-qa-db-de.com

Get_post () mit meta_key, wenn compare ein Datum ist

Dies ist ähnlich, aber spezifischer als die Frage, die hier zu finden ist . Diese Frage schlägt das Wordpress WP_Query-Beispiel vor, das hilfreich ist, aber für mich nicht funktioniert.

Mein Code lautet wie folgt:

    $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'
    ));

Die benutzerdefinierten Felder werden mit ACF in unserem Blog erstellt. Das Feld from_datetime sieht folgendermaßen aus:

April 18, 2017 2:30 pm

Also habe ich das auf die Datumsnomenklatur übersetzt:

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

Ereignisse sind ein benutzerdefinierter Beitragstyp. Grundsätzlich möchte ich die kommenden 2 Events anzeigen, die NICHT bestanden werden. Das ist also ziemlich ähnlich zu dem Beispiel auf der WP_Query-Seite, aber das Obige funktioniert immer noch nicht. Die Abfrage gibt nichts zurück. Ich weiß, dass es vier Ereignisse gibt, die jenseits des "Jetzt" liegen, wenn ich das meta_value-Zeug oben entferne.

Irgendwelche Gedanken darüber, was ich falsch mache? Die Abfrage scheint gemäß der Dokumentation bei WP korrekt zu sein. Vielen Dank!

3
PKHunter

Ich denke, Sie haben einen Fehler in Ihrer Anfrage. Bitte versuchen Sie dies:

$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

Verwenden Sie ACF Pro (z. B. den Feldtyp "Date and Time Picker") oder eines der Plugins, das "normalem" ACF einen Datums-/Zeitfeldtyp hinzufügt (z. B. Date & Time Picker für Advanced Custom)? Felder ).

In diesem Fall werden Datums-/Zeitwerte in $wpdb->postmeta wie 2017-04-18 14:30:00 gespeichert, unabhängig von dem in der Felddefinition angegebenen "Anzeigeformat" oder "Rückgabeformat". Daher sollten Sie abfragen als:

$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'
));

Wenn Sie eines der Plugins verwenden, das "normalem" ACF einen Datums-/Zeitfeldtyp hinzufügt, müssen Sie herausfinden, wie dieses Plugin Werte speichert und meta_value entsprechend formatiert.