Изменение алфавитной сортировки атрибутов / вариаций на странице продукта в магазине Woocommerce

У меня есть магазин Woocommerce, где различные атрибуты / варианты упорядочены по алфавиту, когда вы нажимаете «выбрать» на странице продукта. В настоящее время я пытаюсь выяснить, как я могу сортировать их на основе упорядочения в бэкэнде.

В частности: В настоящее время Small размещается после Large, что не кажется интуитивным.

Любая помощь была бы более чем приветствуется. Я уже больше часа нахожусь в Интернете и не могу найти решение.

HTML / PHP моего текущего шаблона выглядит следующим образом:

<?php if ( is_array( $options ) ) { if ( isset( $_REQUEST[ 'attribute_' . sanitize_title( $name ) ] ) ) { $selected_value = $_REQUEST[ 'attribute_' . sanitize_title( $name ) ]; } elseif ( isset( $selected_attributes[ sanitize_title( $name ) ] ) ) { $selected_value = $selected_attributes[ sanitize_title( $name ) ]; } else { $selected_value = ''; } // Get terms if this is a taxonomy - ordered if ( taxonomy_exists( $name ) ) { $orderby = wc_attribute_orderby( $name ); switch ( $orderby ) { case 'name' : $args = array( 'orderby' => 'name', 'hide_empty' => false, 'menu_order' => false ); break; case 'id' : $args = array( 'orderby' => 'id', 'order' => 'ASC', 'menu_order' => false, 'hide_empty' => false ); break; case 'menu_order' : $args = array( 'menu_order' => 'ASC', 'hide_empty' => false ); break; } $terms = get_terms( $name, $args ); foreach ( $terms as $term ) { if ( ! in_array( $term->slug, $options ) ) continue; echo '<option value="' . esc_attr( $term->slug ) . '" ' . selected( sanitize_title( $selected_value ), sanitize_title( $term->slug ), false ) . '>' . apply_filters( 'woocommerce_variation_option_name', $term->name ) . '</option>'; } } else { foreach ( $options as $option ) { echo '<option value="' . esc_attr( sanitize_title( $option ) ) . '" ' . selected( sanitize_title( $selected_value ), sanitize_title( $option ), false ) . '>' . esc_html( apply_filters( 'woocommerce_variation_option_name', $option ) ) . '</option>'; } } } ?> 

Возможно, вы уже поняли решение, поскольку это довольно просто (хотя я узнал, потратив 5-6 часов), но если вы этого не сделали, вот оно.

  1. На панели администратора выберите Продукты >> Атрибуты.
  2. Там отредактируйте атрибут «Размер» и измените порядок сортировки по умолчанию на «Пользовательский заказ» и сохраните его.
  3. Вернитесь на страницу «Атрибуты» и нажмите «Настроить элементы» для атрибута «Размер». Теперь в таблице значений перетащите элементы вверх или вниз в любом порядке, который вы хотите отобразить на интерфейсе.

Напр. в вашем случае перетащите Small в верхнюю часть таблицы & Большой на дно, вот и все. Нет опции сохранения, поэтому не путайте ее, везде, где вы перетаскиваете какой-либо элемент в списке, он будет храниться и сохраняться.

У меня есть решение для вашего вопроса. Просто войдите в FTP, затем перейдите в папку /wp-content/plugins/woocommerce/includes/admin/post-types/meta-boxes/class-wc-meta-box-product-data.php

В этой строке no 885 заменить следующим массивом:

 $args = array( 'post_type'=>'product_variation', 'post_status' => array( 'private', 'publish' ), 'posts_per_page' => -1, 'meta_key' => 'attribute_pa_woo-color', //rename with your attributes 'post_parent' => $post->ID, 'meta_query' => array( array( 'key' => 'attribute_pa_woo-color' //rename with your attributes ), array( 'key' => 'attribute_pa_woo-size' //rename with your attributes ) ) ); 

В настоящее время он будет сортировать атрибуты вручную.