1. Februar 2024
WordPress Loop – Order by Custom Field
Ich nutze häufig das Plug-in „Custom Field Suite“ um WordPress-Posts weitere Felder hinzuzufügen. Z.B. bei einem Event-Kalender das Feld „startdatum“.
Um alle Posts in chronologischer Reihenfolge auszugeben, also sortiert nach dem „Custom Field“ „startdatum“, habe ich meistens folgenden Code genutzt:
/* ACHTUNG DIESER CODE IST FALSCH! */
$args = array(
'post_type' => 'event',
'meta_query' => array(
array(
'key' => 'startdatum',
'value' => date('Y-m-d'),
'compare' => '>=',
'type' => 'DATE',
),
),
'meta_key' => 'startdatum',
'orderby' => 'meta_value_date',
'order' => 'ASC',
'posts_per_page' => 100,
);
$query = new WP_Query($args);
if ($query->have_posts()) :
while ($query->have_posts()) :
$query->the_post();
echo '<div>'.CFS()->get( 'startdatum' ).'</div>';
Code-Sprache: PHP (php)
Diese Argumente habe ich mehrfach über Google gefunden und auch Chat GPT hat sie genau so formuliert. Das Problem: Sie sind falsch! Die Einträge werden so nicht in der richtigen Reihenfolge ausgegeben.
Z.B. so:
2024-02-15
2024-02-19
2024-02-14
2024-03-15
2024-02-16
2024-02-10
…
Richtig wäre:
2024-02-02
2024-02-03
2024-02-03
2024-02-09
2024-02-10
2024-02-10
…
Nachdem ich hierüber lange mit Chat GPT diskutiert habe 😉 und Chat GPT noch mehrfach den falschen Code ausgegeben hat, sind wir zu folgendem Ergebnis gekommen: Das „orderby“-Argument ist falsch formuliert!
Folgende Schreibweise führt zum gewünschten Ergebnis:
'orderby' => array(
'startdatum' => 'ASC',
),
Code-Sprache: PHP (php)
Mit folgenden Args können können Posts in WordPress nach einem Custom Field sortiert werden:
$args = array(
'post_type' => 'event',
'meta_query' => array(
array(
'key' => 'startdatum',
'value' => date('Y-m-d'),
'compare' => '>=',
'type' => 'DATE',
),
),
'orderby' => array(
'startdatum' => 'ASC',
),
'posts_per_page' => 100,
);
Code-Sprache: PHP (php)
Nächster Artikel