wake-up-neo.net

WP_Query funktioniert für Anhänge und benutzerdefinierte meta_query nicht wie erwartet

Wenn ich get_posts() wie folgt verwende, erhalte ich eine Reihe von Ergebnissen mit dem Wert 1 für den my_key meta_key:

$posts = get_posts( 
    array( 
        'post_type'  => 'attachment', 
        'meta_key'   => 'my_key', 
        'meta_value' => '1' 
    ) 
);

//this has a bunch of results as expected
print_r($posts);

Wenn ich jedoch eine ähnliche Abfrage mit WP_Query erstelle, erhalte ich ein leeres Ergebnisarray

$args = array(
   'post_type' => 'attachment',
   'meta_query' => array(
       array(
       'key'     => 'my_key',
       'value'   => '1',
       'compare' => '=',
       'type'    => 'BINARY'

      )
   )
);

$query = new WP_Query();
$results = $query->query($args);
//this is empty
print_r($results);

Ich habe ein paar Sorten des Arrays meta_query ausprobiert, ohne Erfolg. Ich denke, dass dies ein Fehler sein könnte, wollte aber sicherstellen, dass ich zuerst etwas verpasst habe.

2
Mike

Übergeben Sie einfach Ihre Argumente an den Konstruktor von WP_Query, da dies sowohl sauberer ist als auch so, wie Sie es gemäß der Codex-Dokumentation der Klasse tun sollen.

Sie sollten Dinge wie diese konstruieren:

$my_key_query_args = array(
   'post_type'   => 'attachment',
   'post_status' => 'inherit',
   'meta_query'  => array(
       array(
           'key'     => 'my_key',
           'value'   => '1',
           'compare' => '=',
           'type'    => 'BINARY'

      )
   )
);

$my_key_query = new WP_Query( $my_key_query_args );

Beachten Sie zweitens den hinzugefügten Parameter post_status meines Arrays. Standardmäßig werden Anhänge mit dem Post-Status "Erben" hinzugefügt, aber WP_Query sucht nach Posts mit dem Status "Veröffentlicht", "Entwurf" oder "Ausstehend". (Siehe auch die Dokumentation dieses Parameters).

Es gibt hier also keinen Fehler, wir haben nur vergessen, die Standardeinstellungen für alle an das Objekt übergebenen Parameter zu überprüfen.

Es gibt einen Hinweis zur Option "Anhang" für den Parameter post_type, der diese Anforderung aufruft:

In der Standardeinstellung von WP_Query wird 'post_status'=>'published' festgelegt, in den Anhängen jedoch standardmäßig 'post_status'=>'inherit'. Daher müssen Sie den Status auf 'inherit' oder 'any' festlegen.

12
EAMann

Ich glaube, Ihr Problem ist, dass Sie versuchen, WP_Query wie get_posts() zu verwenden. Möglicherweise funktioniert die Abfrage, aber Sie können die Ergebnisse nicht sehen. WP_Query gibt ein Abfrageobjekt zurück, das Sie wie folgt durchlaufen:

...
$my_query = WP_Query( $args );
while( $my_query->have_posts() ) : $my_query->the_post();

// do your thing

endwhile;

Beachten Sie auch, dass ich $ my_query verwendet habe. Ich bin ein wenig verwirrt, aber ich glaube, $ query ist eine reservierte Variable von WordPress, und so oder so ist es oft besser, wenn Sie diese Abfrage ein wenig besser lesbar machen (vielleicht event $ attachment_meta_query oder so).

0
mrwweb