'string', 'sanitize_callback' => 'sanitize_text_field', 'default' => '', 'show_in_rest' => false, ]); foreach (['ai_seo_cro_scan_service_enabled', 'ai_seo_cro_daily_scan_enabled', 'ai_seo_cro_seokey_service_enabled'] as $option) { register_setting('ai_seo_cro_services', $option, [ 'type' => 'string', 'sanitize_callback' => static function ($value) { return $value === '1' ? '1' : '0'; }, 'default' => '0', 'show_in_rest' => false, ]); } } public function register_menu() { add_menu_page( '360 SEO Optimizer', '360 SEO', 'manage_options', '360-seo-dashboard', [$this, 'render_dashboard'], 'dashicons-chart-area', 26 ); add_submenu_page( '360-seo-dashboard', 'Site Audit Dashboard', 'Site Audit', 'manage_options', '360-seo-dashboard', [$this, 'render_dashboard'] ); add_submenu_page('360-seo-dashboard', 'Google PageSpeed Insights', 'PageSpeed Insights', 'manage_options', '360-seo-performance', [$this, 'render_performance']); add_submenu_page( '360-seo-dashboard', 'Robots.txt', 'Robots.txt', 'manage_options', '360-seo-robots', [$this, 'render_robots'] ); add_submenu_page( '360-seo-dashboard', 'SEO Fixes', 'SEO Fixes', 'manage_options', '360-seo-fixes', [$this, 'render_fixes'] ); } public function render_performance() { if (!current_user_can('manage_options')) { return; } include AI_SEO_CRO_PATH . 'views/performance-view.php'; } public function render_dashboard() { include AI_SEO_CRO_PATH . 'views/dashboard-view.php'; } public function render_robots() { include AI_SEO_CRO_PATH . 'views/robots-view.php'; } public function render_fixes() { include AI_SEO_CRO_PATH . 'views/fixes-view.php'; } public function enqueue_assets($hook_suffix) { if ($hook_suffix === '360-seo_page_360-seo-performance') { wp_enqueue_script('360-seo-performance', AI_SEO_CRO_URL . 'assets/js/performance.js', [], AI_SEO_CRO_VERSION, true); wp_localize_script('360-seo-performance', 'AI_SEO_PSI', [ 'endpoint' => esc_url_raw(rest_url('seo-cro/v1/analyze-performance')), 'nonce' => wp_create_nonce('wp_rest'), ]); return; } $allowed_pages = [ 'toplevel_page_360-seo-dashboard', '360-seo_page_360-seo-robots', '360-seo_page_360-seo-fixes', '360-seo_page_360-seo-seo-settings', ]; if (!in_array($hook_suffix, $allowed_pages, true)) { return; } if ($hook_suffix === '360-seo_page_360-seo-fixes') { wp_enqueue_media(); } wp_enqueue_style( '360-seo-admin-css', AI_SEO_CRO_URL . 'assets/css/admin.css', [], AI_SEO_CRO_VERSION ); wp_enqueue_script( '360-seo-dashboard-js', AI_SEO_CRO_URL . 'assets/js/dashboard.js', [], AI_SEO_CRO_VERSION, true ); wp_localize_script('360-seo-dashboard-js', 'AI_SEO_CRO_DASHBOARD', [ 'ajaxUrl' => esc_url_raw(admin_url('admin-ajax.php')), 'analyzeUrl' => esc_url_raw(rest_url('seo-cro/v1/analyze')), 'scansUrl' => esc_url_raw(rest_url('seo-cro/v1/scans')), 'analyzeSeoUrl' => esc_url_raw(rest_url('seo-cro/v1/analyze-seo')), 'analyzePerformanceUrl' => esc_url_raw(rest_url('seo-cro/v1/analyze-performance')), 'robotsUrl' => esc_url_raw(rest_url('seo-cro/v1/robots')), 'robotsFileUrl' => esc_url_raw(home_url('/robots.txt')), 'robotsAdminUrl' => esc_url_raw(admin_url('admin.php?page=360-seo-robots')), 'robotsRepairUrl' => esc_url_raw(rest_url('seo-cro/v1/robots/repair')), 'robotsSaveUrl' => esc_url_raw(rest_url('seo-cro/v1/robots/save')), 'internalNofollowUrl' => esc_url_raw(rest_url('seo-cro/v1/fixes/internal-nofollow')), 'automaticInternalLinksUrl' => esc_url_raw(rest_url('seo-cro/v1/fixes/automatic-internal-links')), 'sitemapUrl' => esc_url_raw(rest_url('seo-cro/v1/fixes/sitemap')), 'llmsTxtUrl' => esc_url_raw(rest_url('seo-cro/v1/fixes/llms-txt')), 'canonicalFixUrl' => esc_url_raw(rest_url('seo-cro/v1/fixes/canonical')), 'forceHttpsUrl' => esc_url_raw(rest_url('seo-cro/v1/fixes/force-https')), 'seokeyValidateUrl' => esc_url_raw(rest_url('seo-cro/v1/seokey/validate')), 'nonce' => wp_create_nonce('wp_rest'), 'defaultUrl' => esc_url_raw(home_url('/')), 'seokey' => function_exists('ai_seo_cro_get_seokey') ? ai_seo_cro_get_seokey() : '', 'seokeyStatus' => function_exists('ai_seo_cro_get_seokey_validation_status') ? ai_seo_cro_get_seokey_validation_status() : [], ]); } } new AI_SEO_CRO_Admin();