Sortiere get_children nach menu_order

Ich benutze die jQuery Karussell Galerie und leider funktioniert es nicht mit WPs neuer v3.5 Galerie Bestellung. Wenn der Client Änderungen an den Bildern vornimmt, werden diese Änderungen nicht in der Front-End-Galerie widergespiegelt. Das Plugin wird leider nicht mehr gepflegt. Also get_children ich ein und kann sehen, dass get_children .

Ich sehe es:

 $attachments = get_children( array( 'post_parent' => $id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'orderby' => 'menu_order' ) ); 

Und das:

 $js = array(); foreach ( $attachments as $id => $attachment ) { $image = wp_get_attachment_image_src($id, "full"); // $image = the_attachment_link( $attachment->ID , false ); $js[] = "{url: '" . $image[0] . "', title: '".addslashes($attachment->post_title)."', caption: '".addslashes(remove_brs($attachment->post_excerpt))."', description: '".addslashes(remove_brs($attachment->post_content))."'}"; } $output .= join(",\n", $js); $output .= "];\n";` 

Ich habe hier und anderswo gesehen, dass get_posts dem Parameter orderby orderby orderby , also habe ich diesen Versuch gemacht:

 $post_img_args = array( 'post_type' => 'attachment', 'numberposts' => -1, 'post_status' =>'any', 'post_parent' => $post->ID, 'orderby' => 'menu_order', 'post_mime_type' => 'image' ); $attachments = get_posts($post_img_args); 

Und in der obigen foreach statement habe ich die Variable $image durch ersetzt

 $image = the_attachment_link( $attachment->ID , false ); 

Dies zerstörte die Galerie am vorderen Ende. (Eine kurze Anmerkung, dass die Deaktivierung des Plugins und die Anzeige auf der Vorderseite die Bildordnung in Ordnung zeigt, also glaube ich, dass es sich auf den obigen Code und die Ausgabe bezieht).

Jede Einsicht oder Anleitung wird geschätzt. Vielen Dank.

Solutions Collecting From Web of "Sortiere get_children nach menu_order"

Nach WordPress 3.5 enthalten Gallerie-Shortcodes jetzt standardmäßig die Bild-IDs. Wie dies [gallery ids="729,732,731,720"] die auch die Reihenfolge hält, so öffnen Sie die Plugin-Datei namens carousel-gallery-jquery.php und ersetzen Sie diese Zeile: (um Linie 140)

 $attachments = get_children( array('post_parent' => $id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) ); 

mit diesem:

 if ( isset($include) && !empty($include) ) { $_attachments = get_posts( array('include' => $include, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) ); $attachments = array(); foreach ( $_attachments as $key => $val ) { $attachments[$val->ID] = $_attachments[$key]; } } elseif ( isset($exclude) && !empty($exclude) ) { $attachments = get_children( array('post_parent' => $id, 'exclude' => $exclude, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) ); } else { $attachments = get_children( array('post_parent' => $id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) ); } 

dann fügen Sie an der Spitze dieser function in Zeile 121 Folgendes hinzu:

 if ( ! empty( $attr['ids'] ) ) { // 'ids' is explicitly ordered, unless you specify otherwise. if ( empty( $attr['orderby'] ) ) $attr['orderby'] = 'post__in'; $attr['include'] = $attr['ids']; } 

und du solltest in Ordnung sein 🙂