it-swarm.com.de

$ wpdb fragt einen Beitragstyp innerhalb eines bestimmten Taxonomiebegriffs ab, während Beiträge nach benutzerdefiniertem Metawert sortiert werden?

Ich habe einen benutzerdefinierten Beitragstyp 'event', ein benutzerdefiniertes Metafeld 'event_date' und eine benutzerdefinierte Taxonomie 'locations'.

Ich möchte $ wpdb abfragen, um Beiträge auf diese Weise abzurufen

  1. posts müssen vom Post-Typ 'Event' sein
  2. 'Ereignisse' müssen mit einem bestimmten $ location-Begriff in der 'locations'-Taxonomie verknüpft werden
  3. die Ergebnisse müssen nach dem benutzerdefinierten Metawert 'event_date' (der eigentlich ein Datum im Format yymmdd ist) im Vergleich zum heutigen aktuellen Datum sortiert werden

Ich versuche es mit den folgenden Abfrageparametern (ich kann den $ location-Wert - entweder ID oder Slug - korrekt abrufen und an diese Abfrage übergeben):

SELECT  $wpdb->posts.* 
LEFT JOIN $wpdb->postmeta ON($wpdb->posts.ID = $wpdb->postmeta.post_id)
LEFT JOIN $wpdb->term_relationships ON($wpdb->posts.ID = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy ON($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
LEFT JOIN $wpdb->terms ON($wpdb->term_taxonomy.term_id = $wpdb->terms.term_id)
FROM    $wpdb->posts, $wpdb->postmeta
WHERE   $wpdb->posts.ID = $wpdb->postmeta.post_id 
AND     $wpdb->terms.term_id = $location
AND     $wpdb->term_taxonomy.taxonomy = 'locations'
AND     $wpdb->posts.ID = $wpdb->postmeta.post_id 
AND     $wpdb->posts.post_type = 'event'
AND     $wpdb->posts.post_status = 'publish' 
AND     $wpdb->postmeta.meta_key = 'event_date'
AND     $wpdb->postmeta.meta_value > NOW()
ORDER   BY $wpdb->postmeta.meta_value ASC
LIMIT   $numberofposts

die Abfrage funktioniert nicht. Wenn ich den JOIN-Teil und den Taxonomieteil entferne, funktioniert es und ordnet alle Ergebnisse, indem ich das 'event_date'-Meta mit dem NOW () -Datum vergleiche.

Ich denke, ich mache es falsch mit dem Taxonomieteil ...

Wie empfohlen, habe ich versucht, eine WP_Query anstelle einer $ wpdb-Abfrage durchzuführen:

$args = array(
               'post_type' => 'event',
               'tax_query' => array(
                                     array(
                                            'taxonomy' => 'locations',
                                            'field' => 'id',
                                            'terms' => $location // location term id
                                           )
                                    ),
               'meta_key' => 'event_date',  // this meta field stores event date in yymmdd format
               'meta_value' => $today,  // this would be today's date in yymmdd format
               'meta_compare' => '>=',
               'posts_per_page' => $numberofposts, // this variable stores the number of posts I want to get
               'orderby'=> 'meta_value_num'


  );

In letzterem Fall gibt die Abfrage jedoch ALLE Posts unter dem angegebenen post_type zurück, unabhängig von anderen Angaben in $ args, einschließlich der Sortierreihenfolge

Ich habe versucht, meta_query anstelle von meta_key zu verwenden, aber das Ergebnis ändert sich nicht

1
unfulvio

Sie haben einen Tippfehler in orderby und meta_value_num wird nur als orderby-Wert verwendet. Versuchen Sie Folgendes:

$args = array(
    'post_type' => 'event',
    'tax_query' => array(
        array(
            'taxonomy' => 'locations',
            'field' => 'id',
            'terms' => $location // location term id
        )
    ),
    'meta_key' => 'event_date',  // this meta field stores event date in yymmdd format
    'meta_value' => $today,  // this would be today's date in yymmdd format
    'meta_compare' => '>=',
    'posts_per_page' => $numberofposts, // this variable stores the number of posts I want to get
    'orderby'=> 'meta_value_num'
);
2
Milo