Sortieren Sie benutzerdefinierte Post-Typen nach dem Nachnamen im Back-End

Ich habe eine benutzerdefinierte Post-Typ namens speakers , wo Post-Titel ist ein Sprecher First- und Nachname . Ich habe es mit diesem Code erstellt:

 add_action( 'init', 'create_post_type' ); function create_post_type() { register_post_type( 'speaker', array( 'labels' => array( 'name' => __( 'Speakers' ), 'singular_name' => __( 'Speaker' ) ), 'public' => true, 'has_archive' => true, 'supports' => array('title','editor','thumbnail'), ) ); } 

Ich konnte diese in meiner wp_query mit Hilfe von @birgire erfolgreich sortieren, indem ich dies zu meiner functions.php hinzufügte:

 function posts_orderby_lastname ($orderby_statement) { $orderby_statement = "RIGHT(post_title, LOCATE(' ', REVERSE(post_title)) - 1) ASC"; return $orderby_statement; } 

und dann den Filter vor meiner Abfrage hinzufügen.

Die Frage, die ich habe, ist, wie kann ich die Posts nach dem Nachnamen in der Post-Liste in den Backend-Spalten sortiert. Mir wurde gesagt, dass ich den pre_get_posts Hook verwenden muss.

Ich habe es versucht:

 function set_custom_post_types_admin_order($wp_query) { if (is_admin()) { // Get the post type from the query $post_type = $wp_query->query['post_type']; if ( $post_type == 'speaker') { if (!isset($_GET['orderby'])) { // 'orderby' value can be any column name $wp_query->set('orderby', 'title'); // 'order' value can be ASC or DESC $wp_query->set('order', 'ASC'); } } } } add_filter('pre_get_posts', 'set_custom_post_types_admin_order'); 

die nach dem Post-Typ anstatt nach dem Erstellungsdatum sortiert, aber ich weiß nicht, wie sie nach dem Nachnamen sortieren könnte …

Solutions Collecting From Web of "Sortieren Sie benutzerdefinierte Post-Typen nach dem Nachnamen im Back-End"

Wenn Sie die Standard- und die Titelreihenfolge überschreiben möchten , und stattdessen durch das letzte Wort im Titel bestellen.

 /** * Override default- and title ordering in the backend, for the 'speaker' custom post type. * * @link https://wordpress.stackexchange.com/a/202154/26350 */ add_action( 'pre_get_posts', function( \WP_Query $q ) { if ( is_admin() && $q->is_main_query() && 'edit-speaker' === get_current_screen()->id && ( '' === $q->get( 'orderby' ) || 'title' === $q->get( 'orderby' ) ) ) { $q->set( 'orderby', 'wpse_last_word' ); $q->set( 'order', '' !== $q->get( 'order' ) ? $q->get( 'order' ) : 'ASC' ); } } ); 

Wo wir das Plugin von unserer letzten Antwort verwenden , um die Bestellung von wpse_last_word zu unterstützen.