Consultar menu_order en tipos de contenido personalizados

22 jun 2011, 20:38:19
Vistas: 44.3K
Votos: 7

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 ));
?>
4
Comentarios

¿Podrías elaborar sobre no se ordenan correctamente? ¿Cómo se ordenan en ese caso?

Rarst Rarst
23 jun 2011 00:18:40

Es como si la consulta no pudiera encontrar 'menu_order' en los custom posts. Actualmente la consulta está ignorando este argumento.

cnotethegr8 cnotethegr8
23 jun 2011 01:15:45

¿Estás consultando múltiples tipos de contenido? Si haces la misma consulta para páginas nativas, ¿se aplica el menu_order?

Rarst Rarst
23 jun 2011 01:18:32

Es para un único tipo de publicación. Y todos los argumentos son correctos. Actualizaré la pregunta de código con mi consulta.

cnotethegr8 cnotethegr8
23 jun 2011 01:28:08
Todas las respuestas a la pregunta 3
4
16

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.

25 jul 2011 19:48:17
Comentarios

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

cnotethegr8 cnotethegr8
25 jul 2011 23:09:43

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'

jessica jessica
25 jul 2012 02:17:48

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

acorncom acorncom
22 ago 2012 19:12:24

Puedo confirmar - Marzo 2018, todavía falla sin la parte 'order' => 'ASC' así como la cláusula orderby. Extraño, pero ahí lo tienes.

Eric Eric
22 mar 2018 16:01:08
0

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

24 oct 2012 16:16:04
0

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;
22 may 2013 17:56:55