Exemplo n.º 1
0
/**
 * 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;
}