Заказ меню запроса пользовательские типы записей
Я добавил 'supports' => 'page-attributes'
в свой пользовательский тип публикации, и теперь у меня есть мета-поле для заказа страниц.
Когда я использую аргумент 'sort_column' => 'menu_order'
с get_pages()
в моем пользовательском типе записи, все упорядочивается правильно.
Так почему же пользовательские страницы не упорядочиваются должным образом, когда я запрашиваю сообщения с помощью query_posts(array('orderby' => 'menu_order'))
И что я могу сделать, чтобы заказать их по порядку меню?
Вот запрос, который я использую, если кто-нибудь захочет его увидеть.
<?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 ));
?>
3 answers
Мне просто пришлось сделать то же самое, что и вам, вот что я сделал, чтобы это заработало:
'supports' => array('title', 'editor', 'thumbnail', 'page-attributes')
Зарегистрируйте тип записи с поддержкой атрибутов страницы. Это добавит мета-поле порядок меню на экран редактирования. Оттуда вы можете оформить заказ.
Затем запустите мой пользовательский запрос:
$args = array(
'numberposts' => -1,
'orderby' => 'menu_order',
'order' => 'ASC',
'post_type' => 'staff'
);
$staff = get_posts($args);
Установите orderby
в menu_order и order
в ASC. Помните, что если вы не зададите значение в порядке меню, оно установит его равным 0. Таким образом, любые сообщения без набора заказов будут появляться первыми.
В моем functions.php я использовал это:
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')
));
}
И в моей теме это:
$args = array(
'numberposts' => -1,
'orderby' => 'menu_order',
'order' => 'ASC',
'post_type' => 'videos'
);
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
Это то, что сработало для меня Пока
sort_column=menu_order
сортирует страницы только в соответствии с их порядком в письменной форме, а не в порядке, установленном в view > menus
(переведено), если вы хотите, чтобы это было так:
$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;