array( $this, 'sanitize_settings' ), ) ); } /** * Sanitizes the settings. * * @since 1.0.0 * @param array $input Input to sanitize. * @return array Sanitized input. */ public function sanitize_settings( $input ) { $sanitized = array(); // Main toggles. $sanitized['enabled'] = ! empty( $input['enabled'] ); $sanitized['auto_faq_schema'] = ! empty( $input['auto_faq_schema'] ); $sanitized['auto_summary'] = ! empty( $input['auto_summary'] ); $sanitized['llms_txt_enabled'] = ! empty( $input['llms_txt_enabled'] ); // Post types. $sanitized['post_types'] = isset( $input['post_types'] ) && is_array( $input['post_types'] ) ? array_map( 'sanitize_text_field', $input['post_types'] ) : array( 'post', 'page' ); // Excluded categories. $sanitized['exclude_categories'] = isset( $input['exclude_categories'] ) && is_array( $input['exclude_categories'] ) ? array_map( 'intval', $input['exclude_categories'] ) : array(); // Regenerate llms.txt after saving. if ( ! empty( $sanitized['enabled'] ) && ! empty( $sanitized['llms_txt_enabled'] ) ) { delete_transient( 'aidentity_geo_llms_txt' ); delete_transient( 'aidentity_geo_llms_full_txt' ); } return $sanitized; } /** * Handles manual regeneration of llms.txt. * * @since 1.0.0 */ public function handle_regenerate() { if ( ! current_user_can( 'manage_options' ) ) { wp_die( esc_html__( 'Not authorized.', 'aidentity-generative-engine-optimizer' ) ); } check_admin_referer( 'aidentity_geo_regenerate_llms' ); Aidentity_GEO_LLMS_TXT::get_instance()->generate_file(); wp_safe_redirect( admin_url( 'options-general.php?page=aidentity-geo®enerated=1' ) ); exit; } /** * Renders the settings page. * * @since 1.0.0 */ public function render_page() { $settings = aidentity_geo_get_settings(); $regenerated = isset( $_GET['regenerated'] ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended ?>