В последней версии WordPress пропала возможность добавлять menu_order к картинкам, что очень неудобно при необходимости сортировать элементы галереи из приаттаченных к странице или посту картинок.
Поэтому решили предложить следующее решение проблемы: добавить custom field к картинкам с order, по которому в последствии уже сортировать внутри query_posts().
Для этого необходимо добавить следующий код в тему в functions.php.
function image_attachment_add_custom_fields($form_fields, $post) {
$meta_value = get_post_meta($post->ID, 'imageorder', true);
if(!$meta_value):
update_post_meta($post->ID, 'imageorder', 1);
$meta_value = 1;
endif;
$form_fields['imageorder'] = array(
'label' => __('Order'),
'input' => 'text',
'value' => $meta_value,
'helps' => __('Set image order.'),
);
return $form_fields;
}
add_filter('attachment_fields_to_edit', 'image_attachment_add_custom_fields', null, 2);
function image_attachment_save_custom_fields($post, $attachment) {
if(isset($attachment['imageorder'])) {
update_post_meta($post['ID'], 'imageorder', $attachment['imageorder']);
} else {
update_post_meta($post['ID'], 'imageorder', 1);
}
return $post;
}
add_filter('attachment_fields_to_save', 'image_attachment_save_custom_fields', null , 2);
И при выборке картинок уже использовать следующий код:
$args = array(
'post_type' => 'attachment',
'post_parent' => get_the_ID(),
'post_mime_type' => 'image',
'meta_key' => 'imageorder',
'orderby' => 'meta_value_num',
'order' => 'ASC'
);
$posts = get_posts($args);
foreach($posts as $item):
echo wp_get_attachment_image( $item->ID, $size );
endforeach;