it-swarm.com.de

Wie führe ich WP_Query aus, um Beiträge nur aus einer bestimmten Kategorie abzurufen?

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?

2
aalaap

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,
    ));
}
1
TheDeadMedic

Anhangs-Posts haben keine Kategorien, die Posts ihrer Eltern tun dies. Sie haben also ein zweistufiges Problem.

  • Finde die IDs der Posts vom Typ post in der Kategorie (60?)
  • Suchen Sie die Anhänge mit einem post_parent, der in der Liste enthalten ist, die wir bei unserer ersten Abfrage gefunden haben
1
Tom J Nowell

Wenn 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 );
0
Alexei Isaenko