Attualmente sto provando a produrre un elenco di titoli musicali e vorrei che l'ordinamento ignori (ma visualizzi ancora) l'articolo iniziale del titolo.
Ad esempio, se avessi un elenco di bande, questo verrà visualizzato in ordine alfabetico in WordPress in questo modo:
- Black Sabbath
- LED Zeppelin
- Fluido Rosa
- Gli scarafaggi
- The Kinks
- Le pietre rotolanti
- Lucertola magra
Vorrei invece visualizzarlo in ordine alfabetico ignorando l'articolo iniziale 'The', in questo modo:
- Gli scarafaggi
- Black Sabbath
- The Kinks
- LED Zeppelin
- Fluido Rosa
- Le pietre rotolanti
- Lucertola magra
Mi sono imbattuto in una soluzione in un post di blog dello scorso anno , che suggerisce il seguente codice in 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;
}
e quindi racchiudendo la query con add_filter
prima e remove_filter
dopo.
Ho provato questo, ma continuo a ricevere il seguente errore sul mio sito:
Errore del database WordPress: [Colonna sconosciuta 'title2' nella 'clausola d'ordine']
SELEZIONA wp_posts. * DA wp_posts DOVE 1 = 1 E wp_posts.post_type = 'release' AND (wp_posts.post_status = 'publishing' O wp_posts.post_status = 'private') ORDER BY UPPER (title2) ASC
Non mentirò, sono abbastanza nuovo nella parte php di WordPress, quindi non sono sicuro del motivo per cui sto ricevendo questo errore. Vedo che ha qualcosa a che fare con la colonna "title2", ma ho capito che la prima funzione dovrebbe occuparsene. Inoltre, se c'è un modo più intelligente per farlo, sono tutto orecchi. Ho cercato su Google in questo sito, ma non ho trovato molte soluzioni.
Il mio codice che utilizza i filtri appare così se è di aiuto:
<?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();
?>