Interogare menu_order pentru tipuri de postări personalizate

22 iun. 2011, 20:38:19
Vizualizări: 44.3K
Voturi: 7

Am adăugat 'supports' => 'page-attributes' la tipul meu de postare personalizată și acum am caseta meta pentru ordonarea paginilor.

Când folosesc argumentul 'sort_column' => 'menu_order' cu get_pages() pe tipul meu de postare personalizată, totul se ordonează corect.

Atunci de ce paginile personalizate nu se ordonează corect când interoghez postările folosind query_posts(array('orderby' => 'menu_order'))

Și ce pot face pentru a le ordona după ordinea din meniu?

Iată interogarea pe care o folosesc în cazul în care cineva dorește să o vadă.

<?php 
    // Obține termenul curent sau folosește primul element din array-ul meniului
    $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
Comentarii

Detaliați nu sunt ordonate corect? Cum sunt sortate în acest caz?

Rarst Rarst
23 iun. 2011 00:18:40

Este ca și cum interogarea nu poate găsi 'menu_order' din postările personalizate. Interogarea ignoră în prezent argumentul.

cnotethegr8 cnotethegr8
23 iun. 2011 01:15:45

Interoghezi mai multe tipuri de postări? Dacă faci interogarea în acest mod pentru paginile native, se aplică menu_order?

Rarst Rarst
23 iun. 2011 01:18:32

Este pentru un singur tip de postare. Și toate argumentele sunt corecte. Voi actualiza întrebarea cu codul meu pentru interogare.

cnotethegr8 cnotethegr8
23 iun. 2011 01:28:08
Toate răspunsurile la întrebare 3
4
16

Tocmai am trebuit să fac același lucru ca tine, iată ce am făcut pentru a funcționa:

'supports' => array('title', 'editor', 'thumbnail', 'page-attributes')

Înregistrează tipul de postare cu suport pentru atributele de pagină. Aceasta adaugă caseta meta pentru ordonare în meniu pe ecranul de editare. De acolo poți stabili ordinea.

Apoi rulează interogarea personalizată:

$args = array(
    'numberposts' => -1,
    'orderby' => 'menu_order',
    'order' => 'ASC',
    'post_type' => 'staff'
);
$staff = get_posts($args);

Setează orderby la menu_order și order la ASC. Reține că dacă nu setezi o valoare pentru ordonarea în meniu, aceasta va fi implicit 0. Astfel, orice postări fără ordine setată vor apărea primele.

25 iul. 2011 19:48:17
Comentarii

Mulțumesc, am reușit să rezolv problema acum ceva timp. Dar apreciez ajutorul! ;)

cnotethegr8 cnotethegr8
25 iul. 2011 23:09:43

În cazul în care cineva se mai zbate cu această problemă, trebuie să știți că argumentul 'order' este obligatoriu pentru ca funcția să funcționeze. Am setat 'order_by' => 'menu_order' și nu a funcționat până când nu am adăugat și 'order' => 'ASC'

jessica jessica
25 iul. 2012 02:17:48

Am avut probleme cu get_posts în Wordpress 3.4.1. Nu a funcționat decât după ce am trecut la utilizarea query_posts

acorncom acorncom
22 aug. 2012 19:12:24

Pot confirma - martie 2018, încă nu funcționează fără partea 'order' => 'ASC' precum și clauza orderby. Ciudat, dar, așa stau lucrurile.

Eric Eric
22 mar. 2018 16:01:08
0

în functions.php am folosit acest cod:

add_action( 'init', 'create_Videos' );
function create_Videos() {
    register_post_type('videos', array(
        'label' => __('Videoclipuri'), // Videoclipuri
        'singular_label' => __('Videoclip'), // Videoclip
        'public' => true,
        'show_ui' => true,
        'capability_type' => 'article',
        'hierarchical' => true,
        'rewrite' => false,
        'query_var' => true,
        'supports' => array('title', 'editor', 'page-attributes')
    ));
}

și în tema mea acest cod:

    $args = array(
        'numberposts' => -1,
        'orderby' => 'menu_order',
        'order' => 'ASC',
        'post_type' => 'videos'
    );
    $loop = new WP_Query( $args );
    while ( $loop->have_posts() ) : $loop->the_post();

Asta a funcționat pentru mine La revedere

24 oct. 2012 16:16:04
0

sort_column=menu_order sortează paginile doar în funcție de ordinea lor în modul de editare, nu în funcție de ordinea stabilită în view > meniuri (tradus), dacă doriți asta puteți face astfel:

$children = get_pages('child_of='. $topID); 

// 'sort_column=menu_order' <-- sortează doar după ordinea postărilor în modul de editare (pagina > editare) nu după ordinea din meniu setată în view > meniuri
// wp_nav_menu are ceea ce avem nevoie, să le sortăm în același mod.
$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;
        }
    }

    // Adăugarea copiilor pe care nav_menu le lipsește, nu sunt sigur de ce nu toți sub-copiii 
    //  sunt adăugați la primul copil aici..(funcționează dar nu știu de ce :/)
    if ($run == true) {
        for ($c = 0; $c < count($children) && run; $c++) {              
            $child = $children[$c];     
            if (!in_array($child, $newChildren)) {
                $newChildren[] = $child;
            }
        }           
    }
}
$children = $newChildren;
22 mai 2013 17:56:55