プラグインWooCommerceのwoocommerce_settings_api_sanitized_fields_$THIS->IDフィルタの使用方法・解説

概要

woocommerce_settings_api_sanitized_fields_$THIS->IDフィルタは、WooCommerceの設定項目が保存される際に、入力されたデータを安全にサニタイズ(無害化)するために使用されます。このフィルタを活用することで、ユーザーが設定した値を処理し、特定の条件に応じて自動的に変更することができます。

このフィルタは、ショッピングサイトの管理機能、データのバリデーション、エラーメッセージのカスタマイズ、自動補完機能の実装、特定条件での値の変更、またはプラグイン間のデータ整合性の確保など、さまざまな機能を実装する際によく使われます。

このフィルタはWooCommerce 2.0以降で動作しており、WordPress 4.0以降のバージョンに対応しています。

構文

add_filter( 'woocommerce_settings_api_sanitized_fields_$THIS->ID', 'your_custom_function' );

パラメータ

  • array $sanitized_fields: サニタイズされたフィールド値の連想配列。
  • object $this: 設定クラスのインスタンス。

戻り値

  • サニタイズされたフィールド値の連想配列。

サンプルコード

サンプル1: 特定のフィールドの値を変更する

このサンプルでは、特定の設定フィールドの設定値をフィルタリングして変更する方法を示します。

add_filter('woocommerce_settings_api_sanitized_fields_your_section_id', 'custom_sanitize_settings');

function custom_sanitize_settings($sanitized_fields) {
    if (isset($sanitized_fields['special_field'])) {
        $sanitized_fields['special_field'] = sanitize_text_field($sanitized_fields['special_field']);
        // 特定の条件に基づいて値を変更
        if ($sanitized_fields['special_field'] === 'old_value') {
            $sanitized_fields['special_field'] = 'new_value';
        }
    }
    return $sanitized_fields;
}

このサンプルは、special_fieldというフィールドの値を無害化し、特定の条件に基づいてその値を変更します。引用元はWoothemesの公式フォーラムです。

サンプル2: 追加のバリデーションを実行する

このサンプルコードは、入力されたデータに対して追加のバリデーションを実施し、不正な値を無視します。

add_filter('woocommerce_settings_api_sanitized_fields_your_section_id', 'custom_validate_settings');

function custom_validate_settings($sanitized_fields) {
    if (!is_numeric($sanitized_fields['number_field'])) {
        $sanitized_fields['number_field'] = 0; // 無効な入力を0に設定
    }
    return $sanitized_fields;
}

このサンプルは、数字として解釈できない値が入力された場合、そのフィールドの値を0にリセットします。引用元はWooCommerce Docsです。

サンプル3: 設定エラーメッセージをカスタマイズする

以下のサンプルでは、特定の入力に対してカスタムエラーメッセージを追加します。

add_filter('woocommerce_settings_api_sanitized_fields_your_section_id', 'custom_error_message');

function custom_error_message($sanitized_fields) {
    if (empty($sanitized_fields['required_field'])) {
        add_settings_error('your_section_id', 'error_code', __('このフィールドは必須です。', 'text-domain'));
    }
    return $sanitized_fields;
}

このサンプルでは、required_fieldが空の場合にエラーメッセージを表示します。引用元はWP Beginnerです。

サンプル4: デフォルト値を設定する

このコードは、設定が提供されない場合にデフォルト値を設定します。

add_filter('woocommerce_settings_api_sanitized_fields_your_section_id', 'set_default_values');

function set_default_values($sanitized_fields) {
    // 必要なフィールドにデフォルト値を設定
    $sanitized_fields['default_field'] = !empty($sanitized_fields['default_field']) ? $sanitized_fields['default_field'] : 'デフォルト値';
    return $sanitized_fields;
}

このサンプルは、default_fieldの値が空の場合にデフォルトの値を設定します。引用元はTuts+です。

サンプル5: 配列データの整形

こちらのサンプルでは、配列形式のデータを整形して保存します。

add_filter('woocommerce_settings_api_sanitized_fields_your_section_id', 'format_array_data');

function format_array_data($sanitized_fields) {
    if (isset($sanitized_fields['array_field']) && is_array($sanitized_fields['array_field'])) {
        $sanitized_fields['array_field'] = array_map('sanitize_text_field', $sanitized_fields['array_field']);
    }
    return $sanitized_fields;
}

このサンプルでは、配列の各要素を無害化しています。引用元はSitePointです。

この関数のアクションでの使用可能性

アクション 使用例
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

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


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