プラグインWooCommerceのwc_product_has_unique_sku関数の使用方法・解説

概要

wc_product_has_unique_skuは、WooCommerceで商品がユニークなSKU(Stock Keeping Unit)を持っているかどうかを確認するための関数です。この関数は、主に商品の在庫管理やデータ重複を避けるために役立ちます。特に、以下のような機能を実装する際によく使われます。

  1. 商品登録時のSKUの重複チェック
  2. 商品編集時のSKUの重複チェック
  3. カスタムフィールドを通じたSKU管理
  4. 在庫管理システムとの統合
  5. データインポート時のSKU検証
  6. 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/

この関数について質問する


上の計算式の答えを入力してください