Ich versuche gerade, eine Liste von Musiktiteln auszugeben und möchte, dass die Sortierung den ersten Artikel des Titels ignoriert (aber immer noch anzeigt).
Wenn ich zum Beispiel eine Liste von Bands hatte, wird diese in WordPress alphabetisch wie folgt angezeigt:
- Black Sabbath
- Led Zeppelin
- Pink Floyd
- Die Beatles
- Die Knicke
- Die Rolling Stones
- Dünne Lizzy
Stattdessen möchte ich, dass es alphabetisch angezeigt wird, während der ursprüngliche Artikel 'The' ignoriert wird:
- Die Beatles
- Black Sabbath
- Die Knicke
- Led Zeppelin
- Pink Floyd
- Die Rolling Stones
- Dünne Lizzy
Ich bin in einem Blogeintrag aus dem letzten Jahr auf eine Lösung gestoßen , die folgenden Code vorschlägt 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;
}
und dann die Abfrage mit add_filter
vorher und remove_filter
nachher umschließen .
Ich habe es versucht, aber auf meiner Website wird immer wieder der folgende Fehler angezeigt:
WordPress-Datenbankfehler: [Unbekannte Spalte 'title2' in 'order clause']
SELECT wp_posts. * FROM wp_posts WHERE 1 = 1 AND wp_posts.post_type = 'release' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') ORDER BY UPPER (title2) ASC
Ich werde nicht lügen, ich bin ziemlich neu im PHP-Teil von WordPress, also bin ich mir nicht sicher, warum ich diesen Fehler bekomme. Ich kann sehen, dass es etwas mit der 'title2'-Spalte zu tun hat, aber nach meinem Verständnis sollte sich die erste Funktion darum kümmern. Auch wenn es einen intelligenteren Weg gibt, bin ich ganz Ohr. Ich habe auf dieser Seite herumgegoogelt und gesucht, aber ich habe nicht wirklich viele Lösungen gefunden.
Mein Code, der die Filter verwendet, sieht wie folgt aus:
<?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();
?>