Query ordinamento menu per custom post types

22 giu 2011, 20:38:19
Visualizzazioni: 44.3K
Voti: 7

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

Approfondisci non ordinare correttamente? Come vengono ordinati in quel caso?

Rarst Rarst
23 giu 2011 00:18:40

È come se la query non riesca a trovare 'menu_order' dai custom post. Attualmente la query sta ignorando l'argomento.

cnotethegr8 cnotethegr8
23 giu 2011 01:15:45

Stai eseguendo la query per più tipi di post? Se esegui la query in quel modo per le pagine native, menu_order viene applicato?

Rarst Rarst
23 giu 2011 01:18:32

È per un singolo tipo di post. E tutti gli argomenti sono corretti. Aggiornerò la domanda sul codice con il mio codice per la query.

cnotethegr8 cnotethegr8
23 giu 2011 01:28:08
Tutte le risposte alla domanda 3
4
16

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.

25 lug 2011 19:48:17
Commenti

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

cnotethegr8 cnotethegr8
25 lug 2011 23:09:43

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'

jessica jessica
25 lug 2012 02:17:48

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

acorncom acorncom
22 ago 2012 19:12:24

Posso confermare - Marzo 2018, ancora non funziona senza la parte 'order' => 'ASC' così come la clausola orderby. Strano, ma ecco qua.

Eric Eric
22 mar 2018 16:01:08
0

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

24 ott 2012 16:16:04
0

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