'sanitize_text_field' ) ); register_setting( 'aidd_settings', 'aidd_description', array( 'sanitize_callback' => 'sanitize_textarea_field' ) ); register_setting( 'aidd_settings', 'aidd_website', array( 'sanitize_callback' => 'esc_url_raw' ) ); register_setting( 'aidd_settings', 'aidd_contact', array( 'sanitize_callback' => 'sanitize_text_field' ) ); // Optional fields. register_setting( 'aidd_settings', 'aidd_logo', array( 'sanitize_callback' => 'esc_url_raw' ) ); register_setting( 'aidd_settings', 'aidd_entity_type', array( 'sanitize_callback' => 'sanitize_text_field' ) ); register_setting( 'aidd_settings', 'aidd_jsonld', array( 'sanitize_callback' => array( $this, 'sanitize_jsonld' ) ) ); } /** * Sanitize JSON-LD field. * * @param string $value JSON string. * @return string */ public function sanitize_jsonld( $value ) { if ( empty( $value ) ) { return ''; } // Try to decode and re-encode to validate JSON. $decoded = json_decode( $value, true ); if ( json_last_error() === JSON_ERROR_NONE ) { return wp_json_encode( $decoded ); } return ''; } /** * Enqueue admin styles. * * @param string $hook Current admin page hook. */ public function enqueue_styles( $hook ) { if ( 'settings_page_ai-domain-data' !== $hook ) { return; } wp_enqueue_style( 'ai-domain-data-admin', AIDD_PLUGIN_URL . 'admin/css/admin.css', array(), AIDD_VERSION ); } /** * Display admin settings page. */ public function display_admin_page() { if ( ! current_user_can( 'manage_options' ) ) { return; } // Generate profile for preview. $profile = AIDD_Generator::generate(); $validation = AIDD_Validator::validate( $profile ); $endpoint_url = home_url( '/.well-known/domain-profile.json' ); include AIDD_PLUGIN_DIR . 'admin/views/settings-page.php'; } }