J'aimerais vraiment que mes images s'affichent de la même manière que je les ai commandées dans le navigateur de média. Qu'est-ce que je fais mal?
$images =& get_children( array('post_parent' => $post->ID,
'post_type' => 'attachment',
'post_mime_type' => 'image',
'orderby' => 'menu_order',
'order' => 'asc' ));
a) Si vous avez réorganisé les images sous le chargé sur ce message dans le navigateur multimédia, alors ils devraient avoir menu_order>0
et vous pouvez obtenir cet ordre avec
'orderby' => 'menu_order',
'order' => 'asc'
b) Si vous ne l'avez pas encore fait, menu_order=0
pour toutes ces images et vous devrez utiliser
'orderby' => 'ID',
'order' => 'asc'
pour obtenir le même ordre (ou date asc).
Une solution pour les deux cas pourrait être la suivante, en SQL pur:
... ORDER BY menu_order ASC, ID ASC
Si tu essayes
'orderby' => 'menu_order ID',
'order' => 'asc'
tu auras
... ORDER BY menu_order, ID ASC
Étant donné que get_children()
utilise get_posts()
, il existe certaines restrictions sur la manière dont des champs supplémentaires peuvent être ajoutés aux paramètres orderby
et order
.
Vous pouvez également utiliser votre requête personnalisée, où vous avez le contrôle total sur le double ordre:
$sql="SELECT {$wpdb->posts}.*
FROM {$wpdb->posts}
WHERE {$wpdb->posts}.post_parent = %d
AND ({$wpdb->posts}.post_mime_type LIKE 'image/%%')
AND {$wpdb->posts}.post_type = 'attachment'
AND ({$wpdb->posts}.post_status <> 'trash' AND {$wpdb->posts}.post_status <> 'auto-draft')
ORDER BY {$wpdb->posts}.menu_order ASC,{$wpdb->posts}.ID ASC";
$images=$wpdb->get_results($wpdb->prepare($sql,$post->ID));