Создайте свой макет таблицы. Для вывода инпутов я использовал функцию от woo woocommerce_quantity_input().
Для страницы категорий (архивов):
Выводим в нужном месте тег в котором будет заливаться таблица размеров. (изначально он пустой, т.к. все выполняется по ajax). Я использовал хук woocommerce_after_shop_loop_item. И кнопку запроса, по нажатии которой выполняется ajax и с сервера возвращается полный html таблицы.
Для карточки товара:
Выводим в нужном месте готовую таблицу. Я использовал хук woocommerce_after_single_product_summary
Далее вся магия в js:
По нажатии на кнопку "в корзину" отправляется массив данных. На сервере происходит множественное добавление вариаций. Код взят из самого woo и просто вложен в цикл.
Тут Важен момент обновления миникорзины (ее фрагментов), потому, что актуальная информация сохраняется в LocalStorage браузера и обновляется на всех открытых окнах браузера вашего домена. Поэтому в ответе сервера нужно передавать сформированные фрагменты корзины, а в обработчике ajax (на фронте) подключить нужные фрагменты миникорзине, для чего используется вызов триггера added_to_cart (обработчик триггера находится в plugins/woocommerce/assets/js/frontend/cart-fragments.js и wp-content/plugins/woocommerce/assets/js/frontend/added_to_cart.js).