/** * return last day of month * @param int $year * @param int $month * @return int number of day in month * @since 5.0.0 */ function jday_of_month($year, $month) { static $jdate_month_days = array(0, 31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29); if (is_jalali_leap_year($year) && $month == 12) { return 30; } $month = (int) $month; return $jdate_month_days[$month]; }
/** * pre get posts filter handler * @param object $post * @see wp-includes\query.php 2353 */ function ztjalali_pre_get_posts_filter_fn($query) { global $wpdb; $query_vars = $query->query; $year = $monthnum = $day = ""; if (isset($query_vars['m']) and !empty($query_vars['m'])) { $year = (int) substr($query_vars['m'], 0, 4); if ($year < 1700) { $monthnum = (int) substr($query_vars['m'], 4, 2); if (empty($monthnum)) { $start_date = jalali_to_gregorian($year, 1, 1); $end_date = jalali_to_gregorian($year, 12, jday_of_month($year, 12)); } else { $day = (int) substr($query_vars['m'], 6, 2); if (empty($day)) { $start_date = jalali_to_gregorian($year, $monthnum, 1); $end_date = jalali_to_gregorian($year, $monthnum, jday_of_month($year, $monthnum)); } else { $end_date = $start_date = jalali_to_gregorian($year, $monthnum, $day); } } $date_query = array(array('after' => array('year' => $start_date[0], 'month' => $start_date[1], 'day' => $start_date[2]), 'before' => array('year' => $end_date[0], 'month' => $end_date[1], 'day' => $end_date[2]), 'inclusive' => TRUE)); $query->set('date_query', $date_query); $query->set('m', ''); } return $query; } /* ------------------------------------------------------ */ if (isset($query_vars['year'])) { $year = $query_vars['year']; } if (isset($query_vars['monthnum'])) { $monthnum = $query_vars['monthnum']; } if (isset($query_vars['day'])) { $day = $query_vars['day']; } if ($year > 1700) { return $query; } if (isset($query_vars['name'])) { $post_date = $wpdb->get_var($wpdb->prepare("select post_date from {$wpdb->posts} where post_name=%s order by ID", $query_vars['name'])); $Date = explode('-', date('Y-m-d', strtotime($post_date))); $jDate = gregorian_to_jalali($Date[0], $Date[1], $Date[2]); if ($year == $jDate[0]) { $query->set('year', $Date[0]); } if ($monthnum == $jDate[1]) { $query->set('monthnum', $Date[1]); } if ($day == $jDate[2]) { $query->set('day', $Date[2]); } return $query; } if (isset($query_vars['post_id'])) { $post_date = $wpdb->get_var($wpdb->prepare("select post_date from {$wpdb->posts} where ID=%d", $query_vars['post_id'])); $cDate = getdate(strtotime($post_date)); if (!empty($year)) { $query->set('year', $cDate['year']); } if (!empty($monthnum)) { $query->set('monthnum', $cDate['mon']); } if (!empty($day)) { $query->set('day', $cDate['mday']); } return $query; } if (!empty($year) and !empty($monthnum) and !empty($day)) { $post_date = jalali_to_gregorian($year, $monthnum, $day); $query->set('year', $post_date[0]); $query->set('monthnum', $post_date[1]); $query->set('day', $post_date[2]); return $query; } if (!empty($year) and !empty($monthnum)) { $start_date = jalali_to_gregorian($year, $monthnum, 1); $end_date = jalali_to_gregorian($year, $monthnum, jday_of_month($year, $monthnum)); $date_query = array(array('after' => array('year' => $start_date[0], 'month' => $start_date[1], 'day' => $start_date[2]), 'before' => array('year' => $end_date[0], 'month' => $end_date[1], 'day' => $end_date[2]), 'inclusive' => TRUE)); $query->set('date_query', $date_query); $query->set('year', ''); $query->set('monthnum', ''); // $post_date = jalali_to_gregorian($year, $monthnum, 15); // $query->set('year', $post_date[0]); // $query->set('monthnum', $post_date[1]); return $query; } if (!empty($year)) { $start_date = jalali_to_gregorian($year, 1, 1); if (is_jalali_leap_year($year)) { $end_date = jalali_to_gregorian($year, 12, 30); } else { $end_date = jalali_to_gregorian($year, 12, 29); } $date_query = array(array('after' => array('year' => $start_date[0], 'month' => $start_date[1], 'day' => $start_date[2]), 'before' => array('year' => $end_date[0], 'month' => $end_date[1], 'day' => $end_date[2]), 'inclusive' => TRUE)); $query->set('date_query', $date_query); $query->set('year', ''); return $query; } return $query; }