'sitefix_plugin', 'source' => sanitize_key( $source ), 'v' => SITEFIX_VERSION, 'site' => rawurlencode( home_url( '/' ) ), ), SITEFIX_PRO_URL ); } /** * Default settings — every fix toggleable, sensible defaults. */ function sitefix_get_default_settings() { return array( 'enable_alt_text' => true, 'enable_heading_fix' => true, 'enable_skip_link' => true, 'enable_focus_indicator' => true, 'enable_aria_landmarks' => true, 'enable_lang_attr' => true, 'enable_table_caption' => true, 'enable_form_labels' => true, 'enable_link_text' => false, // off by default — content rewrite, riskier ); } /** * Init: load fixer with current settings. */ add_action( 'init', 'sitefix_init', 5 ); function sitefix_init() { $settings = wp_parse_args( get_option( 'sitefix_settings', array() ), sitefix_get_default_settings() ); SiteFix_Fixer::get_instance()->init( $settings ); SiteFix_Ajax::get_instance(); } /** * Activation — set defaults if first run. */ register_activation_hook( __FILE__, 'sitefix_activate' ); function sitefix_activate() { if ( false === get_option( 'sitefix_settings' ) ) { update_option( 'sitefix_settings', sitefix_get_default_settings() ); } if ( false === get_option( 'sitefix_install_date' ) ) { update_option( 'sitefix_install_date', time() ); } if ( ! wp_next_scheduled( 'sitefix_daily_scan' ) ) { wp_schedule_event( time(), 'daily', 'sitefix_daily_scan' ); } } /** * Deactivation — clear cron only. Settings preserved (in case user reactivates). * Full purge happens in uninstall.php. */ register_deactivation_hook( __FILE__, 'sitefix_deactivate' ); function sitefix_deactivate() { wp_clear_scheduled_hook( 'sitefix_daily_scan' ); } /** * Daily scan — runs in admin context, generates audit report. * Stored as transient (not permanent option), expires in 25h. */ add_action( 'sitefix_daily_scan', 'sitefix_run_daily_scan' ); function sitefix_run_daily_scan() { $scanner = SiteFix_Scanner::get_instance(); $report = $scanner->scan_recent_pages( 20 ); set_transient( 'sitefix_last_scan', array( 'date' => current_time( 'mysql' ), 'report' => $report, 'score' => $scanner->calculate_score( $report ), ), 25 * HOUR_IN_SECONDS ); } /** * Plugins page action links. */ add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), 'sitefix_action_links' ); function sitefix_action_links( $links ) { return array_merge( array( '' . esc_html__( 'Dashboard', 'sitefix' ) . '', '' . esc_html__( 'Settings', 'sitefix' ) . '', '★ ' . esc_html__( 'Get Pro', 'sitefix' ) . '', ), $links ); }