Wie führe ich WP_Query aus, um Anhänge zu Posts nur aus einer bestimmten Kategorie abzurufen?

Ich habe einen WP Blog mit ein paar Seiten und Posts und mehreren Kategorien. Ich möchte eine Schleife schreiben, um Bilder zu erhalten, die an die Beiträge angehängt sind (nicht die Seiten) und nur die aus einer bestimmten Kategorie und ihren Kindern. Die Kategorie-ID ist 60.

Dies ist der WP_Query-Aufruf:

$my_query = new WP_Query( array( 'post_type' => 'attachment', 'cat' => '60', 'post_mime_type' =>'image', 'posts_per_page' => $batch_size, 'nopaging' => false, 'post_status' => 'all', 'post_parent' => null, 'meta_key' => 'my_hash', 'orderby' => 'meta_value' ) ); 

Aber ich bekomme nichts!

Was mache ich falsch?

Solutions Collecting From Web of "Wie führe ich WP_Query aus, um Anhänge zu Posts nur aus einer bestimmten Kategorie abzurufen?"

Sie müssen zuerst die Posts packen und dann die Attachments, die untergeordnete Posts sind.

 $my_query = new WP_Query( array( 'meta_key' => 'my_hash', 'nopaging' => true, 'orderby' => 'meta_value', 'fields' => 'ids', 'cat' => '60', )); if ( $post_ids = $my_query->get_posts() ) { $post_ids = implode( ',', $post_ids ); $atts_ids = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE post_parent IN($post_ids) AND post_type = 'attachment'" ); $my_query->query( array( 'posts_per_page' => $batch_size, 'post_mime_type' =>'image', 'post_status' => 'all', 'post_type' => 'attachment', 'post__in' => $atts_ids, )); } 

Anhangs-Posts haben keine Kategorien, die Post-Posts ihrer Eltern tun das, also hast du ein zweistufiges Problem.

  • Finde die IDs der Beiträge vom Typ post in der Kategorie (60?)
  • Suchen Sie nach den Anlagen mit einem post_parent in der Liste, die wir in unserer ersten Abfrage gefunden haben

Wenn Sie Bildlinks für Kategorien und Unterkategorien erhalten möchten, sollten Sie folgendes verwenden:

  global $wpdb; $id = 60; // your cat id $myrows = $wpdb->get_results( "SELECT p2.ID, p2.guid ". "FROM $wpdb->posts as p1, $wpdb->posts as p2, $wpdb->term_relationships as tr, $wpdb->term_taxonomy as tt ". "WHERE ". "((tr.term_taxonomy_id = $id AND ". "p1.ID = tr.object_id) OR ". "(tt.parent = $id AND ". "tr.term_taxonomy_id = tt.term_taxonomy_id AND ". "p1.ID = tr.object_id)) AND ". "p1.post_status = 'publish' AND ". "p2.post_parent = p1.ID AND ". "p2.post_mime_type LIKE 'image%'". "GROUP BY p2.ID". "< = 5". // you able to limit the db answer "", ARRAY_A ); print_r( $myrows );