J'ai un WP blog avec quelques pages et messages et plusieurs catégories. Je veux écrire une boucle pour récupérer des images attachées aux messages (pas les pages) et uniquement celles d'une catégorie spécifique et ses enfants. L'identifiant de la catégorie est 60.
C'est l'appel WP_Query:
$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'
) );
Mais je n'ai rien!
Qu'est-ce que je fais mal?
Vous devez d'abord saisir les messages, puis les pièces jointes qui sont les enfants de ces messages.
$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,
));
}
Les publications en pièce jointe n'ont pas de catégories, les publications de leurs parents en ont, donc vous avez un problème en deux étapes.
post_parent
figurant dans la liste que nous avons trouvée dans notre première requête.Si vous souhaitez obtenir des liens d’image à partir de catégories et de sous-catégories, vous devez utiliser ceci:
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 );