更新(WooCommerceとの互換性3+)
あなたが製品のwoocommerceカテゴリを変更すると、あなたは、カテゴリIDのいずれかを受け入れるwp_set_object_terms()
ネイティブWordPressの機能を使用する必要がありますまたはスラッグ'product_cat'
分類法パラメータおよびなし'category'
です。
woocommerce_order_status_completed
フックは、古典的状態に順序変更が完了したときにコールバック関数を発射するために使用されます。
これはコードです:
add_action('woocommerce_order_status_completed', 'add_category_to_order_items_on_competed_status' 10, 1);
function add_category_to_order_items_on_competed_status($order_id) {
// set your category ID or slug
$your_category = 'my-category-slug'; // or $your_category = 123;
$order = wc_get_order($order_id);
foreach ($order->get_items() as $item_id => $product_item) {
// compatibility with WC +3
if (version_compare(WC_VERSION, '3.0', '<'))
$product_id = $product_item['product_id'];
else
$product_id = $product_item->get_product_id();
wp_set_object_terms($product_id, $your_category, 'product_cat');
}
}
それとも、ステータスが「完了」の順序をフィルタします条件関数でもwoocommerce_order_status_changed
フックを使用することができます。
add_action('woocommerce_order_status_changed', 'add_category_to_order_items_on_competed_status' 10, 1);
function add_category_to_order_items_on_competed_status($order_id) {
// set your category ID or slug
$your_category = 'my-category-slug'; // or $your_category = 123;
$order = wc_get_order($order_id);
$order_status = $order->post->post_status;
if ($order->has_status('completed')) {
foreach ($order->get_items() as $item_id => $product_item) {
// compatibility with WC +3
if (version_compare(WC_VERSION, '3.0', '<'))
$product_id = $product_item['product_id'];
else
$product_id = $product_item->get_product_id();
wp_set_object_terms($product_id, $your_category, 'product_cat');
}
}
}
このコードが進みますあなたのアクティブな子テーマまたはテーマのfunction.phpファイル。
このコードはテスト済みで、完全に機能します。
HI、functions.phoにコードを貼り付けると、コードの1行目と2行目にエラーが発生します。私は単語(関数)が2行目に欠けていると思いますが、なぜコードの最初の行にエラーが出るのか分かりません。add_action( 'woocommerce_order_status_completed'、 'add_category_to_order_items_on_competed_status' 10、1); – user3814097
はい、これは動作します!ありがとう:) – user3814097
また、私はグループ化された製品を使用しています、グループリストの最初の製品が完了してカテゴリを変更したかどうか確認できますか? – user3814097