false, 'akismet_enabled' => false, 'akismet_site_url' => '', 'akismet_blog_lang' => 'zh-CN', 'akismet_api_key' => '', 'ai_enabled' => false, 'ai_provider' => 'baidu', 'baidu_api_key' => '', 'baidu_secret_key' => '', 'baidu_token_url' => 'https://aip.baidubce.com/oauth/2.0/token', 'baidu_censor_url' => 'https://aip.baidubce.com/rest/2.0/solution/v1/text_censor/v2/user_defined', 'baidu_img_censor_url' => 'https://aip.baidubce.com/rest/2.0/solution/v1/img_censor/v2/user_defined', 'ai_moderate_comments' => true, 'ai_moderate_background' => true, 'auto_approve_low_risk' => true, 'auto_reject_high_risk' => true, 'low_risk_max_score' => 35, 'high_risk_min_score' => 80, 'blocked_keywords' => '', 'rate_limit_enabled' => false, 'rate_limit_min_interval' => 8, 'rate_limit_max_per_hour' => 15, 'geoip_enabled' => false, 'geoip_provider' => 'ipapi', 'geoip_api_key' => '', 'geoip_block_countries' => [], ]); } /** * 获取 IP 归属地设置 */ public static function get_ip_geo_settings(): array { $settings = Settings::get_all(); $provider = sanitize_key((string) ($settings['ip_addr_sdk'] ?? 'null')); $allowed = ['polling', 'qq', 'amap', 'null']; if (!in_array($provider, $allowed, true)) { $provider = 'null'; } $allowed_display = ['comment', 'user_home', 'user_center', 'post']; // Only fill defaults when the key was never saved — empty array means "none". if (!array_key_exists('ip_geo_display', $settings)) { $display_norm = $allowed_display; } else { $display_raw = $settings['ip_geo_display']; $display = is_array($display_raw) ? $display_raw : []; $display_norm = []; foreach ($display as $item) { $key = sanitize_key((string) $item); if (in_array($key, $allowed_display, true) && !in_array($key, $display_norm, true)) { $display_norm[] = $key; } } } $format = sanitize_key((string) ($settings['ip_geo_format'] ?? 'province_city')); if (!in_array($format, ['province_city', 'province', 'country_province'], true)) { $format = 'province_city'; } return [ 'ip_geo_enabled' => !empty($settings['ip_geo_enabled']), 'ip_addr_sdk' => $provider, 'ip_geo_cache_ttl' => max(3600, (int) ($settings['ip_geo_cache_ttl'] ?? 86400)), 'ip_geo_display' => $display_norm, 'ip_geo_format' => $format, 'ip_geo_fallback_text' => (string) ($settings['ip_geo_fallback_text'] ?? ''), 'ip_addr_sdk_qq_appkey' => (string) ($settings['ip_addr_sdk_qq_appkey'] ?? ''), 'ip_addr_sdk_qq_secretkey' => (string) ($settings['ip_addr_sdk_qq_secretkey'] ?? ''), 'ip_addr_sdk_amap_appkey' => (string) ($settings['ip_addr_sdk_amap_appkey'] ?? ''), 'ip_addr_sdk_amap_secretkey' => (string) ($settings['ip_addr_sdk_amap_secretkey'] ?? ''), 'ip_geo_verified' => !empty($settings['ip_geo_verified']), ]; } /** * 获取内容审核设置 */ public static function get_content_audit_settings(): array { $settings = Settings::get_all(); $provider = sanitize_key((string) ($settings['content_audit_provider'] ?? 'baidu')); $allowed = ['baidu', 'null']; if (!in_array($provider, $allowed, true)) { $provider = 'baidu'; } $on_failure = sanitize_key((string) ($settings['content_audit_on_failure'] ?? 'allow')); if (!in_array($on_failure, ['allow', 'block'], true)) { $on_failure = 'allow'; } return [ 'content_audit_enabled' => !empty($settings['content_audit_enabled']), 'content_audit_provider' => $provider, 'content_audit_api_key' => (string) ($settings['content_audit_api_key'] ?? ''), 'content_audit_api_secret' => (string) ($settings['content_audit_api_secret'] ?? ''), 'content_audit_text_enabled' => !isset($settings['content_audit_text_enabled']) || !empty($settings['content_audit_text_enabled']), 'content_audit_image_enabled' => !empty($settings['content_audit_image_enabled']), 'content_audit_on_failure' => $on_failure, 'content_audit_log_enabled' => !isset($settings['content_audit_log_enabled']) || !empty($settings['content_audit_log_enabled']), 'content_audit_baidu_token_url' => (string) ($settings['content_audit_baidu_token_url'] ?? ''), 'content_audit_baidu_text_url' => (string) ($settings['content_audit_baidu_text_url'] ?? ''), 'content_audit_baidu_img_url' => (string) ($settings['content_audit_baidu_img_url'] ?? ''), 'content_audit_verified' => !empty($settings['content_audit_verified']), ]; } /** * 获取搜索引擎推送设置 */ public static function get_search_push_settings(): array { $settings = Settings::get_all(); return [ 'baidu_push_enabled' => !empty($settings['baidu_push_enabled']), 'baidu_push_token' => (string) ($settings['baidu_push_token'] ?? ''), 'baidu_push_auto' => !isset($settings['baidu_push_auto']) || !empty($settings['baidu_push_auto']), 'baidu_push_normal' => !isset($settings['baidu_push_normal']) || !empty($settings['baidu_push_normal']), 'baidu_push_fast' => !empty($settings['baidu_push_fast']), 'baidu_push_on_publish' => !isset($settings['baidu_push_on_publish']) || !empty($settings['baidu_push_on_publish']), 'baidu_push_on_update' => !empty($settings['baidu_push_on_update']), 'baidu_push_log_enabled' => !isset($settings['baidu_push_log_enabled']) || !empty($settings['baidu_push_log_enabled']), ]; } /** 获取网站安全设置(防刷限制、验证码发送限制与安全加固)。 */ public static function get_security_settings(): array { $settings = Settings::get_all(); $number = static function (string $key, int $default, int $min, int $max) use ($settings): int { return max($min, min($max, (int) ($settings[$key] ?? $default))); }; $switch = static function (string $key, bool $default) use ($settings): bool { return !isset($settings[$key]) ? $default : !empty($settings[$key]); }; return [ 'security_brush_post_10min' => $number('security_brush_post_10min', 20, 0, 200), 'security_brush_post_day' => $number('security_brush_post_day', 50, 0, 2000), 'security_brush_comment_10min' => $number('security_brush_comment_10min', 20, 0, 200), 'security_brush_comment_day' => $number('security_brush_comment_day', 100, 0, 2000), 'security_brush_upload_10min' => $number('security_brush_upload_10min', 50, 0, 200), 'security_brush_upload_day' => $number('security_brush_upload_day', 200, 0, 2000), 'security_brush_register_10min' => $number('security_brush_register_10min', 20, 0, 200), 'security_brush_register_day' => $number('security_brush_register_day', 100, 0, 2000), 'security_brush_order_10min' => $number('security_brush_order_10min', 30, 0, 200), 'security_brush_order_day' => $number('security_brush_order_day', 100, 0, 2000), 'security_captcha_send_cooldown' => $number('security_captcha_send_cooldown', 60, 0, 600), 'security_captcha_to_hour' => $number('security_captcha_to_hour', 15, 0, 500), 'security_captcha_to_day' => $number('security_captcha_to_day', 30, 0, 1000), 'security_captcha_ip_10min' => $number('security_captcha_ip_10min', 20, 0, 500), 'security_captcha_ip_day' => $number('security_captcha_ip_day', 50, 0, 2000), 'security_error_frequency_limit' => $switch('security_error_frequency_limit', true), 'security_disabled_pingback' => $switch('security_disabled_pingback', true), 'security_disabled_xmlrpc' => $switch('security_disabled_xmlrpc', true), 'security_user_disable_admin' => $switch('security_user_disable_admin', true), 'close_attachment_page' => $switch('close_attachment_page', true), ]; } /** 获取系统工具设置(WordPress 优化、上传优化、编辑器与显示)。 */ public static function get_system_tools_settings(): array { $settings = Settings::get_all(); $switch = static function (string $key, bool $default) use ($settings): bool { return !isset($settings[$key]) ? $default : !empty($settings[$key]); }; $rename_type = sanitize_key((string) ($settings['newfilename_type'] ?? 'time')); if (!in_array($rename_type, ['random', 'time'], true)) { $rename_type = 'time'; } // Only fill defaults when the key was never saved — empty array means "none". $toolbar_scenes = ['pc_s', 'm_s']; if (!array_key_exists('mce_float_toolbar', $settings)) { $float_toolbar = $toolbar_scenes; } else { $float_toolbar = []; foreach ((array) ($settings['mce_float_toolbar'] ?? []) as $scene) { $scene = sanitize_key((string) $scene); if (in_array($scene, $toolbar_scenes, true) && !in_array($scene, $float_toolbar, true)) { $float_toolbar[] = $scene; } } } return [ 'hide_admin_bar' => $switch('hide_admin_bar', true), 'remove_emoji' => $switch('remove_emoji', true), 'remove_open_sans' => $switch('remove_open_sans', true), 'remove_more_wp_head' => $switch('remove_more_wp_head', true), 'remove_dashboard_widgets' => $switch('remove_dashboard_widgets', true), 'display_wp_update' => $switch('display_wp_update', true), 'split_upload_s' => $switch('split_upload_s', true), 'split_minimum_size' => max(4, min(100, (int) ($settings['split_minimum_size'] ?? 20))), 'newfilename' => $switch('newfilename', false), 'newfilename_type' => $rename_type, 'disabled_large_thumbnail' => $switch('disabled_large_thumbnail', true), 'admin_user_del_fields' => $switch('admin_user_del_fields', true), 'admin_frontend_set' => $switch('admin_frontend_set', true), 'close_gutenberg' => $switch('close_gutenberg', false), 'disabled_autoembed' => $switch('disabled_autoembed', true), 'mce_float_toolbar' => $float_toolbar, 'time_ago_s' => $switch('time_ago_s', true), 'time_format' => (string) ($settings['time_format'] ?? 'n月j日 H:i'), ]; } /** 获取短信接口设置。 */ public static function get_sms_settings(): array { $settings = Settings::get_all(); $sdk = sanitize_key((string) ($settings['sms_sdk'] ?? 'null')); $allowed_sdks = ['null', 'ali', 'tencent', 'smsbao']; if (!in_array($sdk, $allowed_sdks, true)) { $sdk = 'null'; } $ali_api_type = sanitize_key((string) ($settings['sms_ali_api_type'] ?? 'sms')); if (!in_array($ali_api_type, ['sms', 'verify'], true)) { $ali_api_type = 'sms'; } return [ 'sms_sdk' => $sdk, 'sms_number_limit_ch' => !isset($settings['sms_number_limit_ch']) || !empty($settings['sms_number_limit_ch']), // 阿里云 'sms_ali_api_type' => $ali_api_type, 'sms_ali_keyid' => (string) ($settings['sms_ali_keyid'] ?? ''), 'sms_ali_keysecret' => (string) ($settings['sms_ali_keysecret'] ?? ''), 'sms_ali_sign_name' => (string) ($settings['sms_ali_sign_name'] ?? ''), 'sms_ali_template_code' => (string) ($settings['sms_ali_template_code'] ?? ''), 'sms_region_id' => (string) ($settings['sms_region_id'] ?? 'cn-hangzhou'), // 腾讯云 'sms_tencent_app_id' => (string) ($settings['sms_tencent_app_id'] ?? ''), 'sms_tencent_app_key' => (string) ($settings['sms_tencent_app_key'] ?? ''), 'sms_tencent_sign_name' => (string) ($settings['sms_tencent_sign_name'] ?? ''), 'sms_tencent_template_id' => (string) ($settings['sms_tencent_template_id'] ?? ''), // 短信宝 'sms_smsbao_username' => (string) ($settings['sms_smsbao_username'] ?? ''), 'sms_smsbao_password' => (string) ($settings['sms_smsbao_password'] ?? ''), 'sms_smsbao_api_key' => (string) ($settings['sms_smsbao_api_key'] ?? ''), 'sms_smsbao_template' => (string) ($settings['sms_smsbao_template'] ?? ''), ]; } }