2016-08-02 174 views
10

我有一個自定義後類型叫接觸,就像名字,姓氏,電話號碼等WordPress的:通過自定義後類型

在管理部分的自定義字段會按時間順序我認爲,排序列默認排序,但我需要它們默認按姓氏排序。

我讀過關於這裏的所有其他解決方案,沒有他們的工作,其中包括:

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

但無論現場我嘗試,沒有什麼變化,進行排序,除了切換ASC/DESC似乎改變反轉時間順序。

我在做什麼錯?

+0

同樣的事情發生在我身上也。 – Junaid

+0

你的條件是否錯誤。首先嚐試在刪除ifs後執行此操作。 – shazyriver

回答

3

更換

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

隨着

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

它可以幫助

+0

已經嘗試過。不起作用。 – Junaid

+1

@Junaid看看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

已經按照該解決方案中的說明進行操作。 – Junaid

5

請參考下的解決方案,

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

或引用此solution

+0

這工作。我錯過了這個,但感謝上帝,我現在嘗試了它。 – Junaid

0

我是一名drupal開發人員,沒有機會使用WordPress。 我們遇到了同樣的問題,這是我們如何解決它的。

獲取您的自定義內容類型數據(WP默認api或自定義查詢),它將是一個對象數組。使用下面的函數對它們排序返回已排序的帖子數組。不知道,你需要在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; 

     }); 
    } 
} 

,然後在你的鉤子,你可以調用

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

功能,從這個答案抄這個功能:https://stackoverflow.com/a/39872303/3086531

+0

這是一個解決方案,但不是一個理想的解決方案。零性能 – Junaid

相關問題