현재 음악 제목 목록을 출력하려고하는데 제목의 첫 번째 기사를 정렬에서 무시하고 표시하고 싶습니다.
예를 들어 밴드 목록이 있으면 다음과 같이 알파벳순으로 WordPress에 표시됩니다.
- 검은 안식일
- 레드 제플린
- 핑크 플로이드
- 비틀즈
- 꼬임
- 롤링 돌
- 얇은 리지
대신 다음과 같이 초기 기사 'The'를 무시하고 알파벳순으로 표시하고 싶습니다.
- 비틀즈
- 검은 안식일
- 꼬임
- 레드 제플린
- 핑크 플로이드
- 롤링 돌
- 얇은 리지
작년부터 블로그 항목에서 솔루션을 발견 했으며 다음 코드를 제안합니다 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 데이터베이스 오류 : [ 'order clause'의 'title2'열을 알 수 없습니다.]
wp_posts를 선택하십시오. * 1에서 wp_posts로 wp_posts.post_type = 'release'AND (wp_posts.post_status = 'publish'또는 wp_posts.post_status = 'private') ORDER BY UPPER (title2) ASC
나는 거짓말을하지 않을 것입니다. 나는 WordPress의 PHP 부분에 익숙하지 않아서 왜이 오류가 발생하는지 확실하지 않습니다. '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();
?>