LÖSUNG HIER VERFÜGBAR
Ich habe einen benutzerdefinierten Beitragstyp mit dem Namen clientarea eingerichtet und dafür im Administratorbereich mehrere benutzerdefinierte Spalten eingerichtet. Die benutzerdefinierten Spalten sind alle benutzerdefinierten Metafelder, wie Sie in meinem Code sehen können. Ich möchte standardmäßig nach "Termindatum" absteigend sortieren.
Alle Spalten funktionieren einwandfrei und können wie erwartet manuell sortiert werden, aber die Standardsortierreihenfolge funktioniert nicht.
Wenn ich das Standardsortierfeld in ein Standardfeld (z. B. 'title') ändere, funktioniert es wie erwartet. Es scheint nur nicht zu funktionieren, wenn ich versuche, eine benutzerdefinierte Spalte als Standardsortierreihenfolge festzulegen. Die Reihenfolge funktioniert (dh ich kann auch mit einer benutzerdefinierten Spalte standardmäßig zwischen auf und ab wechseln), aber sie nimmt die Reihenfolge nicht auf, und kehrt zurück zur Sortierung nach dem Datum, an dem der benutzerdefinierte Beitrag veröffentlicht wurde.
Was vermisse ich?
Mein Code lautet wie folgt:
add_action( 'manage_posts_custom_column' , 'custom_columns', 10, 2 );
function custom_columns( $column, $post_id ) {
global $wpdb;
switch ( $column ) {
case 'extranet_case_office':
$get_office_ID = get_post_meta( $post_id, 'extranet_case_office', true );
$get_office_name = $wpdb->get_results('SELECT post_title FROM `cn_bf_posts` WHERE `ID` = '.$get_office_ID);
echo $get_office_name[0]->post_title;
break;
case 'extranet_appointment_date':
echo date('d/m/Y',strtotime(get_post_meta( $post_id, 'extranet_appointment_date', true )));
break;
case 'extranet_appointment_type':
echo get_post_meta( $post_id, 'extranet_appointment_type', true );
break;
case 'extranet_insolvency_practioner':
$get_person_ID = get_post_meta( $post_id, 'extranet_insolvency_practioner', true );
$get_person_name = $wpdb->get_results('SELECT post_title FROM `cn_bf_posts` WHERE `ID` = '.$get_person_ID);
echo $get_person_name[0]->post_title;
break;
default:
break;
}
}
add_filter( 'manage_edit-clientarea_sortable_columns', 'my_sortable_clientarea_columns' );
function my_sortable_clientarea_columns( $columns ) {
$columns['extranet_case_office'] = 'extranet_sort_office';
$columns['extranet_appointment_date'] = 'extranet_sort_date';
$columns['extranet_appointment_type'] = 'extranet_sort_type';
$columns['extranet_insolvency_practioner'] = 'extranet_sort_IP';
return $columns;
}
add_action( 'pre_get_posts', 'extranet_orderby' );
function extranet_orderby( $query ) {
if( ! is_admin() )
return;
$orderby = $query->get( 'orderby');
switch ( $orderby ) {
case 'extranet_sort_office':
$query->set('meta_key','extranet_case_office');
$query->set('orderby','meta_value_num');
break;
case 'extranet_sort_date':
$query->set('meta_key','extranet_appointment_date');
$query->set('orderby','meta_value');
break;
case 'extranet_sort_type':
$query->set('meta_key','extranet_appointment_type');
$query->set('orderby','meta_value');
break;
case 'extranet_sort_IP':
$query->set('meta_key','extranet_insolvency_practioner');
$query->set('orderby','meta_value_num');
break;
default:
break;
}
}
add_action('pre_get_posts','clientarea_default_order');
function clientarea_default_order( $query ){
if( $query->get('post_type')=='clientarea' ){
if( $query->get('orderby') == '' )
$query->set('orderby','extranet_sort_date');
if( $query->get('order') == '' )
$query->set('order','desc');
}
}