web-dev-qa-db-fra.com

Faire en sorte que les images apparaissent dans le même ordre que dans le navigateur multimédia à l’aide d’obtenir les enfants?

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' ));
1
rob-gordon

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));
1
birgire