Frage menu_order benutzerdefinierte Post-Typen

Ich habe 'supports' => 'page-attributes' zu meinem benutzerdefinierten Post-Typ hinzugefügt, und jetzt habe ich das Meta-Feld für die Seitenreihenfolge.

Wenn ich das Argument 'sort_column' => 'menu_order' mit get_pages() für meinen benutzerdefinierten Post-Typ verwende, wird alles korrekt get_pages() .

Warum werden die benutzerdefinierten Seiten nicht korrekt sortiert, wenn ich die Beiträge mit query_posts(array('orderby' => 'menu_order'))

Und was kann ich tun, um sie durch die Menüfolge zu bestellen?

Hier ist die Abfrage, die ich benutze, wenn jemand sie sehen möchte.

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

Solutions Collecting From Web of "Frage menu_order benutzerdefinierte Post-Typen"

Ich musste das Gleiche tun wie du, hier ist, was ich getan habe, damit das funktioniert:

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

Registrieren Sie den Post-Typ mit Unterstützung von Seitenattributen. Dadurch wird das Meta-Feld für die Menüfolge zum Bearbeitungsbildschirm hinzugefügt. Von dort aus können Sie die Bestellung aufgeben.

Führen Sie dann meine benutzerdefinierte Abfrage aus:

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

setze orderby zu menu_order und order nach ASC. Denken Sie daran, wenn Sie keinen Wert in der Menüreihenfolge setzen, wird er auf 0 gesetzt. Daher erscheinen alle Posts ohne eine Bestellmenge zuerst.

In meiner function.php habe ich folgendes benutzt:

 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') )); } 

und in meinem Thema, dass:

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

Das hat für mich funktioniert

sort_column=menu_order sortiert nur die Seiten sortiert nach ihrer Reihenfolge und nicht die Reihenfolge, die Sie in view > menus (übersetzt) ​​festgelegt haben, wenn Sie möchten, dass Sie das so machen können:

 $children = get_pages('child_of='. $topID); // 'sort_column=menu_order' < -- only sorts by post order in writing mode (page > edit) not the menu order set in view > menus // wp_nav_menu has what we need, let's sort it the same way. $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; } } // Adding the children the nav_menu is lacking, not sure why not all sub-children // are added to the first child here..(works but don't know why :/) if ($run == true) { for ($c = 0; $c < count($children) && run; $c++) { $child = $children[$c]; if (!in_array($child, $newChildren)) { $newChildren[] = $child; } } } } $children = $newChildren;