Wie sortiere ich Beiträge im Admin nach Titeln mit dem Format dd.mm.yyyy?

Ich habe einen benutzerdefinierten Post-Typ für die Buchung erstellt, neue Posts werden von Besuchern eingefügt und der Titel wird als Datum formatiert, an dem die Buchung stattfindet. So sieht die Postliste im Admin so aus:

Bildbeschreibung hier eingeben

Gibt es eine Möglichkeit, diese Beiträge in der Admin-Liste nach diesen Datumsangaben zu sortieren? Generell wäre es eine Lösung, die Titel zu bekommen, sie in Daten zu verwandeln und dann diese Beiträge zu sortieren. Wenn ja, wie kann ich das im pre_get_posts () Filter tun?

Vielleicht hätte ich das besser machen können, aber alles andere an diesen functionen funktioniert großartig. Jeder Beitrag enthält ACF-Repeater mit der Zeit in Schritten, so dass es ein wenig komplizierter ist.

BEARBEITEN:

Dies ist, wie ich Filter habe, ändert es richtig posts_per_page nur um sicherzustellen, dass es funktioniert. Ich habe versucht, es als eine Plugin-class neu zu erstellen.

 public function __construct(){ add_action( 'pre_get_posts', array($this, 'sort_admin_daily_reservations')); add_filter( 'posts_orderby', array($this, 'test_sorting_filter' ), 10, 2); } public function sort_admin_daily_reservations($query) { if(is_admin() && $query->is_main_query() && in_array ($query->get('post_type'), array('Booking')) ) { $query->set('orderby', 'wpse_mod_title'); $query->set('order', 'DESC'); //$query->set('posts_per_page', 2); } return $query; } public function test_sorting_filter($orderby, \WP_Query $q) { global $wpdb; $_orderby = $q->get( 'orderby' ); $_order = $q->get( 'order' ); if('wpse_mod_title ' === $_orderby && in_array( $_order , [ 'ASC', 'DESC' ], true )) $orderby = " CONCAT( SUBSTRING( {$wpdb->posts}.post_title, 7, 4 ), SUBSTRING( {$wpdb->posts}.post_title, 4, 2 ), SUBSTRING( {$wpdb->posts}.post_title, 1, 2 ) ) {$_order} "; return $orderby; } 

Solutions Collecting From Web of "Wie sortiere ich Beiträge im Admin nach Titeln mit dem Format dd.mm.yyyy?"

Es sieht so aus, als hätten die DD.MM.YYYY. das Datumsformat DD.MM.YYYY.

Wir können die DD.MM.YYYY Titel als YYYYMMDD mit folgenden Namen bestellen:

 $query = new WP_Query( [ 'orderby' => 'wpse_mod_title ' ] ); 

das wird mit dieser Art von Plugin unterstützt:

 /** * Plugin Name: WPSE-274981: Sort DD.MM.YYYY Post Titles as YYYYMMDD In WP_Query * Desription: Supported by the wpse_mod_title orderby value */ add_filter( 'posts_orderby', function( $orderby, \WP_Query $q ) use ( &$wpdb ) { $_orderby = $q->get( 'orderby' ); $_order = $q->get( 'order' ); if( 'wpse_mod_title' === $_orderby && in_array( $_order , [ 'ASC', 'DESC' ], true ) ) $orderby = " CONCAT( SUBSTRING( {$wpdb->posts}.post_title, 7, 4 ), // Get the YYYY part SUBSTRING( {$wpdb->posts}.post_title, 4, 2 ), // Get the MM part SUBSTRING( {$wpdb->posts}.post_title, 1, 2 ) // Get the DD part ) {$_order} "; return $orderby; }, 10, 2 ); 

Beachten Sie, dass dies das strikte DD.MM.YYYY ohne Leerzeichen annimmt.

Wir könnten in Betracht ziehen, es in SQL zu trimmen, um es flexibler zu machen.

Ich denke, ich bin unter dem Einfluss von @bonger oder @thedeadmedic, um diese Art von Substring-Bestellung zu schreiben. 😉

Aber bedenken Sie zuerst einmal eine andere Herangehensweise, wie zum Beispiel die Titel auf eine sortierbare Weise zu schreiben.