Сортировка продуктов Woocommerce по настраиваемым полям - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть продукт с различными пользовательскими типами постов: продолжительность и максимальная высота.

Я создал функцию для фильтра, которую я могу использовать на странице продукта, но продукты без пользовательских полей располагаются раньше продуктов с пользовательским полем.,Пример: у меня есть 3 продукта: Product1, Product2 и Product3, продукты 1 и 2 имеют длительность, равную 10 и 20 соответственно.Когда я выбираю их фильтрацию duration_asc, я получаю Product3 (без поля), Product1, Product2.

Вот мой код:

add_filter( 'woocommerce_get_catalog_ordering_args', 'add_custom_postmeta_ordering_args' );
function add_custom_postmeta_ordering_args( $sort_args ) {
    $orderby_value = isset( $_GET['orderby'] ) ? wc_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );

    switch( $orderby_value ) 
    {
        case 'duration_desc':
            $sort_args['orderby'] = 'meta_value_num';
            $sort_args['order'] = 'desc';
            $sort_args['meta_key'] = 'duration';
            break;

        case 'duration_asc':
            $sort_args['orderby'] = 'meta_value_num';
            $sort_args['order'] = 'asc';
            $sort_args['meta_key'] = 'duration';
            break;

        case 'maxheight_desc':
            $sort_args['orderby'] = 'meta_value_num';
            $sort_args['order'] = 'asc';
            $sort_args['meta_key'] = 'maxheight';
            break;

        case 'maxheight_asc':
            $sort_args['orderby'] = 'meta_value_num';
            $sort_args['order'] = 'asc';
            $sort_args['meta_key'] = 'maxheight';
            break;
    }
    return $sort_args;
}

add_filter( 'woocommerce_default_catalog_orderby_options', 'add_custom_new_postmeta_orderby' );
add_filter( 'woocommerce_catalog_orderby', 'add_custom_new_postmeta_orderby' );
function add_custom_new_postmeta_orderby( $sortby ) {
    // Adjust the text as desired
    $sortby['duration_desc'] = __( 'Duration - highest first', 'strings' );
    $sortby['duration_asc'] = __( 'Duration - lowest first', 'strings' );
    $sortby['maxheight_desc'] = __( 'From max altitude', 'strings' );
    $sortby['maxheight_asc'] = __( 'From min altitude', 'strings' );

    return $sortby;
}

Есть идеи, как этого добиться?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...