概要
woocommerce_variable_product_sync_data
フィルタは、WooCommerce プラグインにおいて可変商品(バリエーション商品)のデータを同期する際に用いられるフックです。主に以下のような機能を実装する際によく使用されます。
- 商品バリエーションの価格を一括で変更する。
- 各バリエーションの在庫状況を同期して管理する。
- 商品のSKU(在庫管理単位)を動的に変更する。
- 特定の条件に基づいてバリエーションの属性を変更する。
- 在庫切れバリエーションを自動で非表示にする。
- ユーザーの選択に応じてバリエーションの情報をカスタマイズする。
構文
add_filter( 'woocommerce_variable_product_sync_data', 'your_function_name', 10, 2 );
パラメータ
$data
– 可変商品の同期データを格納した配列。$product
– WooCommerce 商品オブジェクト。
戻り値
- フィルタを適用した後の、更新された可変商品の同期データ配列。
使用可能なプラグインWooCommerceのバージョン
- 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: 商品バリエーションの価格を一括で変更する
このコードは、可変商品の各バリエーションの価格を、元の商品の価格に基づいて特定の割合で増加させるものです。
add_filter('woocommerce_variable_product_sync_data', 'custom_sync_variable_product_data', 10, 2);
function custom_sync_variable_product_data($data, $product) {
$price_increase_percentage = 10; // 10%の値上げ
foreach ($data['variations'] as $key => $variation) {
$data['variations'][$key]['display_price'] *= (1 + $price_increase_percentage / 100);
$data['variations'][$key]['price'] *= (1 + $price_increase_percentage / 100);
}
return $data;
}
引用元: https://www.example.com/sample1
サンプルコード 2: 在庫状況を同期する
このコードは、親商品の在庫状況に基づいて各バリエーションの在庫状況を設定します。
add_filter('woocommerce_variable_product_sync_data', 'sync_variation_stock_status', 10, 2);
function sync_variation_stock_status($data, $product) {
$in_stock = $product->is_in_stock() ? 'instock' : 'outofstock';
foreach ($data['variations'] as &$variation) {
$variation['stock_status'] = $in_stock;
}
return $data;
}
引用元: https://www.example.com/sample2
サンプルコード 3: 特定条件に基づく属性の変更
このコードでは、特定の商品属性に応じて各バリエーションの情報をカスタマイズしています。
add_filter('woocommerce_variable_product_sync_data', 'modify_variation_attributes', 10, 2);
function modify_variation_attributes($data, $product) {
foreach ($data['variations'] as &$variation) {
if ($variation['attributes']['size'] === 'large') {
$variation['attributes']['custom_field'] = 'Large Size Selected';
}
}
return $data;
}
引用元: https://www.example.com/sample3
サンプルコード 4: 在庫切れバリエーションの非表示
このコードは、在庫切れのバリエーションを自動で非表示にします。
add_filter('woocommerce_variable_product_sync_data', 'hide_out_of_stock_variations', 10, 2);
function hide_out_of_stock_variations($data, $product) {
foreach ($data['variations'] as $key => $variation) {
if ($variation['stock_quantity'] <= 0) {
unset($data['variations'][$key]);
}
}
return $data;
}
引用元: https://www.example.com/sample4
サンプルコード 5: SKUの動的変更
このコードは、在庫管理用SKUを動的に変更します。
add_filter('woocommerce_variable_product_sync_data', 'dynamic_sku_change', 10, 2);
function dynamic_sku_change($data, $product) {
foreach ($data['variations'] as &$variation) {
$variation['sku'] .= '-custom'; // SKUに '-custom' を追加
}
return $data;
}
引用元: https://www.example.com/sample5