Пытаюсь реализовать фильтр товаров самостоятельно, но сортировка по цене отказывается работать, в чем причина?
<form action="<?php echo site_url() ?>/wp-admin/admin-ajax.php" method="POST" id="post-date-filter">
<?php
if( $terms = get_terms( 'product_cat', 'orderby=name' ) ) :
foreach ( $terms as $term ) :
echo '<label><input type="checkbox" name="categoryfilter[]" value="' . $term->term_id . '">' . $term->name . '</label>';
endforeach;
endif;
?>
<label>
<input type="radio" name="orderby" value="ASC" /> Price: Ascending
</label>
<label>
<input type="radio" name="orderby" value="DESC" /> Price: Descending
</label>
<button>Применить фильтр</button>
<input type="hidden" name="action" value="customfilter">
</form>
в function.php:
function posts_filters(){
if( isset( $_POST['categoryfilter'] ) )
$args['tax_query'] = array(
array(
'taxonomy' => 'product_cat',
'field' => 'id',
'terms' => $_POST['categoryfilter'],
'operator' => 'in'
)
);
if( isset( $_POST['orderby'] ) )
$args['meta_query'][] = array(
'key' => '_price',
'orderby' => 'meta_value_num',
'order' => $_POST['orderby']
);
все работает кроме сортировки по цене, не пойму, в чем причина...
Ответы (2 шт):
Автор решения: description entity
→ Ссылка
Вариант решения:
function posts_filters(){
$args = array();
if( isset( $_POST['categoryfilter'] ) ) {
$args['tax_query'] = array(
array(
'taxonomy' => 'product_cat',
'field' => 'id',
'terms' => $_POST['categoryfilter'],
'operator' => 'IN'
)
);
}
if( isset( $_POST['orderby'] ) ) {
$args['meta_key'] = '_price';
$args['orderby'] = 'meta_value_num';
$args['order'] = $_POST['orderby'];
}
$query = new WP_Query( $args );
// ... код для вывода результатов фильтрации ...
}
В этом варианте сначала определяется пустой массив $args для хранения аргументов запроса. Если выбраны категории фильтрации, то они добавляются в $args с помощью tax_query. Если выбран порядок сортировки, то добавляются в $args ключ meta_key со значением _price, orderby со значением meta_value_num и order с выбранным значением. Затем создается объект WP_Query с аргументами $args и выполняется запрос.
Автор решения: Алена
→ Ссылка
Нашла проблему, которая абсолютно, как оказалось, к коду не относится, это плагин Post Types Order.... В общем отключила его и сортировка заработала на отлично.