Всім привіт! Сьогодні ми обговоримо сортування статей у WordPress по алфавіту – як не наступити на підводний камінь, дописуючи додатковий код у шаблоні WordPress. Це досить цікава тема, я практично цілий день затратив на вирішення одного-єдиного нюансу, якого – читай далі.

Бувають моменти, коли потрібно пересортувати статті на своєму WordPress-сайті в іншому порядку. Ось мені вже двічі траплявся випадок, коли була потреба зробити вивід статей у категоріях (всюди, окрім головної сторінки) в алфавітному порядку. Про це ми сьогодні й поговоримо.

Не зовсім правильне сортування статей у WordPress

Найпростіший спосіб сортування статей у WordPress – внести додатковий запис у файл налаштувань шаблона functions.php. Вносити потрібно наступне:

function wpsf_orderby($query) {
    if ( is_category() ) {
        remove_action( 'pre_get_posts', __FUNCTION__ );
        add_filter( 'posts_orderby', function() { return ' post_title ASC'; } );
    }
}
add_action( 'pre_get_posts', 'wpsf_orderby' );

Цей запис допоможе двигунцю посортувати статті у всіх категоріях по алфавіту у наростаючому порядку (від А до Я). Про це свідчить запис у 4-му рядку: post_title ASC.

Якщо ж ти бажаєш змінити порядок сортування у якійсь одній вибраній категорії, то просто видозмінюємо код, поданий вище, додавши у 2-му рядку назву чи id категорії:

if ( is_category('category_name') ) {

У чому ж нюанс?

А нюанс полягає в тому, що не приведи Господи тобі використати віджет останніх записів, як ти відчуєш усю проблему на власній шкурі. Так, ця зміна у файлі functions.php розповсюджується на абсолютно всі категорії у цілому двигунці (якщо ти, звичайно, не вказував/ла однієї конкретної категорії, а поміняв/ла порядок сортування у всіх категоріях відразу). Тобто у віджеті "Останні записи", коли ти перебуваєш на сторінці категорії, тепер відображатимуться не останні по даті публікації, а перші по алфавіту, як і всі статті в основному полі сайту. Що означає лиш одне: тепер віджет абсолютно не виконує своєї функції, а показує просто кілька статей перших по алфавіту…

Як це виправити? Першим ділом ідемо у файл functions.php і повертаємо там усе як було 😉 А тепер шукаємо файл, який відповідає за вивід категорій. Якщо ти призабув/ла, який саме файл це має бути, то можеш ще раз повернутися до статті про оформлення категорій – там докладно розписано, що до чого.

У мене останній раз за вивід категорії відповідав файл archive.php, тобто шаблон не особливо закручений, все досить просто. Шукаємо у цьому файлі вивід циклу статей. Приблизно отакий запис:

<?php if ( have_posts () ) : while (have_posts()):the_post(); ?>

Тут же можемо його видаляти, а замість нього ставити наступний запис:

<?php query_posts($query_string.'&orderby=title&order=asc');
if (have_posts()) : while (have_posts()) : the_post(); ?>

Що ми зробили в даному випадку? Ми оголосили зміну сортування статей безпосередньо перед виводом їх у блок із контентом, а не глобально для цілого сайту, як у попередньому прикладі. В даному випадку окрім даного блоку із статтями більше ніщо на сайті на даний запис реагувати не буде, чого нам і потрібно було добитися.

Хоча, якщо ти не користуєшся віджетом "Останні записи", то тобі цілком підійде і перший варіант, він навіть трохи легший, як на мене.

На цьому все. Якщо мій пост тобі допоміг, не забудь подякувати репостом 😉 Всього хорошого!