Plugin Directory

Changeset 2028748


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

Fix shortcode date filtering

Location:
sermon-manager-for-wordpress/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • sermon-manager-for-wordpress/trunk/composer.json

    r2006081 r2028748  
    66    "wp-coding-standards/wpcs": "*",
    77    "phpunit/phpunit": "^7"
     8  },
     9  "require": {
     10    "ext-calendar": "*"
    811  }
    912}
  • sermon-manager-for-wordpress/trunk/includes/class-sm-shortcodes.php

    r2028461 r2028748  
    761761     * @type int    $atts ['year']                4 digit year (e.g. 2011).
    762762     * @type int    $atts ['month']               Month number (from 1 to 12).
    763      * @type int    $atts ['week']                Week of the year (from 0 to 53).
    764      * @type int    $atts ['day']                 Day of the month (from 1 to 31).
    765763     * @type string $atts ['after']               Date to retrieve posts after. Accepts strtotime()-compatible string.
    766764     * @type string $atts ['before']              Date to retrieve posts before. Accepts strtotime()-compatible string.
     
    798796            'year'               => '',
    799797            'month'              => '',
    800             'week'               => '',
    801             'day'                => '',
    802798            'after'              => '',
    803799            'before'             => '',
     
    851847            'order'          => $args['order'],
    852848            'paged'          => get_query_var( 'paged' ),
    853             'year'           => $args['year'],
    854             'month'          => $args['month'],
    855             'week'           => $args['week'],
    856             'day'            => $args['day'],
    857             'after'          => $args['after'],
    858             'before'         => $args['before'],
    859849        );
    860850
     
    899889
    900890        $query_args['orderby'] = $args['orderby'];
     891
     892        // Add year month etc filter, adjusted for sermon date.
     893        if ( 'meta_value_num' === $query_args['orderby'] ) {
     894            $date_args = array(
     895                'year',
     896                'month',
     897            );
     898
     899            foreach ( $date_args as $date_arg ) {
     900                if ( ! isset( $args[ $date_arg ] ) || ! $args[ $date_arg ] ) {
     901                    continue;
     902                }
     903
     904                $query_args['meta_compare'] = 'BETWEEN';
     905
     906                switch ( $date_arg ) {
     907                    case 'year':
     908                        $year = $args['year'];
     909
     910                        $query_args['meta_value_num'] = array(
     911                            strtotime( $year . '-01-01' ),
     912                            strtotime( $year . '-12-31' ),
     913                        );
     914                        break;
     915                    case 'month':
     916                        $year  = $args['year'] ?: date( 'Y' );
     917                        $month = intval( $args['month'] ) ?: date( 'm' );
     918
     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 ) ),
     922                        );
     923                        break;
     924                }
     925            }
     926        }
     927
     928        // Add before and after parameters.
     929        if ( 'meta_value_num' === $query_args['orderby'] && ( $args['before'] || $args['after'] ) ) {
     930            $before = null;
     931            $after  = null;
     932
     933            if ( $args['before'] ) {
     934                $before = strtotime( $args['before'] );
     935            }
     936
     937            if ( $args['after'] ) {
     938                $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            }
     951        }
    901952
    902953        // If we should show just specific sermons.
  • sermon-manager-for-wordpress/trunk/readme.txt

    r2028461 r2028748  
    126126* New: Add compatibility for Pro theme
    127127* New: Add a setting to change default sermon ordering (in "Display" tab)
     128* Fix: Date filtering in shortcode
    128129* Fix: Improve [latest_series] shortcode
    129130* Fix: Service Type filter in backend not working when slug is different from default
Note: See TracChangeset for help on using the changeset viewer.