与参考主题(zibll)1:1 对齐百度推送,并清掉存量双路与死代码: - 新增普通/快速收录通道开关,快速收录走 &type=daily;自动推送 JS 与参考实现一致 - 分类法 saved_term 推送(可推送类型推导公开分类法,排除 post_format,aksrt_baidu_push_taxonomies 可过滤) - 推送结果写入 meta 去重,成功后不重复提交;编辑页 Metabox 展示结果并提供「重新提交」(nonce 校验后强制推送) - 配置面收敛到扩展页单一 canonical 键:删除 SEO 页 seo_baidu_* 重复面与两处合并逻辑,不写迁移兜底 - 清理死代码:push_batch(零调用)及 batch_size、从不写入的 baidu_push_verified、零消费的熊掌号 xzh_* 七键;baidu_push_log_enabled 接入 log() 新增 PHP harness 驱动真实逻辑(通道/去重/重试/重新提交/术语/面板渲染)+ 参考主题契约测试;tests/admin 与 tests/widget-system 全量通过。
265 lines
14 KiB
PHP
265 lines
14 KiB
PHP
<?php
|
|
/**
|
|
* @package AKSRT
|
|
*/
|
|
|
|
namespace AKSRT\Settings;
|
|
|
|
defined('ABSPATH') || exit;
|
|
|
|
class ExtensionRuntime {
|
|
|
|
/** 获取审核配置 */
|
|
public static function get_moderation(): array {
|
|
return get_option('aksrt_moderation_config', [
|
|
'enabled' => 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'] ?? ''),
|
|
];
|
|
}
|
|
}
|