'boolean', 'sanitize_callback' => 'absint', 'default' => 1 ) ); register_setting( 'atba_settings', 'atba_site_summary', array( 'sanitize_callback' => 'sanitize_textarea_field' ) ); register_setting( 'atba_settings', 'atba_retention', array( 'sanitize_callback' => 'absint', 'default' => 90 ) ); register_setting( 'atba_settings', 'atba_post_types', array( 'sanitize_callback' => array( $this, 'sanitize_post_types' ), 'default' => array( 'post', 'page' ) ) ); register_setting( 'atba_settings', 'atba_blocked_bots', array( 'sanitize_callback' => array( $this, 'sanitize_bots' ), 'default' => array() ) ); } public function sanitize_post_types( $value ) { $valid = get_post_types( array( 'public' => true ) ); return array_values( array_intersect( (array) $value, $valid ) ); } public function sanitize_bots( $value ) { $valid = array_keys( ATBA_Bots::all() ); return array_values( array_intersect( (array) $value, $valid ) ); } public function dashboard_widget() { wp_add_dashboard_widget( 'atba_widget', __( 'AI Crawler Activity (30 days)', 'aitooler-bot-analytics' ), array( $this, 'render_widget' ) ); } public function render_widget() { $stats = ATBA_Logger::stats( 30 ); if ( ! $stats ) { echo '

' . esc_html__( 'No AI crawler visits recorded yet.', 'aitooler-bot-analytics' ) . '

'; return; } echo ''; printf( '%s', esc_url( admin_url( 'admin.php?page=aitooler-bot-analytics' ) ), esc_html__( 'View full report', 'aitooler-bot-analytics' ) ); } public function render_page() { if ( ! current_user_can( 'manage_options' ) ) { return; } $stats = ATBA_Logger::stats( 30 ); $top_urls = ATBA_Logger::top_urls( 30 ); $bots = ATBA_Bots::all(); $blocked = (array) get_option( 'atba_blocked_bots', array() ); $types = (array) get_option( 'atba_post_types', array( 'post', 'page' ) ); ?>

bot ] ) ? $bots[ $row->bot ] : array( 'company' => '—', 'purpose' => '' ); ?>
bot ); ?> hits; ?> last_seen ); ?>

URL
url ); ?>hits; ?>

true ), 'objects' ) as $pt ) : ?> name ) { continue; } ?>

$bot ) : ?>
>