Як отримати 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.
