Для того, чтобы добавить дополнительные варианты сортировки в ваш магазин WooCommerce, используя метаданные, можно воспользоваться этой статьей Сортировка товаров по имени в WooCommerce
Однако, если вы захотите добавить способы сортировки, которые будут использовать произвольные свойства WooCommerce, тогда эта статья для вас. Свойства товара сохраняются в базе данных в определенном формате и поэтому не представляется возможным получить к ним доступ напрямую, используя свойство WordPress orderby.
Для того, чтобы использовать эти свойства в фильтрах WooCommerce, они (свойства) должны быть сохранены как мета данные.
Когда запись, которая содержит какие-либо произвольные свойства, обновляется, отправляемые данные ($_REQUEST) содержат следующее:
8 | 'attribute_position' => |
13 | 'attribute_is_taxonomy' => |
Подход, который мы использовали, заключается в том, чтобы получить отправляемые свойства и сохранить их как метаданные для записи. После этого, код упомянутый в статье выше, с небольшой модификацией, прекрасно справился с задачей сортировки по произвольным свойствам. В качестве примера было взято свойство pa_pub-year — год публикации.
Просто добавьте код в файл functions.php вашей темы или в плагин для сайта WordPress:
7 | add_filter( 'woocommerce_get_catalog_ordering_args' , 'custom_woocommerce_get_catalog_ordering_args' ); |
9 | function custom_woocommerce_get_catalog_ordering_args( $args ) { |
12 | if (isset( $_GET [ 'orderby' ])) { |
13 | switch ( $_GET [ 'orderby' ]) : |
15 | $args [ 'order' ] = 'ASC' ; |
16 | $args [ 'meta_key' ] = 'pa_pub-year' ; |
17 | $args [ 'orderby' ] = 'meta_value_num' ; |
27 | add_filter( 'woocommerce_catalog_orderby' , 'custom_woocommerce_catalog_orderby' ); |
29 | function custom_woocommerce_catalog_orderby( $sortby ) { |
30 | $sortby [ 'pa_pub-year' ] = 'Сортировка по году: от старых к новым' ; |
37 | add_action( 'save_post' , 'save_woocommerce_attr_to_meta' ); |
38 | function save_woocommerce_attr_to_meta( $post_id ) { |
41 | foreach ( $_REQUEST [ 'attribute_names' ] as $index => $value ) { |
42 | update_post_meta( $post_id , $value , $_REQUEST [ 'attribute_values' ][ $index ] ); |
По всем вопросам и отзывам просьба писать в комментарии ниже.
Не забывайте, по возможности, оценивать понравившиеся записи количеством звездочек на ваше усмотрение.
VN:F [1.9.22_1171]
Rating: 4.9/5 (12 votes cast)