Saat ini saya mencoba menampilkan daftar judul musik dan ingin menyortir mengabaikan (tetapi masih menampilkan) artikel awal dari judul.
Sebagai contoh jika saya memiliki daftar band itu akan ditampilkan secara alfabet di WordPress seperti ini:
- Sabat hitam
- Dipimpin Zeppelin
- Pink Floyd
- The Beatles
- Kinks
- Batu berputar
- Lizzy Tipis
Alih-alih, saya ingin menampilkannya sesuai abjad sambil mengabaikan artikel awal 'The', seperti ini:
- The Beatles
- Sabat hitam
- Kinks
- Dipimpin Zeppelin
- Pink Floyd
- Batu berputar
- Lizzy Tipis
Saya menemukan solusi dalam entri blog dari tahun lalu , yang menyarankan kode berikut dalam 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;
}
dan kemudian membungkus kueri dengan add_filter
sebelum danremove_filter
sesudah.
Saya sudah mencoba ini, tetapi saya terus mendapatkan kesalahan berikut di situs saya:
Kesalahan basis data WordPress: [Kolom 'title2' tidak dikenal di 'urutan klausa']
SELECT wp_posts. * FROM wp_posts WHERE 1 = 1 AND wp_posts.post_type = 'rilis' AND (wp_posts.post_status = 'publikasikan' ATAU wp_posts.post_status = 'pribadi') ORDER OLEH DASAR (title2) ASC
Saya tidak akan berbohong, saya cukup baru di bagian php WordPress, jadi saya tidak yakin mengapa saya mendapatkan kesalahan ini. Saya bisa melihat itu ada hubungannya dengan kolom 'title2', tapi itu pemahaman saya bahwa fungsi pertama harus mengurus itu. Juga, jika ada cara yang lebih cerdas untuk melakukan ini saya semua telinga. Saya sudah googling di sekitar dan mencari situs ini, tetapi saya belum benar-benar menemukan banyak solusi.
Kode saya menggunakan filter terlihat seperti ini jika ada bantuan:
<?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();
?>