Как вывести список родительских страниц по алфавиту WordPress?

Ссылка скопирована
1 ответ

Добрый день, все перековырял в интернете, пробовал менять что то в коде но не выходит
Код такой:

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 и вывел шотрткодом на страницу список, но не получается отсортировать по алфавиту вывод, может кто знает подскажите пожалуйста. Страница где список

Дополнительно:

все перековырял в интернете

точно все?

пробовал менять что то в коде

например параметр сортировки?

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Никита Орлов Ответ

Если нужно вывести только родительские страницы и отсортировать их по алфавиту, используйте 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>';
}

$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,
]);

$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,
]);

$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.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно