Dies ist der Code, mit dem ich Ereignisbeiträge erhalte, deren Datumsmetadaten neuer sind als heute:
<?php
query_posts( array(
'post_type' => 'concerts',
'meta_key' => 'numericdate',
'posts_per_page' => -1,
'orderby' => 'meta_value',
'order' => 'ASC',
'meta_query' => array(
array(
'key' => 'numericdate',
'value' => date('dmY'),
'compare' => '>=',
'type' => 'date'
)
)
) );
if (have_posts()) : ?>
Dies ergab keine Ergebnisse. Das Feld "numericdate" enthält eine Zeichenfolge "ddmmyyyy", daher habe ich erwartet, dass der Vergleich mit einem heutigen Datumswert "dmY" funktioniert. Ich lag falsch. Oder es gibt einen Fehler im obigen Code. Danke für Ihre Hilfe !
Verwenden Sie für diese Art von Abfragen WordPress current_time () .
current_time('mysql')
Gibt dem Server Zeit gemäß den von MySQL akzeptierten Administratoreinstellungenquelle
Ich glaube, das MySQL-Datumsformat sollte JJJJ-MM-TT sein. Ich denke auch, dass orderby meta_value_num sein sollte, sonst werden die Werte als Strings behandelt.
quelle
CAST()
Vorgang zurückgegeben,NULL
wenn Ihre Daten nicht das richtige Format haben. Es akzeptiert auchYYYYMMDD
ohne die Trennzeichen, aber nichtDDMMYYYY
. Ich weiß nicht über dieorderby
- würde es die gegossenen Werte der Meta-Abfrage verwenden?Abgesehen von den Datumsformateinstellungen von MySQL gibt es viele gute Gründe, Bigendian-Formate wie Ymd zu verwenden.
Sie würden denken, dass ein Vergleich der Daten offensichtlich wäre, aber ...
05262011> 01012012
und so weiter. Sie werden viele Probleme verursachen, wenn Sie versuchen, das dmY-Format zu verwenden.
Ich denke auch nicht, dass 'Datum' einer der akzeptierten Parameter für meta_query "Typ" ist. Lassen Sie diesen Parameter weg und verwenden Sie den Zeichenfolgenvergleich, um die besten Ergebnisse zu erzielen.
quelle
Wenn jemand das gleiche Problem hat, schauen Sie sich besser den Filter posts_clauses an .
Sie können die Abfrage SQL selbst bearbeiten.
Dort können Sie den Wert der Datumsspalte konvertieren und die where-Klausel und die orderby-Klausel ändern.
quelle