Consultar menu_order en tipos de contenido personalizados
Agregué 'supports' => 'page-attributes'
a mi tipo de contenido personalizado, y ahora tengo la caja meta para el ordenamiento de páginas.
Cuando uso el argumento 'sort_column' => 'menu_order'
con get_pages()
en mi tipo de contenido personalizado, todo se ordena correctamente.
Entonces, ¿por qué las páginas personalizadas no se ordenan correctamente cuando consulto los posts usando query_posts(array('orderby' => 'menu_order'))
¿Y qué puedo hacer para conseguir que se ordenen por el orden del menú?
Aquí está la consulta que estoy usando en caso de que alguien quiera verla.
<?php
// Obtener el término actual o usar el primer elemento del array del menú
$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 ));
?>

Acabo de tener que hacer lo mismo que tú, esto es lo que hice para que funcione:
'supports' => array('title', 'editor', 'thumbnail', 'page-attributes')
Registra el tipo de entrada con soporte para atributos de página. Esto añade el cuadro meta de orden de menú a la pantalla de edición. Desde ahí puedes establecer el orden.
Luego ejecuta mi consulta personalizada:
$args = array(
'numberposts' => -1,
'orderby' => 'menu_order',
'order' => 'ASC',
'post_type' => 'staff'
);
$staff = get_posts($args);
Establece orderby
como menu_order y order
como ASC. Recuerda que si no estableces un valor en menu_order, se establecerá a 0. Así que cualquier entrada sin un orden definido aparecerá primero.

Gracias, al final logré que esto funcionara hace un tiempo. ¡Pero lo agradezco! ;)

En caso de que alguien más se esté rompiendo la cabeza con esto, es necesario incluir el argumento 'order' para que funcione. Yo había establecido 'order_by' => 'menu_order'
y no funcionó hasta que también agregué 'order' => 'ASC'

Tenía problemas con get_posts
en WordPress 3.4.1. No comenzó a funcionar hasta que cambié a usar query_posts

en mi functions.php usé esto:
add_action( 'init', 'create_Videos' );
function create_Videos() {
register_post_type('videos', array(
'label' => __('Videos'),
'singular_label' => __('Video'),
'public' => true,
'show_ui' => true,
'capability_type' => 'article',
'hierarchical' => true,
'rewrite' => false,
'query_var' => true,
'supports' => array('title', 'editor', 'page-attributes')
));
}
y en mi tema esto:
$args = array(
'numberposts' => -1,
'orderby' => 'menu_order',
'order' => 'ASC',
'post_type' => 'videos'
);
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
Esto es lo que funcionó para mí Adiós

sort_column=menu_order
solo ordena las páginas según su orden de escritura, no el orden que estableces en ver > menús
, si deseas eso puedes hacerlo así:
$children = get_pages('child_of='. $topID);
// 'sort_column=menu_order' <-- solo ordena por el orden de publicación en modo edición (página > editar) no por el orden del menú configurado en ver > menús
// wp_nav_menu tiene lo que necesitamos, vamos a ordenarlo de la misma manera.
$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;
}
}
// Añadiendo los hijos que faltan en el nav_menu, no estoy seguro por qué no todos los sub-hijos
// se añaden al primer hijo aquí.. (funciona pero no sé por qué :/)
if ($run == true) {
for ($c = 0; $c < count($children) && run; $c++) {
$child = $children[$c];
if (!in_array($child, $newChildren)) {
$newChildren[] = $child;
}
}
}
}
$children = $newChildren;
