'boolean', 'sanitize_callback' => guard_sanitizer( $option, 'rest_sanitize_boolean' ), 'default' => false, ) ); } register_setting( 'ajaco_settings', 'ajaco_indexnow_key', array( 'type' => 'string', 'sanitize_callback' => guard_sanitizer( 'ajaco_indexnow_key', __NAMESPACE__ . '\\sanitize_indexnow_key' ), 'default' => '', ) ); // Array options in the `ajaco_settings` group are safe to register ONLY // because the settings page ALWAYS renders their fields (options.php // force-updates every registered option of a submitted group — an option // without form fields would be wiped on each Save). register_setting( 'ajaco_settings', 'ajaco_ai_bot_policy', array( 'type' => 'array', 'sanitize_callback' => guard_sanitizer( 'ajaco_ai_bot_policy', __NAMESPACE__ . '\\sanitize_ai_bot_policy' ), 'default' => array(), ) ); register_setting( 'ajaco_settings', 'ajaco_content_signal_prefs', array( 'type' => 'array', 'sanitize_callback' => guard_sanitizer( 'ajaco_content_signal_prefs', __NAMESPACE__ . '\\sanitize_content_signal_prefs' ), 'default' => array(), ) ); // The llms.txt curation config lives in its OWN group, saved from its own // screen. It must NOT join `ajaco_settings`: options.php force-updates every // registered option in a submitted group, so a shared group would let the // Settings screen (which renders no curation fields) wipe the whole config // on every save — and vice versa. register_setting( 'ajaco_llms_settings', 'ajaco_llms_config', array( 'type' => 'array', 'sanitize_callback' => guard_sanitizer( 'ajaco_llms_config', __NAMESPACE__ . '\\sanitize_llms_config' ), 'default' => array(), ) ); }