В настоящее время я пытаюсь вывести список названий музыки и хотел бы, чтобы сортировка игнорировала (но все еще отображала) исходную статью заголовка.
Например, если бы у меня был список полос, он будет отображаться в алфавитном порядке в 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 = 'release' И (wp_posts.post_status = 'publish' ИЛИ wp_posts.post_status = 'private') ЗАКАЗАТЬ ВЕРХНИЙ (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();
?>