Как вывести список родительских страниц по алфавиту WordPress?
Добрый день, все перековырял в интернете, пробовал менять что то в коде но не выходит
Код такой:
function devise_list_child_pages() { global $post; if ( is_page() && $post->post_parent ) $childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->post_parent . '&echo=0' ); else $childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->ID . '&echo=0' ); if ( $childpages ) { $string = '<ul>' . $childpages . '</ul>'; } return $string; } add_shortcode('devise_childpages', 'devise_list_child_pages'); |
function devise_list_child_pages() { global $post; if ( is_page() && $post->post_parent ) $childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->post_parent . '&echo=0' ); else $childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->ID . '&echo=0' ); if ( $childpages ) { $string = '<ul>' . $childpages . '</ul>'; } return $string; } add_shortcode('devise_childpages', 'devise_list_child_pages');
Прописал в функции в тему Wordpress и вывел шотрткодом на страницу список, но не получается отсортировать по алфавиту вывод, может кто знает подскажите пожалуйста. Страница где список
Дополнительно:
все перековырял в интернете
точно все?
пробовал менять что то в коде
например параметр сортировки?
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Если нужно вывести только родительские страницы и отсортировать их по алфавиту, используйте
get_pages()илиWP_Queryсpost_parent => 0. Для простого спискаget_pages()подходит лучше.$pages = get_pages([ 'parent' => 0, 'sort_column' => 'post_title', 'sort_order' => 'ASC', 'post_status' => 'publish', ]); if ($pages) { echo '<ul class="parent-pages">'; foreach ($pages as $page) { printf( '<li><a href="%s">%s</a></li>', esc_url(get_permalink($page->ID)), esc_html(get_the_title($page->ID)) ); } echo '</ul>'; }
Если нужен вывод через
WP_Query, то так:$query = new WP_Query([ 'post_type' => 'page', 'post_parent' => 0, 'orderby' => 'title', 'order' => 'ASC', 'posts_per_page' => -1, ]);
Для меню сайта лучше использовать стандартные меню WordPress, потому что там можно вручную менять порядок. А для автоматического каталога страниц по алфавиту — код выше нормальный.
В вашем исходном шорткоде проблема ещё и в строке сортировки:
wp_list_pages()принимает параметры строкой или массивом, но для алфавита нужно явно указатьsort_column=post_title, а не оставлятьmenu_order. Если хотите сохранить текущую логику с дочерними страницами, можно заменить только параметр сортировки:$childpages = wp_list_pages([ 'sort_column' => 'post_title', 'sort_order' => 'ASC', 'title_li' => '', 'child_of' => $post->post_parent ? $post->post_parent : $post->ID, 'echo' => 0, ]);
После этого WordPress будет сортировать страницы по заголовку. Если порядок всё равно кажется неправильным, проверьте, нет ли в заголовках лишних пробелов, цифр в начале или разных вариантов написания. Для ручного порядка используйте
menu_order, для автоматического алфавита —post_title.