按用户元值日期

时间:2017-02-23 16:03:21

标签: php wordpress woocommerce custom-post-type datefilter

我想根据用户元数据过滤WooCommerce订单列表。这些产品是为12个月的周期运行的某种订阅。

当客户订购产品(订阅)时,订阅的开始日期存储在用户meta_key中,例如international_subscription_start_date

现在我想显示所有订单,从现在起11个月内international_subscription_start_date

我成功设置了下拉列表:

add_action('restrict_manage_posts','add_subscription_filter_to_shop_order_posts_administration');
function add_subscription_filter_to_shop_order_posts_administration(){
    global $post_type;
    if($post_type == 'shop_order'){

    $values = array(
        'Inter. Subs < 1M' => 'international_subscription_start_date_lt_1M', 
        'DE. Subs < 1M'    => 'germany_subscription_start_date_lt_1M',
        'All Subs < 1M'    => 'pvm_all_substriprions_lt_1M',
        'Inter. Subs'      => 'international_subscription_start_date',
        'DE. Subs'         => 'germany_subscription_start_date',
        'All Subs'         => 'pvm_all_substriprions'
    );
    ?>

    <select name="subscriptions_admin_filter">
    <option value=""><?php _e('All Orders', 'pv-mag'); ?></option>
    <?php
        $current_v = isset($_GET['subscriptions_admin_filter']) ? $_GET['subscriptions_admin_filter'] : '';
        foreach ($values as $label => $value) {
            printf
                (
                    '<option value="%s"%s>%s</option>',
                    $value,
                    $value == $current_v ? ' selected="selected"' : '',
                    $label
                );
            }
    ?>
    </select>
    <?php
    }
}

现在在pre_get_posts我执行以下操作:

add_action('pre_get_posts','add_subscriptions_filter_to_shop_order_page');
function add_subscriptions_filter_to_shop_order_page($query){
global $post_type, $pagenow; 

if($pagenow == 'edit.php' && $post_type == 'shop_order'){

    if(isset($_GET['subscriptions_admin_filter']) && $_GET['subscriptions_admin_filter'] != ''){

        $today_minus_11_month = date('Y-m-d', strtotime('-11 month'));
        $today_plus_11_month = date('Y-m-d', strtotime('+11 month'));
        $subs_type = $_GET['subscriptions_admin_filter'];

        switch ($subs_type) {
            case 'international_subscription_start_date_lt_1M':
                $subs_typeA = 'international_subscription_start_date';
                $subs_typeB = 'international_subscription_start_date';
                $date_comp = $today_minus_11_month;
                break;
            case 'germany_subscription_start_date_lt_1M':
                $subs_typeA = 'germany_subscription_start_date';
                $subs_typeB = 'germany_subscription_start_date';
                $date_comp = $today_minus_11_month;
                break;
            case 'pvm_all_substriprions_lt_1M':
                $subs_typeA = 'international_subscription_start_date';
                $subs_typeB = 'germany_subscription_start_date';
                $date_comp = $today_minus_11_month;
                break;
            case 'international_subscription_start_date':
                $subs_typeA = 'international_subscription_start_date';
                $subs_typeB = 'international_subscription_start_date';
                $date_comp = $today_plus_11_month;
                break;
            case 'germany_subscription_start_date':
                $subs_typeA = 'germany_subscription_start_date';
                $subs_typeB = 'germany_subscription_start_date';
                $date_comp = $today_plus_11_month;
                break;
            case 'pvm_all_substriprions':
                $subs_typeA = 'international_subscription_start_date';
                $subs_typeB = 'germany_subscription_start_date';
                $date_comp = $today_plus_11_month;
                break;              
            default:
                break;
        };

        $meta_query = $query->get('meta_query');
        if( empty($meta_query) ) $meta_query = array();

        $meta_query[] = array(
            'relation' => 'OR',
            array(
                'key' => $subs_typeA,
                'value' => $date_comp,
                'compare' => '<=',
                'type' => 'DATE'
            ),
            array(
                'key' => $subs_typeB,
                'value' => $date_comp,
                'compare' => '<=',
                'type' => 'DATE'
            )
        );

        $query->set('meta_query',$meta_query);
        //$query->set('suppress_filters', true);
        //$query->set('post_type', 'shop_order');

    }
}
}

当我应用过滤器时,不会显示任何订单。当我检查查询(var_dump)时,meta_query参数被正确传递。

0 个答案:

没有答案