Я заметил, что моя пользовательская опция сортировки отлично работает при просмотре магазина, но не в результатах поиска. Текущий код соответствует множеству доступных примеров:
// Add "Sort by discount" to sorting options. Defaults to biggest to smallest discount.
add_filter('woocommerce_get_catalog_ordering_args'
,'mycode_woocommerce_add_salediscount_to_catalog_ordering_args'
);
function mycode_woocommerce_add_salediscount_to_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 ( 'discount' == $orderby_value ) {
$args['orderby'] = 'meta_value_num';
$args['order'] = 'DESC';
$args['meta_key'] = 'discount_amount';
}
return $args;
}
add_filter('woocommerce_default_catalog_orderby_options'
,'mycode_woocommerce_add_salediscount_to_catalog_orderby'
);
add_filter('woocommerce_catalog_orderby'
,'mycode_woocommerce_add_salediscount_to_catalog_orderby'
);
function mycode_woocommerce_add_salediscount_to_catalog_orderby( $sortby ) {
$sortby['discount'] = __( 'Sort by discount', 'woocommerce' );
return $sortby;
}
Этот код, который я добавил в my_custom_code.php
, который является простым плагином для моего собственного кода.
Сортировка основана на мета-значении каждого товара в моем магазине.
При использовании на странице результатов поиска вместо пользовательского заказа порядок соответствует значению.
Просматривая код WC, который управляет упорядочением, я вижу, что is_search()
вызывается в нескольких местах, при этом упорядочение сбрасывается до «релевантности», но параметры сортировки по умолчанию могут переопределить это, и они все еще работают (например, сортировка по цене все еще работает).
Так что я представляю, что мне нужно немного изменить код, чтобы он вел себя так же, как параметры поиска по умолчанию, но я не вижу, как это сделать.
Кто-нибудь знает?
Спасибо!