Есть ли способ решить проблемы с нумерацией страниц в WooCommerce при пользовательской сортировке товаров? У меня есть пользовательские мета-коды продукта для ширины, например 2.5; несколько продуктов могут иметь одинаковое значение ширины. Проблема в том, что я могу указать товар XYZ на странице 1, а затем нажать на страницу 2 и снова увидеть товар XYZ.
У меня есть приведенный ниже код, который хорошо работает для сортировки, но не приводит к уникальная нумерация страниц. Я пробовал добавить отдельное значение, сортировать по десятичной ширине, а затем по названию продукта, чтобы задать второй критерий сортировки, но ничего не помогло.
Если у кого-то есть идеи по поводу уникальной нумерации продуктов, я буду очень признателен.
add_filter( 'woocommerce_catalog_orderby', 'add_custom_sorting_option' );
function add_custom_sorting_option( $sortby ) {
$sortby['decimalwidth_asc'] = 'Width: Ascending';
$sortby['decimalwidth_desc'] = 'Width: Descending';
return $sortby;
}
add_filter( 'woocommerce_get_catalog_ordering_args', 'custom_sorting_query_args', 10, 3 );
function custom_sorting_query_args( $args, $orderby, $order ) {
switch ( $orderby ) {
case 'decimalwidth_asc':
$args['orderby'] = 'meta_value_num';
$args['order'] = 'ASC';
$args['meta_key'] = 'decimalwidth';
break;
case 'decimalwidth_desc':
$args['orderby'] = 'meta_value_num';
$args['order'] = 'DESC';
$args['meta_key'] = 'decimalwidth';
break;
}
return $args;
}
add_filter( 'get_meta_sql', 'custom_sorting_float_meta_query', 10, 6 );
function custom_sorting_float_meta_query( $sql, $queries, $type, $primary_table, $primary_id_column, $context ) {
if ( ! empty( $context->query_vars['orderby'] ) && $context->query_vars['orderby'] == 'meta_value_num' ) {
if ( ! empty( $context->query_vars['meta_key'] ) && $context->query_vars['meta_key'] == 'decimalwidth' ) {
$sql['orderby'] = str_replace( 'ORDER BY', 'ORDER BY CAST(' . $primary_table . '.meta_value AS DECIMAL(10,2))', $sql['orderby'] );
}
}
return $sql;
}
add_filter('woocommerce_default_catalog_orderby', 'custom_default_catalog_orderby');
add_filter('woocommerce_get_catalog_ordering_args', 'custom_catalog_ordering_args');
function custom_default_catalog_orderby($default_orderby) {
return 'decimalwidth_asc';
}
function custom_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 ($orderby_value == 'decimalwidth_asc') {
$args['orderby'] = 'meta_value_num';
$args['order'] = 'ASC';
$args['meta_key'] = 'decimalwidth';
}
return $args;
}
add_filter('woocommerce_catalog_orderby', 'custom_catalog_orderby_options');
function custom_catalog_orderby_options($sortby) {
unset($sortby['popularity']);
unset($sortby['date']);
unset($sortby['price']);
unset($sortby['price-desc']);
return $sortby;
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... tion-issue
Проблема с пользовательской сортировкой и нумерацией страниц продуктов WooCommerce ⇐ Php
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение