2016-03-01 135 views
0

我有一个名为“团队成员”的自定义职位类型以及一些自定义列 - 一个专门设置用于订购自定义职位。我已经设置好了,所以当你第一次访问团队成员标签时,帖子按“团队订单”列进行排序(ASC)。这很好,但是,我遇到了一个小问题,如果点击Team Order列来将排序反转为DESC,似乎并不像Wordpress认识到它们在页面初始加载时已经排序。相反,它会再次查询帖子,并以ASC顺序再次返回它们。然后,如果列标题再次被点击,它将以DESC顺序返回帖子。我怎样才能摆脱点击两次的需要?当页面首次加载时,帖子已经按升序排序。为什么Wordpress会错过这一点,并在第二次以升序返回它们,然后才能最终进入DESC?WordPress的自定义列默认排序

这是我的代码,让我知道如果你想看到更多。由于

//team_members Post Type: sortable columns 
add_filter('manage_edit-team_members_sortable_columns', 'team_members_sortable_columns'); 
function team_members_sortable_columns($columns){ 
    $columns['team_order'] = 'team_order'; 

    return $columns; 
} 

//team_members Post Type: sortable columns orderby 
add_action('pre_get_posts', 'team_members_orderby_columns', 1); 
function team_members_orderby_columns($query){ 
    if(!is_admin()){ 
     return; 
    } 

    $order = $query->get('team_order'); 

    if($query->is_main_query()){ 

     $query->set('meta_key', 'team_order'); 
     $query->set('orderby', 'meta_value_num'); 

     if($order == ''){ 
      $query->set('order', 'ASC'); 
     } 

    } 
} 

回答

0

试试这个

//team_members Post Type: sortable columns orderby 
    add_action('pre_get_posts', 'team_members_orderby_columns', 1); 
    function team_members_orderby_columns($query){ 
     if(!is_admin()){ 
      return; 
     } 

    $order = $query->get('team_order'); 
    if ($query->is_main_query() && ($orderby = $query->get('orderby'))) { 
     switch($orderby) { 
     case 'team_order': 
      $query->set('meta_key', 'team_order'); 
      $query->set('orderby', 'meta_value_num'); 
      if (! in_array($order, array('ASC', 'DESC')))     
      $query->set('order', 'ASC'); 
      } 
     break;  
     } 
    } 
    } 
+0

谢谢,我给这是一个尝试,但它似乎并不奏效。我相信这可能与$ query-> get('orderby')有关,因为它在首页加载时返回空白。它仅在点击“团队订单”列以手动排序帖子而不是初始页面加载后返回值。任何想法可能会造成这种情况? – sm1215