Пытаюсь реализовать фильтр товаров самостоятельно, но сортировка по цене отказывается работать, в чем причина?

Рейтинг: 0Ответов: 2Опубликовано: 30.01.2023
<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']
        );

все работает кроме сортировки по цене, не пойму, в чем причина...

Ответы

▲ 0

Вариант решения:

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

▲ 0

Нашла проблему, которая абсолютно, как оказалось, к коду не относится, это плагин Post Types Order.... В общем отключила его и сортировка заработала на отлично.