it-swarm.com.de

Ist es möglich, eine meta_query auf einen bestimmten Beitragstyp in einer Abfrage mit mehreren Beitragstypen anzuwenden?

Ich habe zwei Beitragstypen, Nachrichten und Ereignisse :

  • Eine Nachricht hat keine benutzerdefinierten Felder.
  • Ein Ereignis hat zwei benutzerdefinierte Felder: Startdatum und Enddatum .

Ich möchte Nachrichten und Ereignisse auf derselben Seite anzeigen, idealerweise mit einer einzigen Abfrage.

Eine wichtige Tatsache ist, dass Ereignisse nach Enddatum sortiert werden müssen und dass nur zukünftige oder aktuelle Ereignisse ) Ereignisse müssen angezeigt werden.

Hier sind die Fragen, die ich versuche:

$args = array(
    'post_type' => array( 'news', 'events' ),
    'meta_key' => 'end-date',
    'orderby' => 'meta_value',
    'order' => 'ASC',
    'meta_query' => array(
        array( 
            'key' => 'end-date',
            'value' => date ( 'Ymd' ),
            'type' => 'NUMERIC',
            'compare' => '>='
        )
    )
);

Das funktioniert gut für Ereignisse allein, aber nicht, wenn ich den Beitragstypen Nachrichten hinzufüge.

Das Problem scheint zu sein, dass ich die Parameter 'meta_key' und 'meta_query' angegeben habe, die nur bei Ereignissen vorhanden sind, als Ergebnis alle Nachrichten sind in den Ergebnissen weggelassen.

Meine Frage ist also, gibt es eine Möglichkeit, eine Meta-Abfrage auf einen bestimmten Post-Typ in derselben Abfrage auszurichten?

1
mike23

Sie können Ihrer meta_query ein weiteres Array hinzufügen, um alle Beiträge Ihres zweiten Beitragstyps einzuschließen.

In Ihrem Beispiel haben Sie 2 Beitragstypen

  1. veranstaltungen
  2. nachrichten

Wenn Sie einen meta_key auswählen können, der nur für news existiert, aber für events nicht existiert, gibt diese Gruppe von Argumenten alle Nachrichtenposttypen zurück und filtert weiterhin nach Ereignissen.

$args = array(
    'post_type' => array( 'news', 'events' ),
    'meta_key'  => 'end-date',
    'orderby'   => 'meta_value',
    'order'     => 'ASC',
    'meta_query' => array(
        array( 
          'key'   => 'end-date',
          'value' => date ( 'Ymd' ),
          'type'  => 'NUMERIC',
          'compare' => '>='
        ),
        array(
          'key'      => 'my_unique_key_for_news',
          'compare'  => 'EXISTS'
        ),
        'relation' => 'OR',
    )
);

Der relation => OR ist wichtig. Darin steht, dass Sie Ergebnisse zurückgeben, die zu Ihrem end-dates passen und heute >= sind, OR alle Elemente, die mit dem Schlüssel für news übereinstimmen (das wären alle Nachrichtenelemente).

Auf diese Weise erhalten Sie Informationen zu den meta_values ​​für Ereignisse, geben jedoch alle Ergebnisse für Nachrichten zurück, und der Filter lässt den zweiten Beitragstyp in Ruhe.

3
italiansoda