Query ordinamento menu per custom post types
Ho aggiunto 'supports' => 'page-attributes'
al mio custom post type, e ora ho il meta box per l'ordinamento delle pagine.
Quando uso l'argomento 'sort_column' => 'menu_order'
con get_pages()
sul mio custom post type, tutto si ordina correttamente.
Quindi perché le pagine personalizzate non si ordinano correttamente quando interrogo i post usando query_posts(array('orderby' => 'menu_order'))
E cosa posso fare per farli ordinare secondo il menu order?
Ecco la query che sto usando nel caso qualcuno voglia vederla.
<?php
$current_term = ($wp_query->query_vars['section'] <> '') ? $wp_query->query_vars['section'] : $menu_arr[0];
query_posts(array( 'post_type' => 'module',
'orderby' => 'menu_order',
'tax_query' => array(array( 'taxonomy' => 'section',
'field' => 'slug',
'terms' => $current_term )),
'post_parent' => 0 ));
?>

Ho appena dovuto fare la stessa cosa che stai facendo tu, ecco cosa ho fatto per farlo funzionare:
'supports' => array('title', 'editor', 'thumbnail', 'page-attributes')
Registra il post type con il supporto per gli attributi di pagina. Questo aggiunge il meta box per l'ordinamento del menu alla schermata di modifica. Da lì puoi impostare l'ordine.
Poi esegui la mia query personalizzata:
$args = array(
'numberposts' => -1,
'orderby' => 'menu_order',
'order' => 'ASC',
'post_type' => 'staff'
);
$staff = get_posts($args);
Imposta orderby
su menu_order e order
su ASC. Ricorda che se non imposti un valore in menu_order, questo viene impostato a 0. Quindi tutti i post senza un ordine specificato appariranno per primi.

Grazie, alla fine sono riuscito a farlo funzionare un po' di tempo fa. Ma lo apprezzo! ;)

Nel caso qualcun altro si stia grattando la testa su questo, è la presenza dell'argomento 'order' che è necessaria per farlo funzionare. Avevo impostato 'order_by' => 'menu_order'
e non funzionava finché non ho aggiunto anche 'order' => 'ASC'

Stavo avendo problemi con get_posts
su Wordpress 3.4.1. Non ha iniziato a funzionare finché non sono passato a usare query_posts

nel mio functions.php ho usato questo:
add_action( 'init', 'create_Videos' );
function create_Videos() {
register_post_type('videos', array(
'label' => __('Video'),
'singular_label' => __('Video'),
'public' => true,
'show_ui' => true,
'capability_type' => 'article',
'hierarchical' => true,
'rewrite' => false,
'query_var' => true,
'supports' => array('title', 'editor', 'page-attributes')
));
}
e nel mio tema questo:
$args = array(
'numberposts' => -1,
'orderby' => 'menu_order',
'order' => 'ASC',
'post_type' => 'videos'
);
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
Questo è quello che ha funzionato per me Ciao

sort_column=menu_order
ordina le pagine solo in base all'ordine di scrittura, non all'ordine impostato in visualizza > menu
(tradotto), se vuoi ottenere quell'ordine puoi fare così:
$children = get_pages('child_of='. $topID);
// 'sort_column=menu_order' <-- ordina solo per ordine dei post in modalità scrittura (pagina > modifica) non l'ordine del menu impostato in visualizza > menu
// wp_nav_menu ha ciò di cui abbiamo bisogno, ordiniamo nello stesso modo.
$options = array(
'container' => '',
'echo' => false,
);
$nav = wp_nav_menu($options);
$nav = strip_tags($nav);
$nav = str_replace("\r", '', $nav);
$nav = explode("\n", $nav);
//print_r($nav);
$newChildren = array();
foreach ($nav as $item) {
$item = trim($item);
$run = true;
for ($c = 0; $c < count($children) && run; $c++) {
$child = $children[$c];
if (strcmp($child->post_title, $item) == 0 && !in_array($child, $newChildren)) {
$newChildren[] = $child;
$run = false;
}
}
// Aggiungiamo i figli mancanti nel nav_menu, non sono sicuro del perché non tutti i sotto-figli
// vengano aggiunti al primo figlio qui..(funziona ma non so perché :/)
if ($run == true) {
for ($c = 0; $c < count($children) && run; $c++) {
$child = $children[$c];
if (!in_array($child, $newChildren)) {
$newChildren[] = $child;
}
}
}
}
$children = $newChildren;
