Advertisement
designerken

Sortable columns

Mar 20th, 2012
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.65 KB | None | 0 0
  1. /*-----------------------------------------------------------------------------------*/
  2. /* Sortable columns for admin knowledge base section
  3. /*-----------------------------------------------------------------------------------*/
  4.  
  5. // Register the new columns as sortable
  6. function kbcategory_column_register_sortable( $columns ) {
  7. $columns['meta_views'] = 'Views';
  8. $columns['taxonomy_category'] = 'kbcategory';
  9. $columns['taxonomy_related_products'] = 'relatedproducts';
  10.  
  11. return $columns;
  12. }
  13. add_filter( 'manage_edit-knowledge-base_sortable_columns', 'kbcategory_column_register_sortable' );
  14.  
  15. // Tell Wordpress how to sort the new column 'Views'
  16. function views_column_orderby( $vars ) {
  17. if ( isset( $vars['orderby'] ) && 'Views' == $vars['orderby'] ) {
  18. $vars = array_merge( $vars, array(
  19. 'meta_key' => 'Views',
  20. 'orderby' => 'meta_value_num'
  21. ) );
  22. }
  23.  
  24. return $vars;
  25. }
  26. add_filter( 'request', 'views_column_orderby' );
  27.  
  28. // Tell Wordpress how to sort the new column 'Category'
  29. function kbcategory_clauses( $clauses, $wp_query ) {
  30. global $wpdb;
  31.  
  32. if ( isset( $wp_query->query['orderby'] ) && 'kbcategory' == $wp_query->query['orderby'] ) {
  33.  
  34. $clauses['join'] .= <<<SQL
  35. LEFT OUTER JOIN {$wpdb->term_relationships} ON {$wpdb->posts}.ID={$wpdb->term_relationships}.object_id
  36. LEFT OUTER JOIN {$wpdb->term_taxonomy} USING (term_taxonomy_id)
  37. LEFT OUTER JOIN {$wpdb->terms} USING (term_id)
  38. SQL;
  39.  
  40. $clauses['where'] .= " AND (taxonomy = 'kbcategory' OR taxonomy IS NULL)";
  41. $clauses['groupby'] = "object_id";
  42. $clauses['orderby'] = "GROUP_CONCAT({$wpdb->terms}.name ORDER BY name ASC) ";
  43. $clauses['orderby'] .= ( 'ASC' == strtoupper( $wp_query->get('order') ) ) ? 'ASC' : 'DESC';
  44. }
  45.  
  46. return $clauses;
  47. }
  48. add_filter( 'posts_clauses', 'kbcategory_clauses', 10, 2 );
  49.  
  50. // Tell Wordpress how to sort the new column 'Related Products'
  51. function relatedproducts_clauses( $clauses, $wp_query ) {
  52. global $wpdb;
  53.  
  54. if ( isset( $wp_query->query['orderby'] ) && 'relatedproducts' == $wp_query->query['orderby'] ) {
  55.  
  56. $clauses['join'] .= <<<SQL
  57. LEFT OUTER JOIN {$wpdb->term_relationships} ON {$wpdb->posts}.ID={$wpdb->term_relationships}.object_id
  58. LEFT OUTER JOIN {$wpdb->term_taxonomy} USING (term_taxonomy_id)
  59. LEFT OUTER JOIN {$wpdb->terms} USING (term_id)
  60. SQL;
  61.  
  62. $clauses['where'] .= " AND (taxonomy = 'relatedproducts' OR taxonomy IS NULL)";
  63. $clauses['groupby'] = "object_id";
  64. $clauses['orderby'] = "GROUP_CONCAT({$wpdb->terms}.name ORDER BY name ASC) ";
  65. $clauses['orderby'] .= ( 'ASC' == strtoupper( $wp_query->get('order') ) ) ? 'ASC' : 'DESC';
  66. }
  67.  
  68. return $clauses;
  69. }
  70. add_filter( 'posts_clauses', 'relatedproducts_clauses', 10, 2 );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement