Я пытаюсь настроить пользовательский сортировку на моем сайте WooCommerce, в частности, я хочу сортировать по атрибуту - размер - по всем моим элементам. Я нашел учебник, чтобы помочь с этим - http://new.galalaly.me//2013/05/woocommerce-sort-by-custom-attributes/ - и я думал, что я следовал за ним довольно хорошо, но похоже, что код может быть устаревшим?WooCommerce Custom Sort Plugin
Я могу получить сайт для распознавания моего пользовательского сортировки, но на самом деле он не сортирует вещи по размеру, он просто по умолчанию возвращается в алфавитном порядке названия продукта. Тем не менее, он распознает только те элементы, которые были добавлены или обновлены с момента добавления кода из учебника (который сохраняет атрибуты для метаданных, чтобы мы могли сортировать их). Поэтому, если элементы являются более старыми элементами, тогда, когда я сортирую по размеру, они даже не отображаются в результатах. Настолько ясно, что код работает в некоторой степени, я просто не могу понять, почему он не сортирует по размеру.
Я проверил, что order_pa_size существует в базе данных и имеет вещи в правильном порядке, и это так. Я уверен, что я просто что-то пропустил, но, пробовав все, о чем я могу думать, я в тупике. Любая помощь будет принята с благодарностью. Вот мой код -
/************* Add sorting by attributes **************/
// Code from http://new.galalaly.me//2013/05/woocommerce-sort-by-custom-attributes/
/**
* Defines the criteria for sorting with options defined in the method below
*/
add_filter('woocommerce_get_catalog_ordering_args', 'custom_woocommerce_get_catalog_ordering_args');
function custom_woocommerce_get_catalog_ordering_args($args) {
global $wp_query;
// Changed the $_SESSION to $_GET
if (isset($_GET['orderby'])) {
switch ($_GET['orderby']) :
case 'pa_size' :
$args['order'] = 'ASC';
$args['meta_key'] = 'pa_size';
$args['orderby'] = 'order_pa_size';
break;
endswitch;
}
return $args;
}
/**
* Adds the sorting options to dropdown list .. The logic/criteria is in the method above
*/
add_filter('woocommerce_catalog_orderby', 'custom_woocommerce_catalog_orderby');
function custom_woocommerce_catalog_orderby($sortby) {
unset($sortby['popularity']);
unset($sortby['rating']);
unset($sortby['price']);
unset($sortby['price-desc']);
$sortby['pa_size'] = 'Sort by Size - Small to Large';
return $sortby;
}
/**
* Save custom attributes as post's meta data as well so that we can use in sorting and searching
*/
add_action('save_post', 'save_woocommerce_attr_to_meta');
function save_woocommerce_attr_to_meta($post_id) {
// Get the attribute_names .. For each element get the index and the name of the attribute
// Then use the index to get the corresponding submitted value from the attribute_values array.
if(isset($_REQUEST['attribute_names'])){
foreach($_REQUEST['attribute_names'] as $index => $value) {
update_post_meta($post_id, $value, $_REQUEST['attribute_values'][$index]);
}
}
}
/************ End of Sorting ***************************/