TransWikia.com

Как поменять порядок отображения вариантов сортировки в WordPress?

Stack Overflow на русском Asked on December 28, 2021

Как поменять местами пункты сортировки? Где это делается?
Эти возможности для сортировки я добавил так:

add_filter( 'woocommerce_get_catalog_ordering_args', 'custom_woocommerce_get_catalog_ordering_args' );

function custom_woocommerce_get_catalog_ordering_args( $args ) {
    $orderby_value = isset( $_GET['orderby'] ) ? wc_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );
    if ( 'diametr_asc' == $orderby_value ) {
        $args['orderby'] = 'meta_value_num';
        $args['order'] = 'ASC';
        $args['meta_key'] = 'diametr';
    }
    elseif ( 'diametr_desc' == $orderby_value ) {
        $args['orderby'] = 'meta_value_num';
        $args['order'] = 'DESC';
        $args['meta_key'] = 'diametr';
    }

    return $args;
}

add_filter( 'woocommerce_default_catalog_orderby_options', 'custom_woocommerce_catalog_orderby',5 );
add_filter( 'woocommerce_catalog_orderby', 'custom_woocommerce_catalog_orderby',5 );

function custom_woocommerce_catalog_orderby( $sortby ) {
    $sortby['diametr-desc'] = __('Размер: по убыванию','woocomerce');
    $sortby['diametr-asc'] = __('Размер: по возрастанию','woocomerce');
    return $sortby;
}

введите сюда описание изображения

One Answer

Вы можете воспользоваться array_merge

function custom_woocommerce_catalog_orderby( $sortby ) {
    $mySort = ['diametr-desc' => __('Размер: по убыванию','woocomerce'),
               'diametr-asc' => __('Размер: по возрастанию','woocomerce')];
    return array_merge($mySort, $sortby);
}

Это вставит ваш массив в самое начало, но и так же сместит пункт по умолчанию "Исходная сортировка"

Если вам нужно оставить ее в самом вверху, то нужно писать свое решение, на сколько мне известно в PHP нет встроенной функции которая позволяла бы вставить в ассоциативный массив после определенного ключа.

Пример:

function custom_woocommerce_catalog_orderby( $sortby ) {
    $mySort = ['diametr-desc' => __('Размер: по убыванию','woocomerce'),
               'diametr-asc' => __('Размер: по возрастанию','woocomerce')];
    return array_push_after($sortby,$mySort,0);
}

/**
 * @param array $src
 * @param array $in
 * @param int|string $pos
 * @return array
 */
function array_push_after($src, $in, $pos)
{
    if (is_int($pos)) {
        $R = array_merge(array_slice($src, 0, $pos + 1), $in, array_slice($src, $pos + 1));
    } else {
        foreach ($src as $k => $v) {
            $R[$k] = $v;
            if ($k == $pos) {
                $R = array_merge($R, $in);
            }
        }
    }

    return $R;
}

Answered by Alexy on December 28, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP