ฉันกำลังพยายามส่งออกรายการของชื่อเพลงและต้องการให้ละเว้นการเรียงลำดับ (แต่ยังคงแสดง) บทความเริ่มต้นของชื่อเรื่อง
ตัวอย่างเช่นถ้าฉันมีรายชื่อของวงดนตรีมันจะแสดงตามลำดับตัวอักษรใน WordPress ดังนี้:
- วันธรรมสวนะดำ
- Led Zeppelin
- พิงค์ฟลอยด์
- เดอะบีทเทิลส์
- หว่า
- หินกลิ้ง
- ผอมลิซซี่
แต่ฉันต้องการให้มันแสดงตามตัวอักษรในขณะที่ละเว้นบทความเริ่มต้น 'The' เช่นนี้
- เดอะบีทเทิลส์
- วันธรรมสวนะดำ
- หว่า
- Led Zeppelin
- พิงค์ฟลอยด์
- หินกลิ้ง
- ผอมลิซซี่
ฉันเจอวิธีแก้ไขปัญหาในรายการบล็อกจากปีที่แล้วซึ่งแนะนำรหัสต่อไปนี้ใน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' ใน 'order clause']
เลือก wp_posts. * จาก wp_posts โดยที่ 1 = 1 และ wp_posts.post_type = 'ปล่อย' และ (wp_posts.post_status = 'เผยแพร่' หรือ 'wp_posts.post_status =' ส่วนตัว ') เรียงตามบนสุด (ชื่อ 2) 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();
?>