WordPress的:通过自定义后类型

问题描述:

我有一个自定义后类型叫接触,就像名字,姓氏,电话号码等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

更换

$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

请参考下的解决方案,

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

我是一名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