2016-08-02 8 views
10

ich einen benutzerdefinierten Post-Typ namens Kontakt mit benutzerdefinierten Feldern wie Vorname, Nachname, Telefonnummer etc.Wordpress: Standardsortierung durch Spalte von benutzerdefinierten Post-Typ

Im Admin-Bereich sind sie chronologisch sortiert Ich denke, , aber ich brauche sie standardmäßig nach Nachnamen sortiert.

ich die anderen Lösungen alle hier und keiner von ihnen habe gelesen arbeiten, darunter:

function set_post_order_in_admin($wp_query) { 
global $pagenow; 
    if (is_admin() && 'edit.php' == $pagenow && !isset($_GET['orderby'])) { 
    $wp_query->set('orderby', 'surname'); 
    $wp_query->set('order', 'ASC'); 
    } 
} 
add_filter('pre_get_posts', 'set_post_order_in_admin'); 

Aber was auch immer Feld versuche ich zu ändern nichts zu sortieren, indem ändert, außer ASC Makeln/DESC scheint umgekehrte chronologische Reihenfolge.

Was mache ich falsch?

+0

Die gleiche Sache ist auch mir passiert. – Junaid

+0

Ihre, wenn die Bedingungen falsch sind. Versuchen Sie zuerst, dies nach dem Entfernen der IFS zu tun. – shazyriver

Antwort

3

ersetzen

$wp_query->set('orderby', 'surname'); 
$wp_query->set('order', 'ASC'); 

Mit

$query->set('meta_key', 'surname'); // name of your post meta key 
$query->set('orderby', 'meta_value'); // meta_value since it is a string 

Es kann helfen,

+0

Bereits versucht dies. Funktioniert nicht. – Junaid

+1

@Junaid werfen Sie einen Blick auf https://wordpress.stackexchange.com/questions/194572/how-do-i-set-the-default-admin-sort-order-for-a-custom-post-type-to -a-custom-col – Sanjay

+0

Befolgen Sie bereits die Anweisungen in dieser Lösung. – Junaid

5

unten Lösungen finden,

function wpa84258_admin_posts_sort_last_name($query){ 
    global $pagenow; 
    if(is_admin() 
     && 'edit.php' == $pagenow 
     && !isset($_GET['orderby']) 
     && !isset($_GET['post_type'])){ 
      $query->set('meta_key', 'last_name'); 
      $query->set('orderby', 'meta_value'); 
      $query->set('order', 'ASC'); 
    } 
} 
add_action('pre_get_posts', 'wpa84258_admin_posts_sort_last_name'); 

OR verweisen diese solution

+0

Das hat funktioniert. Ich habe das schon mal vermisst, aber Gott sei Dank habe ich es jetzt versucht. – Junaid

0

Ich bin ein drupal Entwickler und habe keine Chance mit WordPress zu spielen. Wir hatten das gleiche Problem und so haben wir es behoben.

Holen Sie sich Ihre benutzerdefinierten Inhaltstyp Daten (entweder WP Standard API oder benutzerdefinierte Abfrage), wäre es ein Array von Objekten. Sortiere sie mit der Funktion unten. sortiert sortierte Reihe von Posts zurück. Nicht sicher, in welchem ​​Hook Sie dies in WordPress implementieren müssen.

/** 
* Function to sort array by key 
* sortArrayByKey($yourArray,"name",true); //String sort (ascending order) 
* sortArrayByKey($yourArray,"name",true,false); //String sort (descending order) 
* sortArrayByKey($yourArray,"id"); //number sort (ascending order) 
* sortArrayByKey($yourArray,"count",false,false); //number sort (descending order) 
*/ 

function sortArrayByKey(&$array, $key, $string = false, $asc = true) 
{ 
    if ($string) { 
     usort($array, function ($a, $b) use (&$key, &$asc) { 
      if ($asc) return strcmp(strtolower($a{$key}), strtolower($b{$key})); 
      else  return strcmp(strtolower($b{$key}), strtolower($a{$key})); 
     }); 
    } else { 
     usort($array, function ($a, $b) use (&$key, &$asc) { 
      if ($a[$key] == $b{$key}) { 
       return 0; 
      } 
      if ($asc) return ($a{$key} < $b{$key}) ? -1 : 1; 
      else  return ($a{$key} > $b{$key}) ? -1 : 1; 

     }); 
    } 
} 

und dann in den Haken, können Sie diese Funktion aufrufen, indem

return $this->sortArrayByKey($posts, "surname"); 

Funktion aus dieser Antwort kopiert: https://stackoverflow.com/a/39872303/3086531

+0

Dies ist eine Lösung, aber keine ideale Lösung. Keine Leistung – Junaid