PluginProbe
WP Ultimate Post Grid / 4.1.1
WP Ultimate Post Grid v4.1.1
4.1.1 trunk 1.5 1.6 1.7 1.7.1 1.7.2 1.8 1.9 2.0 2.1 2.2 2.3 2.4.0 2.5.0 2.6.0 2.7.0 2.8.0 2.8.2 3.0.0 3.3.0 3.4.0 3.5.0 3.6.0 3.7.0 All 32 releases
wp-ultimate-post-grid / includes / public / class-wpupg-order.php

class-wpupg-order.php in WP Ultimate Post Grid 4.1.1, at includes/public/class-wpupg-order.php

159 lines 3.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Handle the grid order.
4 *
5 * @link https://bootstrapped.ventures
6 * @since 3.9.0
7 *
8 * @package WP_Ultimate_Post_Grid
9 * @subpackage WP_Ultimate_Post_Grid/includes/public
10 */
11
12 /**
13 * Handles the grid order.
14 *
15 * @since 3.9.0
16 * @package WP_Ultimate_Post_Grid
17 * @subpackage WP_Ultimate_Post_Grid/includes/public
18 * @author Brecht Vandersmissen <brecht@bootstrapped.ventures>
19 */
20 class WPUPG_Order {
21
22 /**
23 * Register actions and filters.
24 *
25 * @since 3.9.0
26 */
27 public static function init() {
28 add_filter( 'wpupg_javascript_args', array( __CLASS__, 'javascript_args' ), 10, 2 );
29 add_filter( 'wpupg_output_item_data', array( __CLASS__, 'item_data' ), 10, 4 );
30 }
31
32 /**
33 * JavaScript arguments for the grid order.
34 *
35 * @since 3.9.0
36 * @param mixed $args Current JavaScript arguments.
37 * @param mixed $grid Grid to output.
38 */
39 public static function javascript_args( $args, $grid ) {
40 $parsing = self::get_order_parsing( $grid->grid_order_by(), $grid->order_custom_key_numeric() );
41
42 $args['isotope']['getSortData'] = array(
43 'default' => '[data-order-default]' . $parsing,
44 );
45 $args['isotope']['sortBy'] = 'default';
46 $args['isotope']['sortAscending'] = 'desc' === $grid->grid_order() ? false : true;
47
48 return $args;
49 }
50
51 /**
52 * Add order data to a grid item.
53 *
54 * @since 3.9.0
55 */
56 public static function item_data( $data, $grid, $item, $args ) {
57 if ( $grid ) {
58 $order_key = self::get_order_key_for( $item, $grid->grid_order_by(), $grid->order_custom_key() );
59
60 if ( false !== $order_key ) {
61 $data[ 'order-default' ] = $order_key;
62 }
63 }
64
65 return $data;
66 }
67
68 /**
69 * Get order key for a specific grid item.
70 *
71 * @since 3.9.0
72 */
73 public static function get_order_key_for( $item, $order_by, $order_by_custom_key = false ) {
74 $order_key = false;
75
76 switch( $order_by ) {
77 case 'title':
78 case 'name':
79 $order_key = $item->title();
80 break;
81 case 'slug':
82 $order_key = $item->slug();
83 break;
84 case 'description':
85 $order_key = $item->description();
86 break;
87 case 'term_id':
88 $order_key = $item->id();
89 break;
90 case 'date':
91 $order_key = strtotime( $item->date() );
92 break;
93 case 'modified':
94 $order_key = strtotime( $item->date_modified() );
95 break;
96 case 'author':
97 $order_key = $item->author_id();
98 break;
99 case 'comment_count':
100 $order_key = $item->comment_count();
101 break;
102 case 'count':
103 $order_key = $item->count();
104 break;
105 case 'rand':
106 $order_key = microtime();
107 break;
108 case 'menu_order':
109 $order_key = $item->menu_order();
110 break;
111 case 'custom':
112 if ( $order_by_custom_key ) {
113 $order_key = $item->meta( $order_by_custom_key );
114 }
115 break;
116 }
117
118 return $order_key;
119 }
120
121 /**
122 * Get parsing for a specific grid.
123 *
124 * @since 3.9.0
125 */
126 public static function get_order_parsing( $order_by, $custom_key_numeric = false ) {
127 $parsing = '';
128
129 switch( $order_by ) {
130 case 'date':
131 case 'modified':
132 case 'comment_count':
133 case 'count':
134 case 'term_id':
135 case 'rand':
136 case 'author':
137 $parsing = 'parseInt';
138 break;
139 case 'menu_order':
140 $parsing = 'parseFloat';
141 break;
142 case 'custom':
143 if ( $custom_key_numeric ) {
144 $parsing = 'parseFloat';
145 }
146 break;
147 }
148
149 // Add space in front if parsing is needed.
150 if ( $parsing ) {
151 $parsing = ' ' . $parsing;
152 }
153
154 return $parsing;
155 }
156 }
157
158 WPUPG_Order::init();
159