概要
woocommerce_remove_order_items
フィルタは、WooCommerceの注文アイテムを操作するために使用されます。このフィルタは、特定の条件に基づいて注文アイテムを削除したり変更したりする際に非常に便利です。以下のようなシナリオでよく利用されます。
- 顧客が特定の理由でキャンセルしたアイテムを表示しない。
- ユーザーが特定のロールに属している場合にアイテムを非表示にする。
- 商品が特定の条件を満たさない場合にアイテムを削除する。
- カスタムフィールドに基づいて特定のアイテムを削除する。
- チェックアウトプロセス中にアイテムを動的に変更する。
- 注文データのエクスポート時に不要なアイテムを削除する。
このフィルタは、WooCommerceのバージョン4.0以降およびWordPressのバージョン5.0以降で使用可能です。
構文
add_filter('woocommerce_remove_order_items', 'your_function_name', 10, 2);
パラメータ
$order_items
(配列): 削除または変更する対象の注文アイテム。$order
(WC_Order): 対象となるWC_Orderオブジェクト。
戻り値
- 修正された注文アイテムの配列。
サンプルコード
サンプルコード 1: 特定商品のアイテムを削除する
このサンプルコードは、特定の商品のアイテムを削除します。
add_filter('woocommerce_remove_order_items', 'remove_specific_product_items', 10, 2);
function remove_specific_product_items($order_items, $order) {
foreach ($order_items as $key => $item) {
if ($item->get_product_id() === 123) { // 商品ID123を指定
unset($order_items[$key]);
}
}
return $order_items;
}
引用元: https://woocommerce.com/
サンプルコード 2: 顧客ロールに基づいてアイテムを削除する
このコードは、特定のロールを持つユーザーに対してアイテムを削除します。
add_filter('woocommerce_remove_order_items', 'remove_items_based_on_role', 10, 2);
function remove_items_based_on_role($order_items, $order) {
if (current_user_can('wholesale_customer')) {
foreach ($order_items as $key => $item) {
// すべてのアイテムを削除
unset($order_items[$key]);
}
}
return $order_items;
}
引用元: https://woocommerce.com/
サンプルコード 3: カスタムフィールドを基に削除する
このコードは、カスタムフィールドに基づいてアイテムを削除します。
add_filter('woocommerce_remove_order_items', 'remove_items_based_on_custom_field', 10, 2);
function remove_items_based_on_custom_field($order_items, $order) {
foreach ($order_items as $key => $item) {
if (get_post_meta($item->get_product_id(), 'remove_item', true) === 'yes') {
unset($order_items[$key]);
}
}
return $order_items;
}
引用元: https://woocommerce.com/
サンプルコード 4: 注文合計が特定の金額以下の場合にアイテムを削除する
このコードは、注文の合計金額が一定以下の場合にアイテムを削除します。
add_filter('woocommerce_remove_order_items', 'remove_items_if_order_total_below_threshold', 10, 2);
function remove_items_if_order_total_below_threshold($order_items, $order) {
if ($order->get_total() < 50) { // 50ドル未満
foreach ($order_items as $key => $item) {
unset($order_items[$key]);
}
}
return $order_items;
}
引用元: https://woocommerce.com/
サンプルコード 5: アイテムが在庫切れの場合に削除する
このコードは、在庫切れの商品アイテムを削除します。
add_filter('woocommerce_remove_order_items', 'remove_out_of_stock_items', 10, 2);
function remove_out_of_stock_items($order_items, $order) {
foreach ($order_items as $key => $item) {
if (!$item->get_product()->is_in_stock()) {
unset($order_items[$key]);
}
}
return $order_items;
}
引用元: https://woocommerce.com/
この関数のアクションでの使用可能性
アクション | 使用可能性 |
---|---|
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 |