Як отримати ID продукту за SKU-атрибутом (артикулом) [WooCommerce]

Привіт:) У цьому пості покажу, як отримати ID товару за його SKU (артикулом) у WordPress-плагіні WooCommerce. Це може стати у пригоді, якщо потрібно зробити вибірку товарів, налаштувати інтеграцію з іншими сервісами або швидко отримати дані для кастомного коду.

Де знайти SKU у WooCommerce

Значення SKU можна подивитися у адмінці WordPress:

Products → All Products → у відповідному стовпці Артикул (SKU).

Також артикул задається у налаштуваннях товару на вкладці Product data → Inventory.

Варіант 1. Отримати ID за SKU через wc_get_product_id_by_sku()

WooCommerce вже має вбудовану функцію для цього:

// Отримати ID одного товару за його SKU
$product_id = wc_get_product_id_by_sku( 'woo-sunglasses' );

echo $product_id; // Наприклад: 19

Якщо потрібно отримати кілька ID по масиву артикулів:

$sku_names = [ 'woo-sunglasses', 'wp-pennant', 'logo-collection' ];
$product_ids = [];

foreach ( $sku_names as $sku ) {
$product_ids[] = wc_get_product_id_by_sku( $sku );
}

var_dump( $product_ids ); // [19, 35, 34]

Це найбільш правильний і безпечний спосіб.

Варіант 2. SQL-запит напряму через $wpdb

У деяких випадках можна звернутися напряму до таблиць БД (швидше при великій кількості SKU):

global $wpdb;

$sku_names = [ 'woo-sunglasses', 'wp-pennant', 'logo-collection' ];
$product_ids = [];

foreach ( $sku_names as $sku ) {
    $product_ids[] = $wpdb->get_var(
        $wpdb->prepare(
            "SELECT post_id FROM $wpdb->postmeta WHERE meta_key = '_sku' AND meta_value = %s",
            $sku
        )
    );
}

var_dump( $product_ids ); // [19, 35, 34]

Цей варіант швидший, але краще використовувати лише тоді, коли важлива продуктивність.

Варіант 3. Отримати продукт одразу

Якщо потрібен не тільки ID, а й сам товар (об’єкт WC_Product):

$sku = 'woo-sunglasses';

$product_id = wc_get_product_id_by_sku( $sku );
$product = wc_get_product( $product_id );

echo $product->get_name(); // Hoodie with Zipper

Вивести SKU у будь-якому місці сайту через шорткод

/**
 * Шорткод [product_id_by_sku sku="woo-sunglasses"]
 * 
 * Використання: [product_id_by_sku sku="артикул"]
 */
function shortcode_product_id_by_sku( $atts ) {
    $atts = shortcode_atts( [
        'sku' => ''
    ], $atts, 'product_id_by_sku' );

    if ( empty( $atts['sku'] ) ) {
        return '<em>SKU не вказано</em>';
    }

    // Отримуємо ID товару за SKU
    $product_id = wc_get_product_id_by_sku( $atts['sku'] );

    if ( ! $product_id ) {
        return '<em>Товар із таким SKU не знайдено</em>';
    }

    return $product_id;
}
add_shortcode( 'product_id_by_sku', 'shortcode_product_id_by_sku' );

Як користуватися

У будь-якому місці запису або сторінки можна вставити:

[product_id_by_sku sku="woo-sunglasses"]

👉 На місці шорткоду буде показано ID продукту (наприклад, 19).

Підсумок

  • Найзручніше використовувати wc_get_product_id_by_sku().
  • Якщо потрібна оптимізація під великі масиви — можна напряму через $wpdb.
  • Якщо потрібні дані товару — відразу отримуємо WC_Product.
Михайло Петров
Михайло Петров

Мене звати Михайло. Я — WordPress-розробник. Створюю візитки, корпоративні сайти, інтернет-магазини, блоги на WordPress. Надаю консультації з WordPress.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *