Ich habe ein WP Blog mit ein paar Seiten und Beiträgen und mehreren Kategorien. Ich möchte eine Schleife schreiben, um an die Beiträge angehängte Bilder (nicht die Seiten) und nur die aus einer bestimmten Kategorie und deren Kinder abzurufen. 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?
Sie müssen zuerst die Beiträge und dann die Anhänge greifen, die den genannten Beiträgen untergeordnet 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 Posts ihrer Eltern tun dies. Sie haben also ein zweistufiges Problem.
post_parent
, der in der Liste enthalten ist, die wir bei unserer ersten Abfrage gefunden habenWenn Sie Bildverknüpfungen von Kategorien und Unterkategorien erhalten möchten, sollten Sie dies 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 );