В чем именно проблема реализации?
Добавки - это отдельные товары из соответствующей категории
Добавки, а размеры пиццы - это лишь модификации этого товара.
В корзине идентификатором товаров пусть выступает не id товара, а
ключ, который генерируется в бэке перед добавлением. Например ключ каждого товара будет равен шифрованию
md5 строки
$productKey = md5(id_товара. цена_товара. модификация_товара(размер). json_encode(добавки));
И пишите массив товаров корзины например в сессию, где ключом будет выступать сгенерированный
key.
Тогда, условно, при добавлении Маграгриты 25см с халапеньо и Маргариты 30см без добавок, в корзине будут отображаться два разных товара, так как у них разный
key.
И в сессии это может выглядеть например так:
[идентификатор_сессии][id-заказа][cart] = array (
'984b707b193e29fb93c9d6e05a585ce6' => array("Маргарита", 100 рублей, 25см, 1шт, {"халапеньо"}),
'977b713b193e29fb93c9d6e05a513ke2' => array("Маргарита", 100 рублей, 30см, 1шт, {})
);