プラグインWooCommerceのwoocommerce_shop_order_search_resultsフィルタの使用方法・解説

概要

woocommerce_shop_order_search_resultsフィルタは、WooCommerceの注文検索結果をカスタマイズするために使用されます。このフィルタを利用することで、管理画面の注文セクションにおいて特定の条件に基づいた結果を表示させたり、検索機能を拡張したりすることが可能です。具体的には、次のようなシナリオでよく使われます。

  1. 特定のカスタムフィールドに基づいた検索結果のフィルタリング
  2. 注文のステータスを変更して表示する結果を制限
  3. 特定のユーザーに対する注文のみを表示
  4. 複合条件を用いた検索拡張
  5. 注文のメタデータに基づいたさらなる絞り込み
  6. 検索結果にカスタム情報を追加

構文

apply_filters( 'woocommerce_shop_order_search_results', $search_results, $query );

パラメータ

  • $search_results: 検索結果の配列。
  • $query: 検索に使用されたクエリ文字列。

戻り値

フィルタリングされた検索結果の配列。

使用可能なプラグインおよびバージョン

  • WooCommerce: バージョン5.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_shop_order_search_results', 'filter_orders_by_custom_field', 10, 2);

function filter_orders_by_custom_field($search_results, $query) {
    if (strpos($query, 'custom_field') !== false) {
        // 特定のカスタムフィールドに基づき検索結果をフィルタリング
        $search_results = array_filter($search_results, function($order) {
            return get_post_meta($order->get_id(), 'custom_field_key', true) === 'desired_value';
        });
    }
    return $search_results;
}

このコードは、検索クエリに「custom_field」が含まれている場合に、特定のカスタムフィールドに一致する注文結果をフィルタリングします。

サンプルコード2: 注文ステータスによる結果の制限

add_filter('woocommerce_shop_order_search_results', 'limit_orders_by_status', 20, 2);

function limit_orders_by_status($search_results, $query) {
    foreach ($search_results as $key => $order) {
        if ('wc-cancelled' === $order->get_status()) {
            unset($search_results[$key]); // 'cancelled' 状態の注文を除外
        }
    }
    return $search_results;
}

このコードは、検索結果から「キャンセル」状態の注文を除外します。

サンプルコード3: 特定ユーザーの注文のみ表示

add_filter('woocommerce_shop_order_search_results', 'show_orders_for_current_user', 15, 2);

function show_orders_for_current_user($search_results, $query) {
    $current_user_id = get_current_user_id();
    $search_results = array_filter($search_results, function($order) use ($current_user_id) {
        return $order->get_customer_id() === $current_user_id;  // 現在のユーザーの注文のみ表示
    });
    return $search_results;
}

このコードは、現在ログインしているユーザーに関連する注文のみを検索結果に表示します。

サンプルコード4: 複数条件による検索拡張

add_filter('woocommerce_shop_order_search_results', 'filter_orders_by_multiple_conditions', 10, 2);

function filter_orders_by_multiple_conditions($search_results, $query) {
    if (strpos($query, 'specific_condition') !== false) {
        // 複数の条件をもとに検索結果をフィルタリング
        $search_results = array_filter($search_results, function($order) {
            return ($order->get_total() > 100 && $order->get_status() === 'wc-processing'); // 条件に合う注文のみ
        });
    }
    return $search_results;
}

このコードは、特定の条件を満たす注文だけを検索結果としてフィルタリングします。

サンプルコード5: メタデータに基づく絞り込み

add_filter('woocommerce_shop_order_search_results', 'filter_orders_by_meta_data', 10, 2);

function filter_orders_by_meta_data($search_results, $query) {
    if (strpos($query, 'meta_filter') !== false) {
        $search_results = array_filter($search_results, function($order) {
            return get_post_meta($order->get_id(), 'meta_key', true) === 'desired_meta_value'; // 特定のメタデータに基づいて絞り込み
        });
    }
    return $search_results;
}

このコードは、特定のメタデータの値に基づいて検索結果を絞り込みます。

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


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