Sortieren Sie die Beiträge nach dem ersten Buchstaben im Titel und nicht nach der ersten Nummer

Ich habe einen benutzerdefinierten Post-Typ, mit dem Eigenschaften auf einer Client-Website angezeigt werden. Ich sortiere die Beiträge nach dem Titel, möchte aber alle in diesem Titel enthaltenen Zahlen ignorieren.

Wie sortiere ich Posts nach dem ersten Buchstaben [AZ], nicht nach [0-9, AZ]?

Dies ist meine aktuelle Schleife:

    'project', 'orderby' => 'title', 'order' => 'ASC' ); // Create the new loop $loop = new WP_Query( $wptricckspost ); while ( $loop->have_posts() ) : $loop->the_post(); ?>
  • <?php the_content(); // Other HTML stuff below...

Solutions Collecting From Web of "Sortieren Sie die Beiträge nach dem ersten Buchstaben im Titel und nicht nach der ersten Nummer"

Dies ist ein wenig unordentlich in MySQL zu tun, da preg_replace – der folgende verwendet eine geschachtelte REPLACE , um alle Zahlen aus dem Titel zu REPLACE :

 function wpse167989_posts_orderby( $orderby, $query ) { global $wpdb; // Strip all numbers from title, and trim any leading spaces. return $wpdb->prepare( 'LTRIM(' . str_repeat( 'REPLACE(', 10 ) . $wpdb->posts . '.post_title' . str_repeat( ', %s, %s)', 10 ) . ') ' . $query->get( 'order' ) , 0, '', 1, '', 2, '', 3, '', 4, '', 5, '', 6, '', 7, '', 8, '', 9, '' ); } 

Dann

 add_filter( 'posts_orderby', 'wpse167989_posts_orderby', 10, 2 ); $loop = new WP_Query( $args ); remove_filter( 'posts_orderby', 'wpse167989_posts_orderby', 10 ); 

EDIT pro Kommentar: Um Bindestriche zusätzlich zu entfernen, wird der Filter

 function wpse167989_posts_orderby( $orderby, $query ) { global $wpdb; // Strip all numbers & hyphens from title, and trim any leading spaces. return $wpdb->prepare( 'LTRIM(' . str_repeat( 'REPLACE(', 11 ) . $wpdb->posts . '.post_title' . str_repeat( ', %s, %s)', 11 ) . ') ' . $query->get( 'order' ) , 0, '', 1, '', 2, '', 3, '', 4, '', 5, '', 6, '', 7, '', 8, '', 9, '', '-', '' ); }