概要
woocommerce_product_duplicate_before_save
は、WooCommerceプラグインが商品を複製する際に、商品のデータが保存される前に実行されるフックです。このアクションは、商品の複製プロセスのカスタマイズや条件付けのために使用されます。主に次のような機能を実装する際によく使用されます。
- 商品の特定のメタデータをコピーから除外する。
- 複製された商品にカスタム属性を追加する。
- 既存の商品のIDを変更する。
- 商品を複製する際にカスタム通知を追加する。
- 複製された商品のステータスを自動的に設定する。
- デフォルトの画像やカテゴリを設定しておく。
構文
do_action( 'woocommerce_product_duplicate_before_save', $new_product, $product );
パラメータ
$new_product
: 新しく作成される商品のオブジェクト。$product
: 複製元商品のオブジェクト。
戻り値
このフックは特に戻り値を持たず、アクションフックとして使用されます。
対応プラグインとバージョン
- WooCommerceバージョン: 3.0+
- WordPressバージョン: 4.6+
この関数のアクションでの使用可能性
アクション | 使用例 |
---|---|
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_action( 'woocommerce_product_duplicate_before_save', 'remove_specific_meta_on_duplicate', 10, 2 );
function remove_specific_meta_on_duplicate( $new_product, $product ) {
delete_post_meta( $new_product->get_id(), '_custom_meta_key' );
}
引用元: https://docs.woocommerce.com
サンプルコード2: カスタム属性の追加
このサンプルコードでは、複製された商品に特定のカスタム属性を追加します。
add_action( 'woocommerce_product_duplicate_before_save', 'add_custom_attribute_on_duplicate', 10, 2 );
function add_custom_attribute_on_duplicate( $new_product, $product ) {
$new_product->add_meta_data( '_custom_attribute', 'Custom Value' );
}
引用元: https://docs.woocommerce.com
サンプルコード3: 商品IDの変更
このサンプルコードでは、複製商品のIDをカスタマイズします。
add_action( 'woocommerce_product_duplicate_before_save', 'change_product_id_on_duplicate', 10, 2 );
function change_product_id_on_duplicate( $new_product, $product ) {
$new_product->set_id( $new_product->get_id() + 100 ); // IDに100を加える
}
引用元: https://docs.woocommerce.com
サンプルコード4: 初期ステータスの設定
このサンプルコードでは、複製商品を「下書き」状態で保存します。
add_action( 'woocommerce_product_duplicate_before_save', 'set_product_status_on_duplicate', 10, 2 );
function set_product_status_on_duplicate( $new_product, $product ) {
$new_product->set_status( 'draft' );
}
引用元: https://docs.woocommerce.com
サンプルコード5: カスタム通知の追加
このサンプルコードでは、複製が完了した後にカスタムメッセージを表示します。
add_action( 'woocommerce_product_duplicate_before_save', 'add_custom_notice_on_duplicate', 10, 2 );
function add_custom_notice_on_duplicate( $new_product, $product ) {
wc_add_notice( 'カスタム商品が複製されました!', 'success' );
}
引用元: https://docs.woocommerce.com