У меня недостаточно репутации, чтобы комментировать, поэтому вместо этого нужно публиковать сообщения на случай, если это кому-нибудь поможет.
Я использую @ mujuonly's answer , и это прекрасно работает, однакокоманда WC изменила что-то связанное с WC_Product_Data_Store_CPT
в версии 3.6.0.Вероятно, эта запись в журнале изменений Производительность - Улучшена скорость функции поиска вариантов find_matching_product_variation
.# 22423 , относящийся к https://github.com/woocommerce/woocommerce/pull/22423.
Кажется, ==
был ===
в сравнении атрибутов, что означает, что единственное, что нужно исправить, это убедиться, что атрибуты передаются так же, какони хранятся в базе данных.Из того, что я понимаю, он сравнивается с полем слагов в базе данных, которое всегда кажется строчным (где буквенно), поэтому просто передаю свои атрибуты через strtolower
, прежде чем передать их в @ 1019 * function 1017 * @ mujuonly.* делает трюк.
например
function get_variation_id_from_attributes( $product_id, $size, $color ) {
$color = strtolower($color);
$size = strtolower($size)
$variation_id = find_matching_product_variation_id ( $product_id, array(
'attribute_pa_color' => $color,
'attribute_pa_size' => $size
));
return $variation_id;
}
function find_matching_product_variation_id($product_id, $attributes)
{
return (new \WC_Product_Data_Store_CPT())->find_matching_product_variation(
new \WC_Product($product_id),
$attributes
);
}