wordpress - Sortable custom fields columns

99封情书 提交于 2020-01-03 05:14:10

问题


I added some custom fields (dates) in my admin columns. I try to make them sortable but in order to do that I need to convert them from string to date. My naive and simple code obviously doesn't work... Can someone point out my error(s) ?

add_action( 'pre_get_posts', 'orderby_date' );

function orderby_date( $query ) {
 $orderby = $query->get( 'orderby');
  if( 'start' == $orderby ) {
    $query->set('meta_key','class_start');
    $query->set('orderby',"STR_TO_DATE(meta_value,'%m/%d/%Y')");
  }
}

回答1:


This is what you are looking for:

add_filter( 'posts_clauses', 'manage_wp_posts_be_qe_posts_clauses', 1, 2 );
function manage_wp_posts_be_qe_posts_clauses( $pieces, $query ) {
   global $wpdb;

   if ( $query->is_main_query() && ( $orderby = $query->get( 'orderby' ) ) ) {
      $order = strtoupper( $query->get( 'order' ) );

      if ( ! in_array( $order, array( 'ASC', 'DESC' ) ) )
         $order = 'ASC';

      switch( $orderby ) {

         case 'class_start':

            $pieces[ 'join' ] .= " LEFT JOIN $wpdb->postmeta wp_rd ON wp_rd.post_id = {$wpdb->posts}.ID AND wp_rd.meta_key = 'class_start'";

            $pieces[ 'orderby' ] = "STR_TO_DATE( wp_rd.meta_value,'%m/%d/%Y' ) $order, " . $pieces[ 'orderby' ];

         break;
      }
   }
   return $pieces;
}

You can read more about it here: http://wpdreamer.com/2014/04/how-to-make-your-wordpress-admin-columns-sortable/



来源:https://stackoverflow.com/questions/23860418/wordpress-sortable-custom-fields-columns

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!