Массовое изменение порядка раскрытия атрибутов в переменных продуктах WooCommerce - PullRequest
1 голос
/ 03 апреля 2019

У меня есть 2 атрибута товара: цвет и размер .Они отображаются в таком порядке.Мне нужно переключить их, чтобы размер всегда был на первом месте.

Файл WooCommerce single-product/add-to-cart/variable.php, кажется, отвечает за вывод, но я не достаточно опытен, чтобы предложить изменение этого кода, чтобы он был в порядкена attribute_id, attribute_name или в обратном порядке по умолчанию.Сейчас они, кажется, упорядочены по таксономическим терминам или слагаемым, а не по фактическим данным атрибутов, изменение идентификатора или имени атрибутов в таблице woocommerce_attribute_taxonomies не помогает.

Пожалуйста, помогите мне разобраться в этом.

Я искал это без удачи, ответ мог бы быть скрыт среди многих вопросов о порядке определения атрибутов, но это НЕ то, что я здесь задаю.

РЕДАКТИРОВАТЬ: у меня есть тысячи продуктов, поэтому ручное переупорядочение для каждого продукта не будет работать.

$attribute_keys = array_keys( $attributes );

do_action( 'woocommerce_before_add_to_cart_form' ); ?>

<form class="variations_form cart" action="<?php echo esc_url( apply_filters( 'woocommerce_add_to_cart_form_action', $product->get_permalink() ) ); ?>" method="post" enctype='multipart/form-data' data-product_id="<?php echo absint( $product->get_id() ); ?>" data-product_variations="<?php echo htmlspecialchars( wp_json_encode( $available_variations ) ); // WPCS: XSS ok. ?>">
    <?php do_action( 'woocommerce_before_variations_form' ); ?>

    <?php if ( empty( $available_variations ) && false !== $available_variations ) : ?>
        <p class="stock out-of-stock"><?php esc_html_e( 'This product is currently out of stock and unavailable.', 'woocommerce' ); ?></p>
    <?php else : ?>
        <table class="variations" cellspacing="0">
            <tbody>
                <?php foreach ( $attributes as $attribute_name => $options ) : ?>
                    <tr>
                        <td class="label"><label for="<?php echo esc_attr( sanitize_title( $attribute_name ) ); ?>"><?php echo wc_attribute_label( $attribute_name ); // WPCS: XSS ok. ?></label></td>
                        <td class="value">
                            <?php
                                wc_dropdown_variation_attribute_options( array(
                                    'options'   => $options,
                                    'attribute' => $attribute_name,
                                    'product'   => $product,
                                ) );
                                echo end( $attribute_keys ) === $attribute_name ? wp_kses_post( apply_filters( 'woocommerce_reset_variations_link', '<a class="reset_variations" href="#">' . esc_html__( 'Clear', 'woocommerce' ) . '</a>' ) ) : '';
                            ?>
                        </td>
                    </tr>
                <?php endforeach; ?>
            </tbody>
        </table>

1 Ответ

0 голосов
/ 04 апреля 2019

Обновление: (связано с вашим редактированием)

Невозможно изменить это с помощью кода, так как он обрабатывается WC_Product_Variable_Data_Store_CPT Класс для read_variation_attributes() метода, и для этого нет доступных перехватчиков.

Кроме того, поскольку эти данные кэшируются, перехват фильтра не должен приветствоваться разумным образом.

В общем, ваша настоящая проблема не возникает для большинства людей, поскольку они устанавливают сортировку с начала для каждого продукта при добавлении атрибутов к переменному продукту.

Теперь вы можете попытаться изменить это,в базе данных, но это кажется невозможным, поскольку сортировка атрибутов продукта основана на индексе сериализованного массива , расположенного в wp_postmeta для переменного продукта post_id с использованием meta_key = _product_attributes.


Исходный ответ:

В параметрах продукта переменной в разделе «Данные продукта» (метабокс) > Атрибуты (вкладка) , вы можете добавить атрибуты товара.Вы также можете изменить их порядок, просто перетаскивая их и выбрасывая в нужных местах.

enter image description here

Это повлияет на порядок раскрывающегося списка атрибутов продукта для внешнего продукта для переменного продукта.Поэтому вам не нужен какой-либо код для этого.

В базе данных сортировка атрибутов продукта основана на индексе массива, расположенного в wp_postmeta для переменного продуктаpost_id с использованием meta_key = _product_attributes

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...