Наразі я намагаюся вивести список музичних назв і хотів би мати ігнорувати сортування (але все ще відображати) початкову статтю заголовка.
Наприклад, якщо у мене був список діапазонів, він буде відображатися в алфавітному порядку в WordPress так:
- Black Sabbath
- Лед Зеппелін
- Рожевий Флойд
- Бітлз
- Кінки
- Ролінг Стоунз
- Тонкий Ліззі
Натомість я хотів би, щоб він відображався в алфавітному порядку, ігноруючи початкову статтю "The", як це:
- Бітлз
- Black Sabbath
- Кінки
- Лед Зеппелін
- Рожевий Флойд
- Ролінг Стоунз
- Тонкий Ліззі
Я наткнувся на рішення у записі в блозі минулого року , що пропонує наступний код у functions.php
:
function wpcf_create_temp_column($fields) {
global $wpdb;
$matches = 'The';
$has_the = " CASE
WHEN $wpdb->posts.post_title regexp( '^($matches)[[:space:]]' )
THEN trim(substr($wpdb->posts.post_title from 4))
ELSE $wpdb->posts.post_title
END AS title2";
if ($has_the) {
$fields .= ( preg_match( '/^(\s+)?,/', $has_the ) ) ? $has_the : ", $has_the";
}
return $fields;
}
function wpcf_sort_by_temp_column ($orderby) {
$custom_orderby = " UPPER(title2) ASC";
if ($custom_orderby) {
$orderby = $custom_orderby;
}
return $orderby;
}
а потім заверніть запит add_filter
до і remove_filter
після.
Я спробував це, але я постійно отримую таку помилку на своєму сайті:
Помилка бази даних WordPress: [Невідомий стовпець 'title2' у «порядку замовлення»]
ВИБІРТЕ wp_posts. * ВІД wp_posts ДЕ 1 = 1 І wp_posts.post_type = 'випустити' І (wp_posts.post_status = 'опублікувати' АБО wp_posts.post_status = 'приватний') ЗАМОВИТИ НАГОРОДІ (title2) ASC
Я не буду брехати, я досить новачок у частині php WordPress, тому не знаю, чому я отримую цю помилку. Я можу бачити, що це має щось спільне зі стовпцем 'title2', але я розумів, що перша функція повинна подбати про це. Крім того, якщо є розумніший спосіб зробити це, я все вуха. Я гуляв навколо та шукав цей сайт, але насправді не знайшов багато рішень.
Мій код із використанням фільтрів виглядає приблизно так, якщо це допоможе:
<?php
$args_post = array('post_type' => 'release', 'orderby' => 'title', 'order' => 'ASC', 'posts_per_page' => -1, );
add_filter('post_fields', 'wpcf_create_temp_column'); /* remove initial 'The' from post titles */
add_filter('posts_orderby', 'wpcf_sort_by_temp_column');
$loop = new WP_Query($args_post);
remove_filter('post_fields', 'wpcf_create_temp_column');
remove_filter('posts_orderby', 'wpcf_sort_by_temp_column');
while ($loop->have_posts() ) : $loop->the_post();
?>