'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 );
}