Plugin Directory

Changeset 2028753


Ignore:
Timestamp:
02/11/2019 06:45:38 PM (7 years ago)
Author:
nikolam
Message:

Fix shortcode date filtering

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sermon-manager-for-wordpress/trunk/includes/class-sm-shortcodes.php

    r2028748 r2028753  
    873873            case 'preached':
    874874            case 'date_preached':
     875            case '':
    875876                $args['orderby'] = 'meta_value_num';
    876877
    877                 $query_args['meta_key']       = 'sermon_date';
    878                 $query_args['meta_value_num'] = time();
    879                 $query_args['meta_compare']   = '<=';
     878                $query_args['meta_query'] = array(
     879                    array(
     880                        'key'     => 'sermon_date',
     881                        'value'   => time(),
     882                        'type'    => 'numeric',
     883                        'compare' => '<=',
     884                    ),
     885                );
    880886                break;
    881887            case 'published':
     
    902908                }
    903909
    904                 $query_args['meta_compare'] = 'BETWEEN';
     910                // Reset the query.
     911                $query_args['meta_query'] = array();
    905912
    906913                switch ( $date_arg ) {
     
    908915                        $year = $args['year'];
    909916
    910                         $query_args['meta_value_num'] = array(
    911                             strtotime( $year . '-01-01' ),
    912                             strtotime( $year . '-12-31' ),
     917                        $query_args['meta_query'][] = array(
     918                            'key'     => 'sermon_date',
     919                            'value'   => array(
     920                                strtotime( $year . '-01-01' ),
     921                                strtotime( $year . '-12-31' ),
     922                            ),
     923                            'compare' => 'BETWEEN',
    913924                        );
    914925                        break;
     
    917928                        $month = intval( $args['month'] ) ?: date( 'm' );
    918929
    919                         $query_args['meta_value_num'] = array(
    920                             strtotime( $year . '-' . $args['month'] . '-' . '01' ),
    921                             strtotime( $year . '-' . $month . '-' . cal_days_in_month( CAL_GREGORIAN, $month, $year ) ),
     930                        $query_args['meta_query'][] = array(
     931                            'key'     => 'sermon_date',
     932                            'value'   => array(
     933                                strtotime( $year . '-' . $args['month'] . '-' . '01' ),
     934                                strtotime( $year . '-' . $month . '-' . cal_days_in_month( CAL_GREGORIAN, $month, $year ) ),
     935                            ),
     936                            'compare' => 'BETWEEN',
    922937                        );
    923938                        break;
     
    928943        // Add before and after parameters.
    929944        if ( 'meta_value_num' === $query_args['orderby'] && ( $args['before'] || $args['after'] ) ) {
    930             $before = null;
    931             $after  = null;
     945            if ( ! isset( $query_args['meta_query'] ) ) {
     946                $query_args['meta_query'] = array();
     947            }
    932948
    933949            if ( $args['before'] ) {
    934950                $before = strtotime( $args['before'] );
     951
     952                $query_args['meta_query'][] = array(
     953                    'key'     => 'sermon_date',
     954                    'value'   => $before,
     955                    'compare' => '<=',
     956                );
    935957            }
    936958
    937959            if ( $args['after'] ) {
    938960                $after = strtotime( $args['after'] );
    939             }
    940 
    941             if ( $before && $after ) {
    942                 $query_args['meta_compare']   = 'BETWEEN';
    943                 $query_args['meta_value_num'] = array( $after, $before );
    944             } elseif ( $after ) {
    945                 $query_args['meta_compare']   = '>=';
    946                 $query_args['meta_value_num'] = $after;
    947             } elseif ( $before ) {
    948                 $query_args['meta_compare']   = '<=';
    949                 $query_args['meta_value_num'] = $before;
    950             }
     961
     962                $query_args['meta_query'][] = array(
     963                    'key'     => 'sermon_date',
     964                    'value'   => $after,
     965                    'compare' => '=>',
     966                );
     967            }
     968        }
     969
     970        // Use all meta queries.
     971        if ( isset( $query_args['meta_query'] ) && count( $query_args['meta_query'] ) > 1 ) {
     972            $query_args['meta_query']['relation'] = 'AND';
    951973        }
    952974
Note: See TracChangeset for help on using the changeset viewer.