2016-08-02 8 views
10

Mam niestandardowy typ pocztowy nazwie kontaktu, z pól niestandardowych, takich jak imię, nazwisko, numer telefonu itpWordPress: Domyślne sortowanie według kolumny typu zwyczaj postu

W sekcji administracyjnej są one sortowane chronologicznie myślę , ale muszę je domyślnie sortować według nazwiska.

Czytałem wszystkie inne rozwiązania na tu i żaden z nich nie działa, w tym:

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'); 

Ale cokolwiek pole próbuję sortować według, nic się nie zmieni, chyba że przełączanie ASC/DESC Wydaje się, aby zmienić odwróć porządek chronologiczny.

Co robię źle?

+0

samo dzieje się ze mną również. – Junaid

+0

twoje, jeśli warunki są złe. Najpierw spróbuj to zrobić po usunięciu ifs. – shazyriver

Odpowiedz

3

Wymień

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

Z

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

To może pomóc

+0

Próbowałem już tego. Nie działa. – Junaid

+1

@Junaid spójrz na 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

Już teraz postępuj zgodnie z instrukcjami w tym rozwiązaniu. – Junaid

5

Patrz poniżej rozwiązań,

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'); 

lub skierować tę solution

+0

To działało. Tęskniłem za tym wcześniej, ale dzięki Bogu spróbowałem tego teraz. – Junaid

0

Jestem drupalistą i nie mam okazji grać z WordPress. Mieliśmy ten sam problem i tak go naprawiliśmy.

Uzyskaj niestandardowe dane o typie treści (domyślne api WP lub niestandardowe zapytanie), to będzie tablica obiektów. Posortuj je za pomocą poniższej funkcji. zwróć posortowaną tablicę wpisów. Nie wiem, w którym haczyku trzeba to zaimplementować w wordpress.

/** 
* 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; 

     }); 
    } 
} 

a następnie w hak, można wywołać tę funkcję przez

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

Funkcja skopiowane z tej odpowiedzi: https://stackoverflow.com/a/39872303/3086531

+0

To jedno rozwiązanie, ale nie idealne rozwiązanie. Zero wydajności – Junaid

Powiązane problemy