Меню категорій

Правильне сортування статей у WordPress

Правильне сортування статей у Wordpress – як не наступити на підводний камінь, дописуючи додатковий код у шаблоні Wordpress?
Категорії: Wordpress

Всім привіт! Сьогодні ми обговоримо сортування статей у 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(); ?>

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

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

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

Прокоментувати

На сайті відображається лише твоє ім'я та коментар. Електронна пошта зберігається виключно для зв'язку з тобою за потреби та в жодному разі не передається стороннім особам.

Цей сайт захищений системою reCAPTCHA від Google. Політика конфіденційності та Загальні положення та умови.

Натискаючи кнопку "Підтвердити", ти даєш згоду на використання файлів cookie на твоєму пристрої для поліпшення навігації сайтом та іншими зручними функціями, а також допомагаєш рекламній діяльності третіх сторін. Жодних протиправних дій із твоїми особистими даними з моєї сторони не відбувається. Детальніше за посиланням внизу.

Політика конфіденційності