Получить вариации продукта из разных продуктов в WooCommerce - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь получить массив 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 Ответ

0 голосов
/ 04 января 2019

Самый короткий и легкий способ - использовать 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';
...