PluginProbe ʕ •ᴥ•ʔ
پارسی دیت – Parsi Date / 2.1.6
پارسی دیت – Parsi Date v2.1.6
6.1 5.1.6 5.1.7 5.1.8 5.1.8.2 6.0 trunk 1.0 1.1 1.2 1.3 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 2.0.0-alpha 2.1 2.1.1 2.1.2 2.1.3 2.1.5 2.1.6 2.1.7 2.2.0 2.2.1 2.2.2 2.2.3 2.3.0.1 2.3.0.2 2.3.1 2.3.2 2.3.3 2.3.4 3.0.1 3.0.2 3.0.3 4.0.0 4.0.1 4.0.2 5.1.0 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5
wp-parsidate / includes / fixes-permalinks.php
wp-parsidate / includes Last commit date
admin 10 years ago plugins 11 years ago widget 10 years ago fixes-archive.php 11 years ago fixes-dates.php 11 years ago fixes-get_archives.php 11 years ago fixes-get_calendar.php 11 years ago fixes-misc.php 11 years ago fixes-permalinks.php 11 years ago general.php 10 years ago install.php 11 years ago parsidate.php 11 years ago settings.php 10 years ago
fixes-permalinks.php
321 lines
1 <?php
2 /**
3 * Fixes and converts permalinks date to Jalali
4 *
5 * @author Mobin Ghasempoor
6 * @package WP-Parsidate
7 * @subpackage Fixes/Permalinks
8 */
9 global $wpp_settings;
10
11 if ( $wpp_settings['conv_permalinks'] == 'enable' ) {
12 add_filter( 'posts_where', 'wpp_posts_where' );
13 add_action( 'pre_get_posts', 'wpp_pre_get_posts' );
14 add_filter( 'post_link', 'wpp_permalink', 10, 3 );
15 }
16
17 /**
18 * Converts post date pointer to Jalali pointer
19 *
20 * @param string $where
21 * @return string
22 */
23 function wpp_posts_where( $where ) {
24 global $wp_query, $wpdb ;
25 if ( empty( $wp_query->query_vars ) )
26 return $where;
27
28 $pd = bn_parsidate::getInstance();
29
30 $m = ( isset( $wp_query->query_vars['m'] ) ) ? $wp_query->query_vars['m'] : '';
31 $hour = ( isset( $wp_query->query_vars['hour'] ) ) ? $wp_query->query_vars['hour'] : '';
32 $minute = ( isset( $wp_query->query_vars['minute'] ) ) ? $wp_query->query_vars['minute'] : '';
33 $second = ( isset( $wp_query->query_vars['second'] ) ) ? $wp_query->query_vars['second'] : '';
34 $year = ( isset( $wp_query->query_vars['year'] ) ) ? $wp_query->query_vars['year'] : '';
35 $month = ( isset( $wp_query->query_vars['month'] ) ) ? $wp_query->query_vars['month'] : '';
36 $day = ( isset( $wp_query->query_vars['day'] ) ) ? $wp_query->query_vars['day'] : '';
37
38 if ( ! empty( $m ) ) {
39 $len = strlen( $m );
40 $year = substr( $m, 0, 4 );
41 if ( $len > 5 )
42 $month = substr( $m, 4, 2 );
43 if ( $len > 7 )
44 $day = substr( $m, 6, 2 );
45 if ( $len > 9 )
46 $hour = substr( $m, 8, 2 );
47 if ( $len > 11 )
48 $minute = substr( $m, 10, 2 );
49 if ( $len > 13 )
50 $second = substr( $m, 12, 2 );
51 }
52
53 if ( empty( $year ) || $year > 1700 )
54 return $where;
55
56 $stamon = 1;
57 $staday = 1;
58 $stahou = '00';
59 $stamin = '00';
60 $stasec = '00';
61 $endmon = 1;
62 $endday = 1;
63 $endhou = '00';
64 $endmin = '00';
65 $endsec = '00';
66
67 $stayear = $year;
68 $endyear = $year+1;
69
70 if ( $month != '' ) {
71 $stamon = $month;
72 $endmon = ( $month == 12 ? 1 : $month + 1 );
73 $endyear= ( $endmon == 1 ? $stayear + 1 : $stayear );
74 }
75
76 if ( $day != '' ) {
77 $staday = $day;
78 $endday = ( $day == $pd->j_days_in_month[(int)$month-1] ? 1 : $day + 1 );
79 $endmon = ( $endday == 1 ? $stamon + 1 : $stamon );
80 }
81
82 if ( $hour != '' ) {
83 $stahou = $hour;
84 $endhou = ( $hour == 24 ? '00' : $hour+1 );
85 $endday = ( $endhou == '00' ? $staday + 1 : $staday );
86 }
87
88 if ( $minute != '' ) {
89 $stamin = $minute;
90 $endmin = ( $minute == 59 ? '00' : $minute+1 );
91 $endhou = ( $endmin == '00' ? $stahou + 1 : $stahou );
92 }
93
94 if ( $second != '' ) {
95 $stasec = $second;
96 $endsec = ( $second == 59 ? '00' : $second + 1 );
97 $endmin = ( $endsec == '00' ? $stamin + 1: $stamin );
98 }
99
100 $stadate = "$stayear-$stamon-$staday";
101 $enddate = "$endyear-$endmon-$endday";
102 $stadate = gregdate( 'Y-m-d', $stadate );
103 $enddate = gregdate( 'Y-m-d', $enddate );
104 $stadate .= " $stahou:$stamin:$stasec";
105 $enddate .= " $endhou:$endmin:$endsec";
106
107 $patterns = array('/YEAR\((.*?)post_date\s*\)\s*=\s*[0-9\']*/',
108 '/DAYOFMONTH\((.*?)post_date\s*\)\s*=\s*[0-9\']*/',
109 '/MONTH\((.*?)post_date\s*\)\s*=\s*[0-9\']*/',
110 '/HOUR\((.*?)post_date\s*\)\s*=\s*[0-9\']*/',
111 '/MINUTE\((.*?)post_date\s*\)\s*=\s*[0-9\']*/',
112 '/SECOND\((.*?)post_date\s*\)\s*=\s*[0-9\']*/');
113 foreach( $patterns as $pattern )
114 $where = preg_replace( $pattern, '1=1', $where );
115
116 $prefixp = "{$wpdb->posts}.";
117 $prefixp = ( strpos( $where, $prefixp ) == false ) ? '' : $prefixp;
118
119 $where .= " AND {$prefixp}post_date >= '$stadate' AND {$prefixp}post_date < '$enddate' ";
120 return $where;
121 }
122
123 /**
124 * Converts post dates to Georgian dates for preventing errors
125 *
126 * @param WP_Query $query
127 * @return mixed
128 */
129 function wpp_pre_get_posts( $query ) {
130 global $wpdb;
131
132 $permalink = $query->query;
133 $year = '';
134 $monthnum = '';
135 $day = '';//start
136
137 if ( isset( $permalink['year'] ) )
138 $year = $permalink['year'];
139 if ( isset( $permalink['monthnum'] ) )
140 $monthnum = $permalink['monthnum'];
141 if ( isset( $permalink['day'] ) )
142 $day = $permalink['day'];
143 if($year > 1700)
144 return $query;
145
146 $out = false;
147 $pd = bn_parsidate::getInstance();
148 if ( isset( $permalink['name'] ) ) {
149 $var = $wpdb->get_var( "SELECT post_date FROM {$wpdb->prefix}posts WHERE post_name='{$permalink['name']}' ORDER BY id" );
150 $per = parsidate( 'Y-m-d', $var, 'eng' );
151 //update_option('options', $per );
152 $per = explode( '-', $per );
153 $out = true;
154
155 if ( $year != $per[0] )
156 $out = false;
157 if ( $out && $monthnum != $per[1])
158 $out = false;
159 if ( $out && $day != $per[2])
160 $out = false;
161
162 } elseif(isset($permalink['post_id'])) {
163 $out = true;
164 $var = $wpdb->get_var( "SELECT post_date FROM {$wpdb->prefix}posts WHERE ID={$permalink['post_id']}" );
165 } elseif( ! empty( $year ) && ! empty( $monthnum ) && ! empty( $day ) ) {
166 $out = true;
167 $var = gregdate( 'Y-m-d', "$year-$monthnum-$day" );
168 }elseif(! empty( $year ) && ! empty( $monthnum )){
169 $stadate = $pd->persian_to_gregorian($year,$monthnum,1);
170 $enddate = $pd->persian_to_gregorian($year,$monthnum,$pd->j_days_in_month[($monthnum-1)]);
171 $date_query = array(
172 array(
173 'after' => array(
174 'year' => $stadate[0],
175 'month' => $stadate[1],
176 'day' => $stadate[2] - 1,
177 ),
178 'before' => array(
179 'year' => $enddate[0],
180 'month' => $enddate[1],
181 'day' => $enddate[2] + 1,
182 ),
183 'inclusive' => TRUE,
184 ),
185 );
186 $query->set('date_query', $date_query);
187
188 // commented for get year & month in calander widget
189 // $query->set('year', '');
190 // $query->set('monthnum', '');
191 $out = false;
192
193 }elseif(! empty( $year )){
194 $stadate = $pd->persian_to_gregorian($year,1,1);
195 $enddate = $pd->persian_to_gregorian(($year+1),1,1);
196 $date_query = array(
197 array(
198 'after' => array(
199 'year' => $stadate[0],
200 'month' => $stadate[1],
201 'day' => $stadate[2] - 1,
202 ),
203 'before' => array(
204 'year' => $enddate[0],
205 'month' => $enddate[1],
206 'day' => $enddate[2],
207 ),
208 'inclusive' => TRUE,
209 ),
210 );
211 $query->set('date_query', $date_query);
212 // $query->set('year', '');
213 $out = false;
214 }
215
216 if ( $out ) {
217 preg_match_all( '!\d+!', $var, $matches );
218 $var = $matches[0];
219
220 $query->set( 'year', $var[0] );
221 $query->set( 'monthnum', $var[1] );
222 $query->set( 'day', $var[2] );
223 }
224
225 // $query->set('')
226
227 return $query;
228
229 }
230
231 /**
232 * Convert permalink structure to Jalali format
233 *
234 * @param mixed $perma
235 * @param WP_Post $post
236 * @param bool $leavename
237 * @return string New permalink
238 */
239 function wpp_permalink( $perma, $post, $leavename = false ) {
240 if ( empty( $post->ID ) )
241 return false;
242 if ( $post->post_type == 'page' || $post->post_status == 'static' )
243 return get_page_link( $post->ID );
244 elseif( $post->post_type == 'attachment' )
245 return get_attachment_link( $post->ID );
246 elseif( in_array( $post->post_type, get_post_types( array( '_builtin' => false ) ) ) )
247 return get_post_permalink( $post->ID );
248
249 $permalink = get_option( 'permalink_structure' );
250 preg_match_all( '/%([^\/]*)%/', $permalink, $rewritecode );
251 $rewritecode = $rewritecode[0];
252 if ( '' != $permalink && ! in_array( $post->post_status, array( 'draft', 'pending', 'auto-draft' ) ) ) {
253 if ( $leavename )
254 $rewritecode = array_diff( $rewritecode, array( '%postname%', '%pagename%' ) );
255
256 $date = explode( ' ', parsidate( 'Y m d H i s', $post->post_date, 'eng' ) );
257 $out = array();
258
259 foreach( $rewritecode as $rewrite ) {
260 switch( $rewrite ) {
261 case '%year%':
262 $out[] = $date[0];
263 break;
264 case '%monthnum%':
265 $out[] = $date[1];
266 break;
267 case '%day%':
268 $out[] = $date[2];
269 break;
270 case '%hour%':
271 $out[] = $date[3];
272 break;
273 case '%minute%':
274 $out[] = $date[4];
275 break;
276 case '%second%':
277 $out[] = $date[5];
278 break;
279 case '%post_id%':
280 $out[] = $post->ID;
281 break;
282 case '%postname%':
283 $out[] = $post->post_name;
284 break;
285 case '%category%':
286 $category = '';
287 $cats = get_the_category( $post->ID );
288 if ( $cats ) {
289 usort( $cats, '_usort_terms_by_ID' );
290 $category = $cats[0]->slug;
291 if ( $parent = $cats[0]->parent )
292 $category = get_category_parents( $parent, false, '/', true );
293
294 if($cats[0]->parent != 0)
295 $category .= $cats[0]->slug ;
296 }
297 if ( empty( $category ) ) {
298 $default_category = get_term( get_option( 'default_category' ), 'category' );
299 $category = is_wp_error( $default_category ) ? '' : $default_category->slug;
300 }
301 $out[] = $category;
302 break;
303 case '%author%':
304 $authordata = get_userdata( $post->post_author );
305 $out[] = $authordata->user_nicename;
306 break;
307 case '%pagename%':
308 $out[] = $post->post_name;
309 break;
310 default:
311 unset( $rewritecode[array_search( $rewrite, $rewritecode )] );
312 break;
313 }
314 }
315 $permalink = home_url( str_replace( $rewritecode, $out, $permalink ) );
316 return user_trailingslashit( $permalink, 'single' );
317 } else {
318 return home_url( "?p=$post->ID" );
319 }
320 }
321 ?>