プラグインWooCommerceのwoocommerce_product_duplicate_before_saveアクションの使用方法・解説

概要

woocommerce_product_duplicate_before_saveは、WooCommerceプラグインが商品を複製する際に、商品のデータが保存される前に実行されるフックです。このアクションは、商品の複製プロセスのカスタマイズや条件付けのために使用されます。主に次のような機能を実装する際によく使用されます。

  1. 商品の特定のメタデータをコピーから除外する。
  2. 複製された商品にカスタム属性を追加する。
  3. 既存の商品のIDを変更する。
  4. 商品を複製する際にカスタム通知を追加する。
  5. 複製された商品のステータスを自動的に設定する。
  6. デフォルトの画像やカテゴリを設定しておく。

構文

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

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


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