Добавление атрибута товара в блоки WooCommerce в Gutenberg

5 апр. 2020 г., 16:28:34
Просмотры: 1.73K
Голосов: 3

Редактирование:

Где находятся блоки WooCommerce в коде WooCommerce на Github? Ответ:

Как упоминается в ответе ниже, WooCommerce Block - это пакет, поэтому он не отображается в Github для библиотеки WooCommerce, но вызывается из: https://github.com/woocommerce/woocommerce-gutenberg-products-block/tree/master/assets/js/blocks



Если вы ищете добавление пользовательских атрибутов для блоков WooCommerce, вы найдете много примеров для WordPress.

Например этот, где в ответе указано, что атрибуты можно добавить с помощью blocks.registerBlockType. Но как это сделать для блоков WooCommerce?

Я хочу иметь возможность добавить поле данных в HTML-вывод. Это поле данных должно затем вызывать атрибут товара и показывать его, если он существует.

Таким образом, когда вы используете блоки WooCommerce на главной странице - например, размер будет отображаться под кнопкой "Добавить в корзину" - как на изображении.

Пример отображения атрибута товара в блоке WooCommerce

Как вы, возможно, знаете, функциональность отображения/скрытия цены, кнопки "Добавить в корзину", отзывов уже есть, когда вы выбираете блок WooCommerce на странице редактирования.

Но я не нашел места, где создается эта функциональность.

Также было бы очень полезно - если бы вы показали мне где в библиотеке WooCommerce на Github создаются блоки. Возможно, я смогу сам разобраться, как фильтровать их и добавить функциональность

Я знаю - на основе курса Udemy - как создать собственный плагин и создать новый тип записи, сохранить и редактировать.

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

Я искал в интернете три дня и просто не понимаю, что не могу найти НИЧЕГО по этому поводу. Что никто больше не хочет настраивать эту функциональность в WooCommerce. Я знаю, что это новая функция (блоки) в ядре, но все же.

Мне просто нужно указать правильное направление.

3
Комментарии

Я искал, искал и смотрел видео на YouTube, но так и не смог найти ответ или разобраться. Я использую старый метод шорткодов с этим кодом

Peter Højlund Andersen Peter Højlund Andersen
10 апр. 2020 г. 20:37:00

Просто быстрый вопрос: если у товара есть атрибут с несколькими значениями, как система определяет, какое из значений отображать?

Tony Djukic Tony Djukic
11 апр. 2020 г. 19:37:57

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

Peter Højlund Andersen Peter Højlund Andersen
12 апр. 2020 г. 13:56:50
Все ответы на вопрос 2
0

Поскольку блоки всё больше смещаются в сторону front-end рендеринга... мне удалось найти только один фильтр для модификации вывода блоков через PHP. woocommerce_blocks_product_grid_item_html, и я даже не уверен, будет ли он работать для блока "Все товары", который может/не может использовать тот же код, что и другие блоки списка товаров.

Вот пример, который 1. удаляет ссылку и 2. добавляет краткое описание товара:

/**
 * Добавляет краткое описание товара
 *
 * @param string $html
 * @param object $data
 * @param WC_Product $product
 * @return string
 */
function kia_blocks_product_grid_item_html( $html, $data, $product ) {
    $short_description = $product->get_short_description() ? '<div class="wp-block-grid__short-description">' . wc_format_content( $product->get_short_description() ) . ' </div>' : '';

    return 
        "<li class=\"wc-block-grid__product\">
            {$data->image}
            {$data->title}
            {$data->badge}
            {$data->price}
            {$data->rating}" .

            $short_description

            . "{$data->button}
        </li>";
}
add_filter( 'woocommerce_blocks_product_grid_item_html', 'kia_blocks_product_grid_item_html', 10, 3 );
1 окт. 2020 г. 15:35:37
1

Блоки WooCommerce расположены по пути woocommerce/packages/woocommerce-blocks/assets/js/blocks.

Пример того, как WooCommerce регистрирует блок самых продаваемых товаров:

registerBlockType( 'woocommerce/product-best-sellers', {
    ...
} );

Как видите, пространство имен просто woocommerce.

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

11 апр. 2020 г. 14:52:49
Комментарии

Да. Это был просто пример с размерами. В моем случае (это не идеальная настройка, а компромисс) я создаю сайт для издателя, и атрибут называется "Автор", потому что это единственное, что я могу создать с ежедневным импортом All Import (все данные импортируются из дистрибутива), и у него есть ссылка для показа всех книг автора. Так что имя автора должно быть видно в цикле Woocommerce Block, чтобы можно было кликнуть на него и увидеть другие книги. Но это может быть что угодно - например, Advanced Custom Field - если вы хотите расширить функциональность блоков

Peter Højlund Andersen Peter Højlund Andersen
12 апр. 2020 г. 13:49:48