Фильтрация заказов WooCommerce по дате мета-значения пользователя

Я хочу отфильтровать список заказов WooCommerce в соответствии с метаданными пользователя. Продуктами являются какие-то подписки, работающие на период 12 месяцев.

Когда клиент заказывает продукт (подписку), начальная дата подписки сохраняется в пользовательском meta_key, например, international_subscription_start_date,

Теперь я хочу показать все заказы, которые имеют international_subscription_start_date старше 11 месяцев

Я успешно установил выпадающий список:

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 передаются правильно.

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]