概要
wc_product_has_unique_sku
は、WooCommerceで商品がユニークなSKU(Stock Keeping Unit)を持っているかどうかを確認するための関数です。この関数は、主に商品の在庫管理やデータ重複を避けるために役立ちます。特に、以下のような機能を実装する際によく使われます。
- 商品登録時のSKUの重複チェック
- 商品編集時のSKUの重複チェック
- カスタムフィールドを通じたSKU管理
- 在庫管理システムとの統合
- データインポート時のSKU検証
- SKUによる商品検索機能の実装
構文
wc_product_has_unique_sku( $sku, $product_id );
パラメータ
$sku
(string): チェックしたいSKUの値。$product_id
(int): 商品のID。省略可能だが、指定することで特定の商品をチェックする結果を得られる。
戻り値
bool
: SKUがユニークである場合はtrue
、重複がある場合はfalse
。
使用可能なプラグイン/バージョン
- WooCommerceバージョン: 3.0以上
- WordPressバージョン: 4.0以上
この関数のアクションでの使用可能性
アクション | 使用可能性 |
---|---|
mu_plugin_loaded | |
registered_post_type | |
plugins_loaded | |
wp_roles_init | |
setup_theme | |
after_setup_theme | |
set_current_user | |
init | |
register_sidebar | |
wp_loaded | |
send_headers | |
parse_query | |
pre_get_posts | |
wp | |
template_redirect | |
get_header | |
wp_head |
サンプルコード
サンプルコード1: SKUの重複チェック
このサンプルは、商品を登録する際にSKUがユニークであるかを確認します。
add_action( 'woocommerce_product_options_general_product_data', 'check_sku_unique' );
function check_sku_unique() {
global $post;
$sku = get_post_meta( $post->ID, '_sku', true );
if ( !wc_product_has_unique_sku( $sku, $post->ID ) ) {
echo '<div class="error">このSKUは既に存在します。</div>';
}
}
引用元: https://developer.woocommerce.com/
サンプルコード2: SKUのユニーク性をフィルタリング
このサンプルは、SKUが変更された場合のユニーク性をチェックします。
add_action( 'woocommerce_save_product_variation', 'verify_sku_uniqueness_on_save', 10, 2 );
function verify_sku_uniqueness_on_save( $variation_id, $i ) {
$sku = isset( $_POST['variable_sku'][ $i ] ) ? $_POST['variable_sku'][ $i ] : '';
if ( !wc_product_has_unique_sku( $sku ) ) {
// SKUがユニークではない場合の処理
wp_die( 'このSKUは既に使われています。' );
}
}
引用元: https://woocommerce.com/
サンプルコード3: カスタム商品フィールドでのSKU確認
このコードはカスタム商品フィールドを使用してSKUのユニーク性を確認します。
function custom_product_meta_box() {
global $post;
if ( isset( $_POST['custom_sku'] ) ) {
$custom_sku = sanitize_text_field( $_POST['custom_sku'] );
if ( !wc_product_has_unique_sku( $custom_sku, $post->ID ) ) {
echo '<div class="error">カスタムSKUが重複しています。</div>';
}
}
}
add_action( 'woocommerce_process_product_meta', 'custom_product_meta_box' );
引用元: https://docs.woocommerce.com/
サンプルコード4: インポート時のSKUチェック
この例ではCSVインポート時にSKUの重複を確認します。
add_action( 'woocommerce_product_import_inserted_product_object', 'check_sku_import', 10, 1 );
function check_sku_import( $product ) {
$sku = $product->get_sku();
if ( !wc_product_has_unique_sku( $sku ) ) {
$product->set_sku( null ); // 重複SKUの場合、SKUをリセット
}
}
引用元: https://wpbeginner.com/
サンプルコード5: 商品検索でSKUを使用
このコードはSKUを使って商品を検索します。
add_action( 'pre_get_posts', 'search_by_sku' );
function search_by_sku( $query ) {
if ( !is_admin() && $query->is_search() ) {
$sku = $query->get( 'sku' );
if ( $sku ) {
$query->set( 'meta_query', array(
array(
'key' => '_sku',
'value' => $sku,
'compare' => '='
)
) );
}
}
}
引用元: https://themeisle.com/