Tôi hiện đang cố gắng đưa ra một danh sách các tiêu đề âm nhạc và muốn bỏ qua việc sắp xếp (nhưng vẫn hiển thị) bài viết ban đầu của tiêu đề.
Ví dụ: nếu tôi có một danh sách các ban nhạc, nó sẽ được hiển thị theo thứ tự abc trong WordPress như thế này:
- Ngày sa-bát đen
- Led Zeppelin
- Hồng Floyd
- Ban nhạc The Beatles
- Nút thắt
- Những hòn đá lăn
- Lizzy mỏng
Thay vào đó, tôi muốn nó được hiển thị theo thứ tự abc trong khi bỏ qua bài viết ban đầu 'The', như thế này:
- Ban nhạc The Beatles
- Ngày sa-bát đen
- Nút thắt
- Led Zeppelin
- Hồng Floyd
- Những hòn đá lăn
- Lizzy mỏng
Tôi đã bắt gặp một giải pháp trong một mục blog từ năm ngoái , điều đó cho thấy đoạn mã sau trong 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;
}
và sau đó gói truy vấn với add_filter
trước và remove_filter
sau.
Tôi đã thử điều này, nhưng tôi tiếp tục gặp lỗi sau trên trang web của mình:
Lỗi cơ sở dữ liệu WordPress: [Cột không xác định 'title2' trong 'mệnh đề thứ tự']
CHỌN wp_posts. * TỪ wp_posts WHERE 1 = 1 VÀ wp_posts.post_type = 'phát hành' AND (wp_posts.post_status = 'xuất bản' HOẶC wp_posts.post_status = 'private') ORDER BY UP
Tôi sẽ không nói dối, tôi khá mới với phần php của WordPress, vì vậy tôi không chắc tại sao tôi lại gặp lỗi này. Tôi có thể thấy nó có liên quan đến cột 'title2', nhưng tôi hiểu rằng chức năng đầu tiên sẽ đảm nhiệm việc đó. Ngoài ra, nếu có một cách thông minh hơn để làm điều này thì tôi đều nghe thấy. Tôi đã đi vòng quanh và tìm kiếm trang web này, nhưng tôi thực sự không tìm thấy nhiều giải pháp.
Mã của tôi sử dụng các bộ lọc trông như thế này nếu có bất kỳ trợ giúp nào:
<?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();
?>