Получить вариации продукта из разных продуктов в WooCommerce

Я пытаюсь получить массив skus из переменных продуктов в WooCommerce. У каждого варианта есть свой собственный артикул, и я также установил общий артикул для продукта, который охватывает все варианты (на вкладке инвентаря)

Так что для простых продуктов этот код работает:

global $product;
$product_sku = $product->get_sku();

Но когда я работаю с переменным продуктом, он возвращает Sku, указанный на вкладке Inventory, а не Skus для вариантов. Итак, что будет хорошим способом получить эти вариации в массиве?

Вот некоторый псевдо-код того, как я думаю о процессе

$inventory_sku = 'sku1';
$variation_skus = get_skus_by_inv_sku($inventory_sku);
echo $variation_skus[0];

Заранее спасибо!

1

Решение

Самый короткий и легкий способ — это использовать WPDB Учебный класс чтобы сделать SQL-запрос, встроенный в функцию:

function get_variations_skus( $product_id ){
global $wpdb;

return $wpdb->get_col("SELECT pm.meta_value
FROM {$wpdb->prefix}postmeta as pm
INNER JOIN {$wpdb->prefix}posts as p ON p.ID = pm.post_id
WHERE p.post_type = 'product_variation'
AND p.post_status = 'publish'
AND p.post_parent = $product_id
AND pm.meta_key = '_sku'
AND pm.meta_value != ''
");
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы) или в плагин. Проверено и работает.

ИСПОЛЬЗОВАНИЕ — В переменном продукте:

global $product;

// Variable product main sku
$sku = $product->get_sku();

// The variations skus for this variable product (in an array)
$variations_skus = get_variations_skus( $product->get_id() );

// Testing output variations skus:  Array to string conversion (coma separated skus)
echo sizeof($variations_skus) > 0 ? implode( ', ', $variations_skus ) : 'No skus';
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]