From 435ffd698025356ead759a2aee4fc16c4efab0b2 Mon Sep 17 00:00:00 2001 From: devhaozi Date: Tue, 19 Nov 2024 10:19:27 +0000 Subject: [PATCH 01/18] docs: Update CHANGELOG --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d10811..d8c5dfa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to `WP-China-Yes` will be documented in this file. +## v3.7.1 - 2024-11-19 + +1. 性能优化 +2. 修复监控无法关闭的问题 + +**Full Changelog**: https://github.com/WenPai-org/wp-china-yes/compare/v3.6.5...v3.7.1 + ## v3.6.5 - 2024-08-23 1. 优化 CLI 判断 From 25fdf04fcc342851622f8065ed46ce1a3da09a5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=97=E5=AD=90?= Date: Sun, 8 Dec 2024 02:50:27 +0800 Subject: [PATCH 02/18] feat: check hook before clear --- Service/Monitor.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Service/Monitor.php b/Service/Monitor.php index efb8c63..b2be08e 100644 --- a/Service/Monitor.php +++ b/Service/Monitor.php @@ -30,7 +30,9 @@ class Monitor { ] ); } } else { - wp_clear_scheduled_hook( 'wp_china_yes_monitor' ); + if ( wp_get_scheduled_event( 'wp_china_yes_monitor' ) ) { + wp_clear_scheduled_hook( 'wp_china_yes_monitor' ); + } } } From a500ff9b6de5953c6d48171bfcf2cc7262af91b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=97=E5=AD=90?= Date: Thu, 12 Dec 2024 23:58:22 +0800 Subject: [PATCH 03/18] =?UTF-8?q?feat:=20=E4=BD=BF=E7=94=A8fa5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Service/Setting.php | 1 - 1 file changed, 1 deletion(-) diff --git a/Service/Setting.php b/Service/Setting.php index 80d7fc7..39903d9 100644 --- a/Service/Setting.php +++ b/Service/Setting.php @@ -19,7 +19,6 @@ class Setting { public function __construct() { $this->settings = get_settings(); add_filter( 'wp_china_yes_enqueue_assets', '__return_true' ); - add_filter( 'wp_china_yes_fa4', '__return_true' ); add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_admin_assets' ] ); add_action( is_multisite() ? 'network_admin_menu' : 'admin_menu', [ $this, 'admin_menu' ] ); self::admin_init(); From f2a89c42daa9dd41265486e2d0c16ce3bebc734d Mon Sep 17 00:00:00 2001 From: feng Date: Sat, 21 Dec 2024 12:06:40 +0800 Subject: [PATCH 04/18] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E6=96=B0=20UI=20?= =?UTF-8?q?=E5=8F=8A=E5=9F=9F=E5=90=8D=E6=9B=BF=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更新域名wp-china-yes.com 到 wpcy.com --- Service/Setting.php | 182 +++++++++-------- assets/css/fonts.css | 0 assets/css/setting.css | 336 ++++++++++++++++++++++++++++--- assets/images/website-banner.jpg | Bin 0 -> 29467 bytes wp-china-yes.php | 6 +- 5 files changed, 407 insertions(+), 117 deletions(-) mode change 100644 => 100755 Service/Setting.php mode change 100644 => 100755 assets/css/fonts.css mode change 100644 => 100755 assets/css/setting.css create mode 100755 assets/images/website-banner.jpg mode change 100644 => 100755 wp-china-yes.php diff --git a/Service/Setting.php b/Service/Setting.php old mode 100644 new mode 100755 index 39903d9..376bbc6 --- a/Service/Setting.php +++ b/Service/Setting.php @@ -19,6 +19,7 @@ class Setting { public function __construct() { $this->settings = get_settings(); add_filter( 'wp_china_yes_enqueue_assets', '__return_true' ); + add_filter( 'wp_china_yes_fa4', '__return_true' ); add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_admin_assets' ] ); add_action( is_multisite() ? 'network_admin_menu' : 'admin_menu', [ $this, 'admin_menu' ] ); self::admin_init(); @@ -46,9 +47,23 @@ class Setting { 'database' => is_multisite() ? 'network' : '', ] ); + WP_CHINA_YES::createSection( $this->prefix, [ + 'title' => '欢迎使用', + 'icon' => 'icon icon-home-1', + 'fields' => [ + [ + 'type' => 'content', + 'content' => + <<

原生体验

文派叶子🍃(WP-China-Yes)是一款不可多得的 WordPress 系统底层优化和生态基础设施软件。

网站加速

优化加速插件多如牛毛,为何文派叶子如此与众不同?

进一步了解 ↗

翻译推送

高质量翻译中文本地化翻译由文派开源官方提供,欢迎参与改进。

本地化改进 ↗

广告屏蔽

呈现清爽整洁的网站后台,清除侵入式后台广告、无用信息。

获取广告规则 ↗

加入我们

关注文派茶馆 WPTEA.com 公众号以及订阅我们的时事通讯即可接收独家内容、提示和更新。

+HTML, + ] + ], + ] ); + WP_CHINA_YES::createSection( $this->prefix, [ 'title' => '加速设置', - 'icon' => 'fa fa-rocket', + 'icon' => 'icon icon-flash-1', 'fields' => [ [ 'id' => 'store', @@ -62,7 +77,7 @@ class Setting { ], 'default' => 'wenpai', 'subtitle' => '是否启用市场加速', - 'desc' => __( '官方加速源(WPMirror)直接从 .org 反代至大陆分发;文派开源(WenPai.org)中国境内自建托管仓库,同时集成文派翻译平台。可参考源站说明。', + 'desc' => __( '官方加速源(WPMirror)直接从 .org 反代至大陆分发;文派开源(WenPai.org)中国境内自建托管仓库,同时集成文派翻译平台。可参考源站说明。', 'wp-china-yes' ), ], [ @@ -74,15 +89,15 @@ class Setting { 'admin' => '后台加速', 'frontend' => '前台加速', 'googlefonts' => 'Google 字体', - 'googleajax' => 'Google 前端公共库', - 'cdnjs' => 'CDNJS 前端公共库', - 'jsdelivr' => 'jsDelivr 公共库' + 'googleajax' => 'Google 前端库', + 'cdnjs' => 'CDNJS 前端库', + 'jsdelivr' => 'jsDelivr 前端库' ], 'default' => [ 'admin' => 'admin', ], 'subtitle' => '是否启用萌芽加速', - 'desc' => __( '萌芽加速(adminCDN)将 WordPress 依赖的静态文件切换为公共资源,加快网站访问速度。您可按需启用需要加速的项目,更多细节控制和功能,请查看推荐设置。', + 'desc' => __( '萌芽加速(adminCDN)将 WordPress 依赖的静态文件切换为公共资源,加快网站访问速度。您可按需启用需要加速的项目,更多细节控制和功能,请查看推荐设置。', 'wp-china-yes' ), ], [ @@ -98,7 +113,7 @@ class Setting { ], 'default' => 'cn', 'subtitle' => '是否启用头像加速', - 'desc' => __( '初认头像(Cravatar)Gravatar 在中国的完美替代方案,您可以在 Cravatar.com 上传头像,更多选项请安装 WPAavatar 插件。可自选加速线路。', + 'desc' => __( '初认头像(Cravatar)Gravatar 在中国的完美替代方案,您可以在 Cravatar.com 上传头像,更多选项请安装 WPAavatar 插件。可自选加速线路。', 'wp-china-yes' ), ], ], @@ -106,7 +121,7 @@ class Setting { WP_CHINA_YES::createSection( $this->prefix, [ 'title' => '文风字体', - 'icon' => 'fa fa-font', + 'icon' => 'icon icon-text', 'fields' => [ [ 'id' => 'windfonts', @@ -121,7 +136,7 @@ class Setting { ], 'default' => 'off', 'subtitle' => '是否启用文风字体定制', - 'desc' => __( '文风字体(Windfonts)为您的网站增添无限活力。专为中文网页设计,旨在提升用户阅读体验和视觉享受。新手使用请先查看字体使用说明。', + 'desc' => __( '文风字体(Windfonts)为您的网站增添无限活力。专为中文网页设计,旨在提升用户阅读体验和视觉享受。新手使用请先查看字体使用说明。', 'wp-china-yes' ), ], [ @@ -226,14 +241,14 @@ class Setting { ], [ 'type' => 'content', - 'content' => '默认字体适配规则跟随插件更新,插件更新后可删除字体重新添加以获取最新适配规则', + 'content' => '默认字体适配规则跟随插件更新,插件更新后可删除字体重新添加以获取最新适配规则', ], ], ] ); WP_CHINA_YES::createSection( $this->prefix, [ 'title' => '广告屏蔽', - 'icon' => 'fa fa-ban', + 'icon' => 'icon icon-eye-slash', 'fields' => [ [ 'id' => 'adblock', @@ -246,7 +261,7 @@ class Setting { ], 'default' => 'off', 'subtitle' => '是否启用后台广告屏蔽', - 'desc' => __( '文派叶子🍃(WP-China-Yes)独家特色功能,让您拥有清爽整洁的 WordPress 后台,清除各类常用插件侵入式后台广告、通知及无用信息,拿回您的后台控制权。', + 'desc' => __( '文派叶子🍃(WP-China-Yes)独家特色功能,让您拥有清爽整洁的 WordPress 后台,清除各类常用插件侵入式后台广告、通知及无用信息,拿回您的后台控制权。', 'wp-china-yes' ), ], [ @@ -254,7 +269,7 @@ class Setting { 'type' => 'group', 'title' => '规则列表', 'subtitle' => '使用的广告屏蔽规则列表', - 'desc' => __( '支持添加多条广告屏蔽规则', + 'desc' => __( '支持添加多条广告屏蔽规则', 'wp-china-yes' ), 'button_title' => '添加规则', @@ -295,14 +310,14 @@ class Setting { ], [ 'type' => 'content', - 'content' => '默认规则跟随插件更新,插件更新后可删除规则重新添加以获取更多最新屏蔽规则,出现异常,请尝试先停用规则排查原因。', + 'content' => '默认规则跟随插件更新,插件更新后可删除规则重新添加以获取更多最新屏蔽规则,出现异常,请尝试先停用规则排查原因。', ], ], ] ); WP_CHINA_YES::createSection( $this->prefix, [ 'title' => '飞行模式', - 'icon' => 'fa fa-plane', + 'icon' => 'icon icon-airplane', 'fields' => [ [ 'id' => 'plane', @@ -315,7 +330,7 @@ class Setting { ], 'default' => 'off', 'subtitle' => '是否启用飞行模式', - 'desc' => __( '文派叶子🍃(WP-China-Yes)独家特色功能,飞行模式可以屏蔽 WordPress 主题插件中国不能访问的服务 API 请求,加速网站前后台访问。注意:部分外部请求为产品更新检测,若屏蔽请定期手动检测。', + 'desc' => __( '飞行模式可屏蔽 WordPress 插件主题在中国无法访问的 API 请求,加速网站前后台访问。注:部分外部请求为产品更新检测,若已屏蔽请定期检测。', 'wp-china-yes' ), ], [ @@ -323,7 +338,7 @@ class Setting { 'type' => 'group', 'title' => '规则列表', 'subtitle' => '飞行模式使用的 URL 屏蔽规则列表', - 'desc' => __( '支持添加多条 URL 屏蔽规则', + 'desc' => __( '支持添加多条 URL 屏蔽规则', 'wp-china-yes' ), 'button_title' => '添加规则', @@ -366,9 +381,10 @@ class Setting { ], ] ); + WP_CHINA_YES::createSection( $this->prefix, [ - 'title' => '其他设置', - 'icon' => 'fa fa-cogs', + 'title' => '节点监控', + 'icon' => 'icon icon-story', 'fields' => [ [ 'id' => 'monitor', @@ -379,64 +395,82 @@ class Setting { 'desc' => __( '脉云维护(MainCloud)支持自动监控各加速节点可用性,当节点不可用时自动切换至可用节点或关闭加速,以保证您的网站正常访问', 'wp-china-yes' ), ], - [ - 'id' => 'hide', - 'type' => 'switcher', - 'default' => false, - 'title' => '隐藏设置', - 'subtitle' => '隐藏插件设置入口', - 'desc' => __( '如果您不希望让客户知道本站启用了文派叶子🍃(WP-China-Yes)插件及服务,可开启此选项', - 'wp-china-yes' ), - ], - [ - 'id' => 'custom_name', - 'type' => 'text', - 'title' => '品牌白标', - 'subtitle' => '自定义插件显示品牌名', - 'desc' => __( '专为 WordPress 建站服务商和代理机构提供的自定义品牌 OEM 功能,输入您的品牌词启用后生效', - 'wp-china-yes' ), - 'default' => "WP-China-Yes", - ], [ 'type' => 'content', - 'content' => '启用隐藏设置前请务必的保存或收藏当前设置页面 URL,否则您将无法再次进入插件设置页面', + 'content' => '启用隐藏设置前请务必的保存或收藏当前设置页面 URL,否则您将无法再次进入插件设置页面', ], ], ] ); WP_CHINA_YES::createSection( $this->prefix, [ - 'title' => '关于插件', - 'icon' => 'fa fa-info-circle', + 'title' => '品牌白标', + 'icon' => 'icon icon-password-check', 'fields' => [ [ - 'type' => 'heading', - 'content' => '文派叶子🍃 —— 开源 WordPress 中国网站加速器。', - ], - [ - 'type' => 'submessage', - 'content' => '100% 开源代码,一起参与文派(WordPress)软件国产化进程,打造属于您自己的开源自助建站程序。', - ], - [ - 'type' => 'subheading', - 'content' => '项目简介', + 'id' => 'custom_name', + 'type' => 'text', + 'title' => '品牌白标', + 'subtitle' => '自定义插件显示品牌名', + 'desc' => __( '专为 WordPress 建站服务商和代理机构提供的自定义品牌 OEM 功能,输入您的品牌词启用后生效', + 'wp-china-yes' ), + 'default' => "WP-China-Yes", ], [ 'type' => 'content', - 'content' => '文派叶子 🍃(WP-China-Yes)是一款不可多得的 WordPress 系统底层优化和生态基础设施软件。项目起源于 2019 年,专为解决困扰了中国互联网数十年的特色问题而存在。此为文派开源(WenPai.org)的一部分。

将您的 WordPress 接入本土生态体系,这将为您提供一个更贴近中国人使用习惯的 WordPress。', + 'content' => '启用隐藏设置前请务必的保存或收藏当前设置页面 URL,否则您将无法再次进入插件设置页面', ], + ], + ] ); + + + WP_CHINA_YES::createSection( $this->prefix, [ + 'title' => '其他设置', + 'icon' => 'icon icon-setting', + 'fields' => [ [ - 'type' => 'subheading', - 'content' => '赞助商', - ], - [ - 'type' => 'submessage', - 'content' => '特别感谢以下企业品牌对文派项目提供的资金资源,同时期待社会各界参与。', + 'id' => 'hide', + 'type' => 'switcher', + 'default' => false, + 'title' => '隐藏设置', + 'subtitle' => '隐藏插件设置入口', + 'desc' => __( '如果您不希望让客户知道本站启用了文派叶子🍃(WP-China-Yes)插件及服务,可开启此选项', + 'wp-china-yes' ), ], + ], + ] ); + + + WP_CHINA_YES::createSection( $this->prefix, [ + 'title' => '建站套件', + 'icon' => 'icon icon-mouse', + 'fields' => [ [ 'type' => 'content', 'content' => << +

开源建站

文派寻鹿🦌(WP Deer)建站套件是由文派科技官方提供的企业建站产品集合,代码均为 100% GPL 开源,无任何加密隐藏。

SEO 优化技巧

WPXYZ.com ↗

网站政策合规

WPICP.com ↗

软件开发工具

WPSDK.com ↗
+HTML, + ] + ], + ] ); + + + + WP_CHINA_YES::createSection( $this->prefix, [ + 'title' => '关于插件', + 'icon' => 'icon icon-info-circle', + 'fields' => [ + [ + 'type' => 'content', + 'content' => + <<
+

项目简介

文派(WordPress)中国本土化项目始于 2019 年,由 文派叶子🍃(WPCY) 插件开启,其前身为 WP-China-Yes。 + +

2023 年 5 月,文派科技完成对该项目的收购,并对其进行了全面的品牌重塑。

+

赞助支持

特别感谢以下企业品牌对文派项目提供的资金资源支持。早期伙伴未来有机会共享文派生态资源,期待社会各界参与。

-HTML, - ], - [ - 'type' => 'subheading', - 'content' => '开发者 & 贡献者', - ], - [ - 'type' => 'submessage', - 'content' => '以下为对此项目提供过帮助的朋友,欢迎贡献您自己的力量。', - ], - [ - 'type' => 'content', - 'content' => - << -孙锡源 | -耗子 | -Yulinn | -赵丰 | -jialong Dong | -TigerKK | -xianyu125 | -ElliotHughes | -诗语 | -莫蒂奇 | -薇晓朵 -
+

开发 & 贡献者

100% 开源代码,诚邀您一起参与文派 (WordPress) 软件国产化进程,打造属于自己的开源自助建站程序。

HTML, ] ], ] ); + } /** diff --git a/assets/css/fonts.css b/assets/css/fonts.css old mode 100644 new mode 100755 diff --git a/assets/css/setting.css b/assets/css/setting.css old mode 100644 new mode 100755 index f72e77b..1ad5486 --- a/assets/css/setting.css +++ b/assets/css/setting.css @@ -1,26 +1,64 @@ +#wpcontent { + padding-left: 0px; +} +#wpbody-content { + padding-bottom: 0px; +} +#wpfooter { + display: none; +} + + +@media only screen and (max-width: 782px) { + .wp_china_yes-nav-normal+.wp_china_yes-content { + margin-left: 0!important; + } + .wp_china_yes-header-inner h1 { + margin-bottom: 20px; + } + .auto-fold #wpcontent { + padding-left: 0px; + } + .wp_china_yes-field-text input { + width: 100%; + } +} + +.wp-core-ui .button, .wp-core-ui .button-primary, .wp-core-ui .button-secondary { + border-radius: 1px; +} + .sponsor-logos { display: block; flex-wrap: wrap; justify-content: center; + margin: 24px 0; + grid-gap: 24px; + grid-template-columns: repeat(7, minmax(0, 1fr)); + align-items: center; } .sponsor-logos img { flex-basis: calc(20% - 10px); - max-width: 85px; - margin: 14px; + max-width: 80px; + margin: 13px; height: auto; } .contributors-name { margin-top: 0; margin-bottom: 0; - padding: 12px; + padding: 20px 0; color: #dcdcde; + display: block; + flex-wrap: wrap; + display: flex; + grid-gap: 22px; } -.contributors-name a { - line-height: 2; - padding: 0.5em; +.wp_china_yes-content { + position: relative; + background-color: #f1f1f1; } .wp_china_yes-content a { @@ -33,21 +71,67 @@ } .wp_china_yes-options { - background-color: #fff; - padding: 1%; + background-color: #ffffff; border-radius: 10px; text-transform: none; line-height: 2; - box-shadow: 0 0.375rem 1.5rem 0 rgba(141, 153, 165, 0.13); - max-width: 1100px; - margin: 2rem auto; +} + +.wp_china_yes-options { + margin-top: 0px; + margin-right: 0px; +} + +.wp_china_yes-field.wp_china_yes-field-radio, .wp_china_yes-field-checkbox, .wp_china_yes-field-group, .wp_china_yes-field-switcher, .wp_china_yes-field-text { + padding: 8%; + background-color: #ffffff; + margin: 5% 0; + border-radius: 1px; + box-shadow: 0 0 0 1px #ccd0d4, 0 1px 1px 1px rgba(0, 0, 0, .04); +} + + +.wp_china_yes-section { + margin: 50px auto; + max-width: 1000px; + background-color: #f1f1f1; +} + +.wp_china_yes-field { + position: relative; + border: 0px solid #ccd0d4; +} + +.wp_china_yes-field+.wp_china_yes-field { + border-top: 0px solid #eee; +} + +.wp_china_yes-field.wp_china_yes-field-content { + padding: 0px; } .wp_china_yes-section-title { padding: 20px 30px; background-color: #fff; border-top: 0 solid #f5f5f5; - border-bottom: 1px solid #f5f5f5; + border-bottom: 0px solid #eee; + box-shadow: 0 0 0 1px #ccd0d4, 0 1px 1px 1px rgba(0, 0, 0, .04); +} + +.wp_china_yes-section-title h3 { + font-size: 14px; + font-weight: 400; +} + +.wp_china_yes-section-title .wp_china_yes-section-icon { + margin-right: 10px; + width: 20px; + height: 24px; + line-height: 20px; + font-size: 20px; + text-align: center; + display: inline-block; + vertical-align: middle; } .wp_china_yes-field-subheading { @@ -63,14 +147,18 @@ background: #ffffff; } + .wp_china_yes-theme-light .wp_china_yes-nav-background { background-color: #ffffff; - border-right: 1px solid #f5f5f5; + border-right: 1px solid #dddddd; + flex-direction: column; + min-height: 100vh; } .wp_china_yes-theme-light .wp_china_yes-footer { border-top: 1px solid #fff; background: #ffffff; + display: none; } .wp_china_yes-field-heading { @@ -78,24 +166,71 @@ background-color: #ffffff; } +.wp_china_yes-nav-normal { + width: 205px; + padding-left: 20px; +} + +.wp_china_yes-nav { + padding: 20px; +} +.wp_china_yes-nav-background { + width: 250px; +} +.wp_china_yes-nav ul li a { + font-size: 13px; + position: relative; + display: block; + padding: 10px 15px; + margin: 5px; + text-decoration: none; + transition-property: color, background; + transition-duration: .2s; + transition-timing-function: ease; +} + +.wp_china_yes-nav .wp_china_yes-tab-icon { + margin-right: 10px; + width: 20px; + height: 24px; + line-height: 20px; + font-size: 20px; + text-align: center; + display: inline-block; + vertical-align: middle; +} + .wp_china_yes-theme-light .wp_china_yes-nav ul li a { background-color: #ffffff; } +.wp_china_yes-theme-light .wp_china_yes-nav ul li a:hover { + color: #3858e9; + background-color: #f1f1f1; +} .wp_china_yes-submessage-normal { border-color: #ffffff; background-color: #ffffff; } -.wp_china_yes-field + .wp_china_yes-field { - border-top: 1px solid #ffffff; + +.wp_china_yes-nav-normal+.wp_china_yes-content { + margin-left: 248px; +} + +.wp_china_yes-search-all .wp_china_yes-content, .wp_china_yes-show-all .wp_china_yes-content { + margin-left: 0; } .wp_china_yes-theme-light .wp_china_yes-nav-normal > ul li a { - border-bottom: 1px solid #f5f5f5; - border-right: 1px solid #f5f5f5; + border-bottom: 0px solid #f5f5f5; + border-right: 0px solid #f5f5f5; +} +.wp_china_yes-theme-light .wp_china_yes-nav ul li .wp_china_yes-active { + color: #111; + background-color: #f5f5f7; + background: #f5f5f7; } - .wp_china_yes-field-group .wp_china_yes-cloneable-header-icon { font-size: 10px; } @@ -116,28 +251,37 @@ .wp_china_yes-field-group .wp_china_yes-cloneable-title { border: 1px solid #ccd0d4; background-color: #ffffff; - border-radius: 8px; + border-radius: 1px; } .wp_china_yes-field-group .wp_china_yes-cloneable-content { - border: 0 solid #ffffff; - background-color: #ffffff; + padding: 0; + border-top: 1px solid #ffffff; +} + +.wp_china_yes-field-group .wp_china_yes-cloneable-content>.wp_china_yes-field { + padding: 15px; + margin: 20px; } .wp_china_yes-sticky .wp_china_yes-header-inner { - border-radius: 10px; - box-shadow: 0 0 10px rgba(0, 0, 0, .1); + border-bottom: 1px solid #dddddd; + background: #ffffff; +} +.wp_china_yes-sticky .wp_china_yes-header-inner { + position: fixed; + box-shadow: unset; } .wp_china_yes-warning-primary { - color: #fff !important; - border-color: #2c3338 !important; - background: #2c3338 !important; + color: #5e77ec !important; + border-color: #5e77ec !important; + background: #ffffff !important; } .wp_china_yes-warning-primary:focus, .wp_china_yes-warning-primary:hover { - border-color: #1d2327 !important; - background: #1d2327 !important; + border-color: #3858e9 !important; + background: #ffffff !important; } .wp_china_yes-field-switcher .wp_china_yes--switcher:not(.wp_china_yes--active) { @@ -148,3 +292,139 @@ margin-right: -2px; margin-bottom: -1px; } + + +@media screen and (max-width: 600px) { +.wpcy-about__grid { + grid-template-columns: 1fr!important; + } +} + + +span.wpcy-icon-inner { + line-height: 1px; + font-size: 28px; + color: #000000; +} + +span.wpcy-icon-inner-list { + line-height: 0px; + font-size: 24px; + color: #000000; +} + +.wpcy-about__grid { + margin: 24px auto; + display: grid; + grid-gap: 24px; + grid-template-columns: repeat(2, minmax(0, 1fr)); +} + +.wpcy-kit__grid { + margin: 24px auto; + display: grid; + grid-gap: 24px; + grid-template-columns: repeat(1, minmax(0, 1fr)); +} + +.column.wpcy-kit-banner { + padding: 6% 6% 3%!important; +} + +.wpcy-about__grid .column { + padding: 10%; + background-color: #ffffff; + border-radius: 1px; + box-shadow: 0 0 0 1px #ccd0d4, 0 1px 1px 1px rgba(0, 0, 0, .04); + display: flex; + flex-direction: column; + align-items: flex-start; +} +.wpcy-about__grid.columns-1 { + grid-template-columns: repeat(1, minmax(0, 1fr)); +} +.wpcy-about__grid.columns-3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); +} +.wpcy-about__grid .column > svg { + width: 30px; + height: 30px; + margin-left: -3px; +} + +.wpcy-buttons { + margin-top: 4px; + margin-bottom: 32px; + display: flex; + flex-wrap: wrap; + gap: 12px; +} +.wpcy-banner img { + max-width: 100%; + width: 100%; + height: auto; + margin-top: auto; + vertical-align: middle; +} +.components-button.has-icon { + justify-content: center; + min-width: 36px; + padding: 6px; +} +.components-button.has-icon.has-text { + gap: 4px; + justify-content: start; + padding-left: 8px; + padding-right: 12px; +} + +.wpcy-about__list li a:not(:hover) { + text-decoration: none; +} +.components-button { + align-items: center; + -webkit-appearance: none; + background: none; + border: 0; + border-radius: 2px; + box-sizing: border-box; + color: var(--wp-components-color-foreground, #1e1e1e); + cursor: pointer; + display: inline-flex +; + font-family: inherit; + font-size: 13px; + font-weight: 400; + height: 36px; + margin: 0; + padding: 6px 12px; + text-decoration: none; + transition: box-shadow .1s linear; +} +.components-button.button-link { + background: none; + border: 0; + border-radius: 0; + box-shadow: none; + color: var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9)); + height: auto; + margin: 0; + outline: none; + padding: 0; + text-align: left; + text-decoration: underline; + transition-duration: .05s; + transition-property: border, background, color; + transition-timing-function: ease-in-out; +} +.components-button.button-primary { + display: inline-flex; + padding: 6px 12px; +} + +.components-button.button-secondary { + background: #0000; + display: inline-flex; + padding: 6px 12px; +} + diff --git a/assets/images/website-banner.jpg b/assets/images/website-banner.jpg new file mode 100755 index 0000000000000000000000000000000000000000..475afd7c3cfa94a9b262deecb33615eb9419067f GIT binary patch literal 29467 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%0AaD z^x)tFZE$&HJUa|pRr&AB{=b_N90z`KY#ZL-f#=T&+PT2HyE_ZkMd^SQaPVRAbBy1r z*6>T3VmIgeZ_%2TQTPBEgB+2838c*7x$I)tJEOT2`Jk*=#cEuIx*>YYc3{|Xw=!9h zth=dXRY<8;L0(bX)V*Fka_6|BpFMt_z z$92U*wPr(SuJ?(Pe5JpWKdY{Wy_DOw_6Uxsk-gb$IG{~>*6l(T!>y;Q2mIMYo zPq!gu9pnmNN`V4J6gdyMmCuZ^&59P>hZw<>ove0%6%=)$B$8CUU(4#5Yf(AU0lbr) zHc#1On$eku9oLsfmisN^`>x(&j!-)=ICYIkNXU+-SnuBFvf=nd3243yOKs&2w%XT6 zT6v)EvUo(Kdh1r_rZsl${wib7A`1~8u7;igQaBzq($EI_@F@Tx40^@tod6^Z#!SV#W=WH~7YElp}v^!wbC$#7jSFZ2Bqe0*7UE$9)1ZpGa(cso~O zBvN1;?FR`DZso+r>0?wuIqa37fYZ{T-Zo>Yi=>gC>3hC+3568T+d+R;EBz%f^cLCz z(OP)apF}=jY0TGebECd+*owc*THbr(_wd~3W?k0Z+dqiGH2E7iIr$kBc}01Nmy(w= zvvY&z8=|D4wtaewh9%j-#=-vQxOlPzF^RUXv6a0MFX%GAFLY0v!5&ZEA_4P6DFCG zVNZVx8X;gsH)Y#xm*rAdPM~9_zeg_rad0k*E1tK9C8>}G4w6lNb5|%Owf2c6-q4=0 zJRk9E z8=i6et?{S&YohfU~g!sj3BEMd|?js_eb zt^_>^O<9A!x&NbrGODIe-3>4>E3lF4d{9Kuv7?6_@AofatW*C=tcJSoM6%{{Yk3<`xZni#9IV)#N{0-?H=Y zeCx-%ziJIl>*)zO6E>+kgq%Vx)3oEE7_x`rfdhbR%R~Wd1o)AFhuUzcdkxRI$z4L2QPCyNQHgRv_j@SfnL z-;#(dey^L=qy$8G`Q0q~o`Eh*YLR0ac*U%oePN?Qtb{5 zczpjgz7wUjqYDK&lNYJhXKjCKd_M_jYJ`~X;_w`rL0EVdp0jw9Zt;q2=k{tz?DT6f zqQ1p#`|Z+;$dV0y{w?4RDb77BW{+3dytSAO{O>B%h-~V`AdijwUk@80+{O|RskzB2 zh1R$Nfy((cW0}PnLBN>0%*j3)@5uP(G{KzNp7t&W{fTM4^l3G~FNcO9J{#JHQ5ee? zp_eT*uE0J0LOTa|tUDbV3y|maZPMLQVHW=y-@}l&y?uxa1&$Vxjor}Sm!7oAA%=+@ z9!AUSqu1Z@ifkhx$MTX2z{vUVfqW8@n5+!?QZ};*mo39Eh?EM(Bo6+zVm5WIOO?a+ zO88D%4t%bS?Sy}yAFqxms?@|VnN*DQMq`^=gf1f$8N|E4yrjm{ji@GMyY{?A+cbE# zzEASyX>7*? z$nz@BQF0>gjnEcq>NOAyq`rIEptTKuVR?>UI6jDCgT9*3;@YCsqy7f4{#~{;{bGF` zMey?;IN<4DKNFSk73=@y(Eo+byiWB7^6nNbvmT{8(P3*l<+%oK+Z0~+d(V%VWVZe_ zn~xzRRHxnKt=#EoQyx><$ypdVu32jt80nKKxMW{2ze`mxwm#9#_}+>H6-aq_@j3cy zVd|Wn>Ru}F@R;Lz>l(a-${!Qk8yaC)BzJagcYC9WLB;r9;A{J-!mro?kPjj(R4i=5 zgDG#}Gcz-Y((RqW3`}`pAlh9Z8xgq&vqvsaNXP>eTRofZbumT*6VE6;t!ErF7^M9o z{putK7kXeHncWh&H1FsVsFpxAYxp)LU9E+#c%IzPlJzObl-?hkNgmzbp_uAE73K=L zdz@8~XIqdaV{@SAqp;V3pd{wgYV<1H(T%Uj!22VA%qq&X5VCV^1ON^vQ9G3=fD4iW%>T$TV-Wk`R)Nb+jz2Of1Dieae+P} z#AI*LTud@r8c)3~1tjK{yIJQvt906NuSFBL=Y*OP1YOv;=M#>+Q}D1)^J zdeXto)QD~HKcYLWa0qjYO``>jhDMPx#3p>6CF8;w?mvl^Jg{5>lL4f zh<;bf=AUxgrioun`R7dXwqLbux(OJ0-rJZ`)^`)a*Viv%>DuvajDm3v_z5D$w!h?x zEJZz?#jB0mG%uq?YF-qv4y(onkvainNgAN!sK-NQ`< zEL+=9rpVq$dJqYt&5jo*elsV|uf^VY#SJ3t4at0y`X)J+V{#qP@N3%91_qdi)y#?Q zwN^fTNRm06++G`|oxo9s0@c=AGzgZXDzO6G}rrd@<~^ z=Wt~-+#2mGbTT}ABYBp(WRg6*>*{skk;I4)Bwy|TJE+jkY9xt5sAN6w%d)?=TzMN7 z_=qHqfU3uGc+~3wo#U44*_w>)mHO74xQAWHIaQVIn1>=~QY+$7C0jMLzmrPwjV@Dn z7ezeTsCXF@j;gED4sjwY_cLv#TrTI*!Kk09b&dlL=iqb^IeNOWasEs5!AqZ=dtNc1 zfAA);G#%!3WyDYQ$ep^)+QqzK0YXs=L@8`mGSh4m%JfsuCQP&J#);k9BIc@))d>r& zhFu$TfFYkyXZN2XjL?wI!eg`dwU=AC%Z=YFBp)B`mT+Yv>y)T8{w9 zFU^Fi+BEtZ8p~B+SBNquO%6jFVai-h^EC-4jqxZ1rC`l zi|{pEM)oXolh6`3R>s#_?#@$lL4l>v10^}H$r(4~r_vY(v)6}JbIqCveO0h3-C)^D zFkTJ|QB1rAg{d`Ze4-`S++)Xbk*0pGe6TrSj<3GIFLEZ{Z7xC4q0)tP$%J*RldqY? z5JaDfzp@#kfTIh~sr>g-9)ES;UOpVFf+-8mg!ZWP?uO{qv`2;5?sE70z+idj!) zF?YAXbBS&c&#IX)PQ$~E@BeBfc#s715q%xjX7Jb=%l5T7`snLO-6%O-lkTpBT^1K1f)R4PmFbR z4yvOuYDWLAs=Qe1ODfWhoxz6x7B>}ymV(RVj3J)4glEGA%vGmh@G>c z?kleEt$Dahl7O&>OEzK~(+ye^h(pv94k zW?7Qn9%^(ER|NDkZz=;SN+1TVQ%Yl19h2)cbF%(SZvJ);R#TEhS9Tsrn1j~{I@FvP zte;=#*Z3N8EGi9?_SYfJ!Fy?s(_QP82DAk^x;>0iTff$sIWUGGJ~U#yA6Q`_?LkDt zGg1^k10)IXyFRBbX&d<6S9W*a{`qN+d;CH1*dA? z#EpJ#6!kp_S4y;udrHsUL50)UN4&wkMAZA!fWn!Md#X`=*m3^Eb=d%+fFp*ZK$O`b zL2+H3J^JE_aPda7^z7Dtr;;-Hz_@bKq&fA6J(sXwq0HYppure^&*Wh{(?9o4@v{$@LV&jd1pbFbe$&WFmHcWJ z4>as8FCXMCm}IGQSli#|k5fSbypK27xOwu5PIBu5M*bLtYF8PUAvVB}4hU)oaVxKIbV%(x;qWH!NF9#2b z;oLK%9zY6&5ek|6le9E?C~31m#GrO{U^XzD7Up0hjQ0h`?y))8V(F7@%0kLOore;m zPb+uD>niV}v_m4RhXK7Q?{MFXc_v;^EJl77wus1bNsh6FQ|1P)iGUNHbb?=9g&AeE zB_E@C#ni588B<%qVLJwWR(|O*@yc1rlCXy! zehDsW`YI~h%oDi)+rfv)a}hSiHwFb_kWimmsOT0rt{myL&Rr=N6kT>r_pni~Z%(r& z-(KbUX!9p&Ba*m`$gF@(aWbR4>aBx8C+$|hJst&nw^6bXX%ro@wCfo@7Rg~(pW#bF z8%6bd=xTbx%}$L~n`24>Jk))|gw@EkpXpV~?l<{`n(nj$5l^=Lw72LIXfxt5g!mFd z(SfeaZ=Q!{Pb_Au<}58V?e#^Lb+}KTo;$s!P*OInH1Wu4ssNN$5LUyzW8b`(^vrP| za|x1_%Z>`t4#|}e2VBiL>n+Y`cXlC++8o%RpWDoLqHJLu{O6i|1_FXYq_TWQ-PUYG z!;~B5_gGj&3F3&eh4;<(4-90J287M)&g#@(0!!y8Jq3p(OBi|=izr@@p$Y>S)7_l zm+Z?2PLmP(G^ae;^v-B)*V579T^Kh@rKifwG*}Q&402+!*kb3AUQn8Fc&$87mngKH zwp8YEi#8IiJW3Y9RXBe>Qxy~i$S+-{@mz?0w?*bYhF6MS)PM8=oh(MnV^y0TSAKMc z0*s7wsIVv&^3mEd3MIrq#x~P^ZLodOb;S({ROs5&sSjTU#!+<|_V(1OXJ(25pI8p` zrTG#VYfYDxSt(b49F&=YvqjsvSN$*1?f;cH7K=rqj_>Q`a5$KJpGKHV>OGt7%(V9eYJtt zVTY5z>)=M>n0@m{Xig|arn3cwbs`5G3(K1>Qexwdd2cxzcH&~pRd7>*J9Su<h32CFZGXI&AzV0hOZqv z2{ESB#>^c@WCuTI6zvRR)rpzB7Qs-P?KGiK6uDZcFvjx%6m?`N0t3zEnacRNvij9I$N2H4%6 zaJQCc?s$ijDzrO?GXc6akVC$wNS}R=A=Q&HLJtD zv^iq_rcmO@K$U75c}To=i}c;$;)Dt;Md%SALV5gQlP%1=%J%sgVGO)wJ6Y8McfRK? zN#7C=OR$L|=}{rUy~#E_1HBGf($jO#f^EJCPZTqq?>RN|ohXqFa&rgMBo8BColf0! T9S5<@vmHI@;eVa*yPf$TYTP0d literal 0 HcmV?d00001 diff --git a/wp-china-yes.php b/wp-china-yes.php old mode 100644 new mode 100755 index 1cdd69e..597557f --- a/wp-china-yes.php +++ b/wp-china-yes.php @@ -3,8 +3,8 @@ * Plugin Name: WP-China-Yes * Description: 文派叶子 🍃(WP-China-Yes)是中国 WordPress 生态基础设施软件,犹如落叶新芽,生生不息。 * Author: 文派开源 - * Author URI: https://wp-china-yes.com - * Version: 3.7.1 + * Author URI: https://wpcy.com + * Version: 3.8 * License: GPLv3 or later * Text Domain: wp-china-yes * Domain Path: /languages @@ -19,7 +19,7 @@ namespace WenPai\ChinaYes; defined( 'ABSPATH' ) || exit; -define( 'CHINA_YES_VERSION', '3.7.1' ); +define( 'CHINA_YES_VERSION', '3.8' ); define( 'CHINA_YES_PLUGIN_FILE', __FILE__ ); define( 'CHINA_YES_PLUGIN_URL', plugin_dir_url( CHINA_YES_PLUGIN_FILE ) ); define( 'CHINA_YES_PLUGIN_PATH', plugin_dir_path( CHINA_YES_PLUGIN_FILE ) ); From 8c29188c1bfbcda0fc6ebd9feb9ad10c30c7f391 Mon Sep 17 00:00:00 2001 From: feng Date: Sat, 21 Dec 2024 12:25:04 +0800 Subject: [PATCH 05/18] Create iconsax-icons.php --- framework/fields/icon/iconsax-icons.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100755 framework/fields/icon/iconsax-icons.php diff --git a/framework/fields/icon/iconsax-icons.php b/framework/fields/icon/iconsax-icons.php new file mode 100755 index 0000000..1ab2438 --- /dev/null +++ b/framework/fields/icon/iconsax-icons.php @@ -0,0 +1,12 @@ + 'Iconsax font icon', + 'icons' => array( 'icon icon-24-support','icon icon-3d-cube-scan','icon icon-3d-rotate','icon icon-3d-square','icon icon-3dcube','icon icon-3square','icon icon-aave-aave','icon icon-activity','icon icon-add-circle','icon icon-add-square','icon icon-add','icon icon-additem','icon icon-airdrop','icon icon-airplane-square','icon icon-airplane','icon icon-airpod','icon icon-airpods','icon icon-alarm','icon icon-align-bottom','icon icon-align-horizontally','icon icon-align-left','icon icon-align-right','icon icon-align-vertically','icon icon-android','icon icon-ankr-ankr','icon icon-apple','icon icon-aquarius','icon icon-archive-1','icon icon-archive-2','icon icon-archive-add','icon icon-archive-book','icon icon-archive-minus','icon icon-archive-slash','icon icon-archive-tick','icon icon-archive','icon icon-arrange-circle-2','icon icon-arrange-circle','icon icon-arrange-square-2','icon icon-arrange-square','icon icon-arrow-2','icon icon-arrow-3','icon icon-arrow-bottom','icon icon-arrow-circle-down','icon icon-arrow-circle-left','icon icon-arrow-circle-right','icon icon-arrow-circle-up','icon icon-arrow-down-1','icon icon-arrow-down-2','icon icon-arrow-down','icon icon-arrow-left-1','icon icon-arrow-left-2','icon icon-arrow-left-3','icon icon-arrow-left','icon icon-arrow-right-1','icon icon-arrow-right-2','icon icon-arrow-right-3','icon icon-arrow-right-4','icon icon-arrow-right','icon icon-arrow-square-down','icon icon-arrow-square-left','icon icon-arrow-square-up','icon icon-arrow-square','icon icon-arrow-swap-horizontal','icon icon-arrow-swap','icon icon-arrow-up-1','icon icon-arrow-up-2','icon icon-arrow-up-3','icon icon-arrow-up','icon icon-arrow','icon icon-attach-circle','icon icon-attach-square','icon icon-audio-square','icon icon-augur-rep','icon icon-autobrightness','icon icon-autonio-niox','icon icon-avalanche-avax','icon icon-award','icon icon-back-square','icon icon-backward-10-seconds','icon icon-backward-15-seconds','icon icon-backward-5-seconds','icon icon-backward-item','icon icon-backward','icon icon-bag-2','icon icon-bag-cross-1','icon icon-bag-cross','icon icon-bag-happy','icon icon-bag-tick-2','icon icon-bag-tick','icon icon-bag-timer','icon icon-bag','icon icon-bank','icon icon-barcode','icon icon-battery-charging','icon icon-battery-disable','icon icon-battery-empty-1','icon icon-battery-empty','icon icon-battery-full','icon icon-battery-half','icon icon-be','icon icon-bezier','icon icon-bill','icon icon-binance-coin-bnb','icon icon-binance-usd-busd','icon icon-bitcoin-btc','icon icon-bitcoin-card','icon icon-bitcoin-convert','icon icon-bitcoin-refresh','icon icon-blend-2','icon icon-blend','icon icon-blogger','icon icon-bluetooth-2','icon icon-bluetooth-circle','icon icon-bluetooth-rectangle','icon icon-bluetooth','icon icon-blur','icon icon-book-1','icon icon-book-saved','icon icon-book-square','icon icon-book','icon icon-bookmark-2','icon icon-bookmark','icon icon-bootstrap','icon icon-box-1','icon icon-box-2','icon icon-box-add','icon icon-box-remove','icon icon-box-search','icon icon-box-tick','icon icon-box-time','icon icon-box','icon icon-briefcase','icon icon-brifecase-cross','icon icon-brifecase-tick','icon icon-brifecase-timer','icon icon-broom','icon icon-brush-1','icon icon-brush-2','icon icon-brush-3','icon icon-brush-4','icon icon-brush','icon icon-bubble','icon icon-bucket-circle','icon icon-bucket-square','icon icon-bucket','icon icon-building-3','icon icon-building-4','icon icon-building','icon icon-buildings-2','icon icon-buildings','icon icon-buliding','icon icon-bus','icon icon-buy-crypto','icon icon-cake','icon icon-calculator','icon icon-calendar-1','icon icon-calendar-2','icon icon-calendar-add','icon icon-calendar-circle','icon icon-calendar-edit','icon icon-calendar-remove','icon icon-calendar-search','icon icon-calendar-tick','icon icon-calendar','icon icon-call-add','icon icon-call-calling','icon icon-call-incoming','icon icon-call-minus','icon icon-call-outgoing','icon icon-call-received','icon icon-call-remove','icon icon-call-slash','icon icon-call','icon icon-camera-slash','icon icon-camera','icon icon-candle-2','icon icon-candle','icon icon-car','icon icon-card-add','icon icon-card-coin','icon icon-card-edit','icon icon-card-pos','icon icon-card-receive','icon icon-card-remove-1','icon icon-card-remove','icon icon-card-send','icon icon-card-slash','icon icon-card-tick-1','icon icon-card-tick','icon icon-card','icon icon-cardano-ada','icon icon-cards','icon icon-category-2','icon icon-category','icon icon-cd','icon icon-celo-celo','icon icon-celsius-cel','icon icon-chainlink-link','icon icon-chart-1','icon icon-chart-2','icon icon-chart-21','icon icon-chart-3','icon icon-chart-fail','icon icon-chart-square','icon icon-chart-success','icon icon-chart','icon icon-check','icon icon-chrome','icon icon-civic-cvc','icon icon-clipboard-close','icon icon-clipboard-export','icon icon-clipboard-import','icon icon-clipboard-text','icon icon-clipboard-tick','icon icon-clipboard','icon icon-clock-1','icon icon-clock','icon icon-close-circle','icon icon-close-square','icon icon-cloud-add','icon icon-cloud-change','icon icon-cloud-connection','icon icon-cloud-cross','icon icon-cloud-drizzle','icon icon-cloud-fog','icon icon-cloud-lightning','icon icon-cloud-minus','icon icon-cloud-notif','icon icon-cloud-plus','icon icon-cloud-remove','icon icon-cloud-snow','icon icon-cloud-sunny','icon icon-cloud','icon icon-code-1','icon icon-code-circle','icon icon-code','icon icon-coffee','icon icon-coin-1','icon icon-coin','icon icon-color-swatch','icon icon-colorfilter','icon icon-colors-square','icon icon-command-square','icon icon-command','icon icon-component','icon icon-computing','icon icon-convert-3d-cube','icon icon-convert-card','icon icon-convert','icon icon-convertshape-2','icon icon-convertshape','icon icon-copy-success','icon icon-copy','icon icon-copyright','icon icon-courthouse','icon icon-cpu-charge','icon icon-cpu-setting','icon icon-cpu','icon icon-creative-commons','icon icon-crop','icon icon-crown-1','icon icon-crown','icon icon-cup','icon icon-dai-dai','icon icon-danger','icon icon-dash-dash','icon icon-data-2','icon icon-data','icon icon-decred-dcr','icon icon-dent-dent','icon icon-designtools','icon icon-device-message','icon icon-devices-1','icon icon-devices','icon icon-diagram','icon icon-diamonds','icon icon-direct-down','icon icon-direct-inbox','icon icon-direct-left','icon icon-direct-normal','icon icon-direct-notification','icon icon-direct-right','icon icon-direct-send','icon icon-direct-up','icon icon-direct','icon icon-directbox-default','icon icon-directbox-notif','icon icon-directbox-receive','icon icon-directbox-send','icon icon-discount-circle','icon icon-discount-shape','icon icon-discover-1','icon icon-discover','icon icon-dislike','icon icon-document-1','icon icon-document-cloud','icon icon-document-code-2','icon icon-document-code','icon icon-document-copy','icon icon-document-download','icon icon-document-favorite','icon icon-document-filter','icon icon-document-forward','icon icon-document-like','icon icon-document-normal','icon icon-document-previous','icon icon-document-sketch','icon icon-document-text-1','icon icon-document-text','icon icon-document-upload','icon icon-document','icon icon-dollar-circle','icon icon-dollar-square','icon icon-dribbble','icon icon-driver-2','icon icon-driver-refresh','icon icon-driver','icon icon-driving','icon icon-dropbox','icon icon-edit-2','icon icon-edit','icon icon-educare-ekt','icon icon-electricity','icon icon-element-2','icon icon-element-3','icon icon-element-4','icon icon-element-equal','icon icon-element-plus','icon icon-emercoin-emc','icon icon-emoji-happy','icon icon-emoji-normal','icon icon-emoji-sad','icon icon-empty-wallet-add','icon icon-empty-wallet-change','icon icon-empty-wallet-remove','icon icon-empty-wallet-tick','icon icon-empty-wallet-time','icon icon-empty-wallet','icon icon-enjin-coin-enj','icon icon-eos-eos','icon icon-eraser-1','icon icon-eraser','icon icon-ethereum-classic-etc','icon icon-ethereum-eth','icon icon-export-1','icon icon-export-2','icon icon-export-3','icon icon-export','icon icon-external-drive','icon icon-eye-slash','icon icon-eye','icon icon-facebook','icon icon-fatrows','icon icon-favorite-chart','icon icon-figma-1','icon icon-figma','icon icon-filter-add','icon icon-filter-edit','icon icon-filter-remove','icon icon-filter-search','icon icon-filter-square','icon icon-filter-tick','icon icon-filter','icon icon-finger-cricle','icon icon-finger-scan','icon icon-firstline','icon icon-flag-2','icon icon-flag','icon icon-flash-1','icon icon-flash-circle-1','icon icon-flash-circle','icon icon-flash-slash','icon icon-flash','icon icon-folder-2','icon icon-folder-add','icon icon-folder-cloud','icon icon-folder-connection','icon icon-folder-cross','icon icon-folder-favorite','icon icon-folder-minus','icon icon-folder-open','icon icon-folder','icon icon-forbidden-2','icon icon-forbidden','icon icon-format-circle','icon icon-format-square','icon icon-forward-10-seconds','icon icon-forward-15-seconds','icon icon-forward-5-seconds','icon icon-forward-item','icon icon-forward-square','icon icon-forward','icon icon-frame-1','icon icon-frame-2','icon icon-frame-3','icon icon-frame-4','icon icon-frame','icon icon-framer','icon icon-ftx-token-ftt','icon icon-gallery-add','icon icon-gallery-edit','icon icon-gallery-export','icon icon-gallery-favorite','icon icon-gallery-import','icon icon-gallery-remove','icon icon-gallery-slash','icon icon-gallery-tick','icon icon-gallery','icon icon-game','icon icon-gameboy','icon icon-gas-station','icon icon-gemini-2','icon icon-gemini','icon icon-ghost','icon icon-gift','icon icon-glass-1','icon icon-glass','icon icon-global-edit','icon icon-global-refresh','icon icon-global-search','icon icon-global','icon icon-google-drive','icon icon-google-paly','icon icon-google','icon icon-gps-slash','icon icon-gps','icon icon-grammerly','icon icon-graph','icon icon-grid-1','icon icon-grid-2','icon icon-grid-3','icon icon-grid-4','icon icon-grid-5','icon icon-grid-6','icon icon-grid-7','icon icon-grid-8','icon icon-grid-9','icon icon-grid-edit','icon icon-grid-eraser','icon icon-grid-lock','icon icon-happyemoji','icon icon-harmony-one','icon icon-hashtag-1','icon icon-hashtag-down','icon icon-hashtag-up','icon icon-hashtag','icon icon-headphone','icon icon-headphones','icon icon-health','icon icon-heart-add','icon icon-heart-circle','icon icon-heart-edit','icon icon-heart-remove','icon icon-heart-search','icon icon-heart-slash','icon icon-heart-tick','icon icon-heart','icon icon-hedera-hashgraph-hbar','icon icon-hex-hex','icon icon-hierarchy-2','icon icon-hierarchy-3','icon icon-hierarchy-square-2','icon icon-hierarchy-square-3','icon icon-hierarchy-square','icon icon-hierarchy','icon icon-home-1','icon icon-home-2','icon icon-home-hashtag','icon icon-home-trend-down','icon icon-home-trend-up','icon icon-home-wifi','icon icon-home','icon icon-hospital','icon icon-house-2','icon icon-house','icon icon-html-3','icon icon-html-5','icon icon-huobi-token-ht','icon icon-icon-1','icon icon-icon-2','icon icon-icon-icx','icon icon-icon','icon icon-illustrator','icon icon-image','icon icon-import-1','icon icon-import-2','icon icon-import','icon icon-info-circle','icon icon-information','icon icon-instagram','icon icon-iost-iost','icon icon-java-script','icon icon-js','icon icon-judge','icon icon-kanban','icon icon-key-square','icon icon-key','icon icon-keyboard-open','icon icon-keyboard','icon icon-kyber-network-knc','icon icon-lamp-1','icon icon-lamp-charge','icon icon-lamp-on','icon icon-lamp-slash','icon icon-lamp','icon icon-language-circle','icon icon-language-square','icon icon-layer','icon icon-level','icon icon-lifebuoy','icon icon-like-1','icon icon-like-dislike','icon icon-like-shapes','icon icon-like-tag','icon icon-like','icon icon-Line','icon icon-link-1','icon icon-link-2','icon icon-link-21','icon icon-link-circle','icon icon-link-square','icon icon-link','icon icon-litecoinltc','icon icon-location-add','icon icon-location-cross','icon icon-location-minus','icon icon-location-slash','icon icon-location-tick','icon icon-location','icon icon-lock-1','icon icon-lock-circle','icon icon-lock-slash','icon icon-lock','icon icon-login-1','icon icon-login','icon icon-logout-1','icon icon-logout','icon icon-lovely','icon icon-magic-star','icon icon-magicpen','icon icon-main-component','icon icon-maker-mkr','icon icon-man','icon icon-map-1','icon icon-map','icon icon-mask-1','icon icon-mask-2','icon icon-mask','icon icon-math','icon icon-maximize-1','icon icon-maximize-2','icon icon-maximize-21','icon icon-maximize-3','icon icon-maximize-4','icon icon-maximize-circle','icon icon-maximize','icon icon-medal-star','icon icon-medal','icon icon-menu-1','icon icon-menu-board','icon icon-menu','icon icon-message-2','icon icon-message-add-1','icon icon-message-add','icon icon-message-circle','icon icon-message-edit','icon icon-message-favorite','icon icon-message-minus','icon icon-message-notif','icon icon-message-programming','icon icon-message-question','icon icon-message-remove','icon icon-message-search','icon icon-message-square','icon icon-message-text-1','icon icon-message-text','icon icon-message-tick','icon icon-message-time','icon icon-message','icon icon-messages-1','icon icon-messages-2','icon icon-messages-3','icon icon-messages','icon icon-messenger','icon icon-microphone-2','icon icon-microphone-slash-1','icon icon-microphone-slash','icon icon-microphone','icon icon-microscope','icon icon-milk','icon icon-mini-music-sqaure','icon icon-minus-cirlce','icon icon-minus-square','icon icon-minus','icon icon-mirror','icon icon-mirroring-screen','icon icon-mobile-programming','icon icon-mobile','icon icon-monero-xmr','icon icon-money-2','icon icon-money-3','icon icon-money-4','icon icon-money-add','icon icon-money-change','icon icon-money-forbidden','icon icon-money-recive','icon icon-money-remove','icon icon-money-send','icon icon-money-tick','icon icon-money-time','icon icon-money','icon icon-moneys','icon icon-monitor-mobbile','icon icon-monitor-recorder','icon icon-monitor','icon icon-moon','icon icon-more-2','icon icon-more-circle','icon icon-more-square','icon icon-more','icon icon-mouse-1','icon icon-mouse-circle','icon icon-mouse-square','icon icon-mouse','icon icon-music-circle','icon icon-music-dashboard','icon icon-music-filter','icon icon-music-library-2','icon icon-music-play','icon icon-music-playlist','icon icon-music-square-add','icon icon-music-square-remove','icon icon-music-square-search','icon icon-music-square','icon icon-music','icon icon-musicnote','icon icon-nebulas-nas','icon icon-nem-xem','icon icon-nexo-nexo','icon icon-next','icon icon-note-1','icon icon-note-2','icon icon-note-21','icon icon-note-add','icon icon-note-favorite','icon icon-note-remove','icon icon-note-square','icon icon-note-text','icon icon-note','icon icon-notification-1','icon icon-notification-bing','icon icon-notification-circle','icon icon-notification-favorite','icon icon-notification-status','icon icon-notification','icon icon-ocean-protocol-ocean','icon icon-okb-okb','icon icon-omega-circle','icon icon-omega-square','icon icon-ontology-ont','icon icon-paintbucket','icon icon-paperclip-2','icon icon-paperclip','icon icon-password-check','icon icon-path-2','icon icon-path-square','icon icon-path','icon icon-pause-circle','icon icon-pause','icon icon-paypal','icon icon-pen-add','icon icon-pen-close','icon icon-pen-remove','icon icon-pen-tool-2','icon icon-pen-tool','icon icon-people','icon icon-percentage-circle','icon icon-percentage-square','icon icon-personalcard','icon icon-pet','icon icon-pharagraphspacing','icon icon-photoshop','icon icon-picture-frame','icon icon-play-add','icon icon-play-circle','icon icon-play-cricle','icon icon-play-remove','icon icon-play','icon icon-polkadot-dot','icon icon-polygon-matic','icon icon-polyswarm-nct','icon icon-presention-chart','icon icon-previous','icon icon-printer-slash','icon icon-printer','icon icon-profile-2user','icon icon-profile-add','icon icon-profile-circle','icon icon-profile-delete','icon icon-profile-remove','icon icon-profile-tick','icon icon-programming-arrow','icon icon-programming-arrows','icon icon-python','icon icon-quant-qnt','icon icon-quote-down-circle','icon icon-quote-down-square','icon icon-quote-down','icon icon-quote-up-circle','icon icon-quote-up-square','icon icon-quote-up','icon icon-radar-1','icon icon-radar-2','icon icon-radar','icon icon-radio','icon icon-ram-2','icon icon-ram','icon icon-ranking-1','icon icon-ranking','icon icon-receipt-1','icon icon-receipt-2-1','icon icon-receipt-2','icon icon-receipt-add','icon icon-receipt-discount','icon icon-receipt-disscount','icon icon-receipt-edit','icon icon-receipt-item','icon icon-receipt-minus','icon icon-receipt-search','icon icon-receipt-square','icon icon-receipt-text','icon icon-receipt','icon icon-receive-square-2','icon icon-receive-square','icon icon-received','icon icon-record-circle','icon icon-record','icon icon-recovery-convert','icon icon-redo','icon icon-refresh-2','icon icon-refresh-circle','icon icon-refresh-left-square','icon icon-refresh-right-square','icon icon-refresh-square-2','icon icon-refresh','icon icon-repeat-circle','icon icon-repeat','icon icon-repeate-music','icon icon-repeate-one','icon icon-reserve','icon icon-rotate-left-1','icon icon-rotate-left','icon icon-rotate-right-1','icon icon-rotate-right','icon icon-route-square','icon icon-routing-2','icon icon-routing','icon icon-row-horizontal','icon icon-row-vertical','icon icon-ruler','icon icon-rulerandpen','icon icon-safe-home','icon icon-sagittarius','icon icon-save-2','icon icon-save-add','icon icon-save-minus','icon icon-save-remove','icon icon-scan-barcode','icon icon-scan','icon icon-scanner','icon icon-scanning','icon icon-scissor-1','icon icon-scissor','icon icon-screenmirroring','icon icon-scroll','icon icon-search-favorite-1','icon icon-search-favorite','icon icon-search-normal-1','icon icon-search-normal','icon icon-search-status-1','icon icon-search-status','icon icon-search-zoom-in-1','icon icon-search-zoom-in','icon icon-search-zoom-out-1','icon icon-search-zoom-out','icon icon-security-card','icon icon-security-safe','icon icon-security-time','icon icon-security-user','icon icon-security','icon icon-send-1','icon icon-send-2','icon icon-send-sqaure-2','icon icon-send-square','icon icon-send','icon icon-setting-2','icon icon-setting-3','icon icon-setting-4','icon icon-setting-5','icon icon-setting','icon icon-settings','icon icon-shapes-1','icon icon-shapes','icon icon-share','icon icon-shield-cross','icon icon-shield-search','icon icon-shield-slash','icon icon-shield-tick','icon icon-shield','icon icon-ship','icon icon-shop-add','icon icon-shop-remove','icon icon-shop','icon icon-shopping-bag','icon icon-shopping-cart','icon icon-shuffle','icon icon-siacoin-sc','icon icon-sidebar-bottom','icon icon-sidebar-left','icon icon-sidebar-right','icon icon-sidebar-top','icon icon-signpost','icon icon-simcard-1','icon icon-simcard-2','icon icon-simcard','icon icon-size','icon icon-slack','icon icon-slash','icon icon-slider-horizontal-1','icon icon-slider-horizontal','icon icon-slider-vertical-1','icon icon-slider-vertical','icon icon-slider','icon icon-smallcaps','icon icon-smart-car','icon icon-smart-home','icon icon-smileys','icon icon-sms-edit','icon icon-sms-notification','icon icon-sms-search','icon icon-sms-star','icon icon-sms-tracking','icon icon-sms','icon icon-snapchat','icon icon-solana-sol','icon icon-sort','icon icon-sound','icon icon-speaker','icon icon-speedometer','icon icon-spotify','icon icon-stacks-stx','icon icon-star-1','icon icon-star-slash','icon icon-star','icon icon-status-up','icon icon-status','icon icon-stellar-xlm','icon icon-sticker','icon icon-stickynote','icon icon-stop-circle','icon icon-stop','icon icon-story','icon icon-strongbox-2','icon icon-strongbox','icon icon-subtitle','icon icon-sun-1','icon icon-sun-fog','icon icon-sun','icon icon-tag-2','icon icon-tag-cross','icon icon-tag-right','icon icon-tag-user','icon icon-tag','icon icon-task-square','icon icon-task','icon icon-teacher','icon icon-tenx-pay','icon icon-tether-usdt','icon icon-text-block','icon icon-text-bold','icon icon-text-italic','icon icon-text-underline','icon icon-text','icon icon-textalign-center','icon icon-textalign-justifycenter','icon icon-textalign-justifyleft','icon icon-textalign-justifyright','icon icon-textalign-left','icon icon-textalign-right','icon icon-the-graph-grt','icon icon-theta-theta','icon icon-thorchain-rune','icon icon-tick-circle','icon icon-tick-square','icon icon-ticket-2','icon icon-ticket-discount','icon icon-ticket-expired','icon icon-ticket-star','icon icon-ticket','icon icon-timer-1','icon icon-timer-pause','icon icon-timer-start','icon icon-timer','icon icon-toggle-off-circle','icon icon-toggle-off','icon icon-toggle-on-circle','icon icon-toggle-on','icon icon-trade','icon icon-transaction-minus','icon icon-translate','icon icon-trash','icon icon-tree','icon icon-trello','icon icon-trend-down','icon icon-trend-up','icon icon-triangle-1','icon icon-triangle','icon icon-trontron-trx','icon icon-truck-fast','icon icon-truck-remove','icon icon-truck-tick','icon icon-truck-time','icon icon-truck','icon icon-trush-square','icon icon-twitch','icon icon-ui8','icon icon-undo','icon icon-unlimited','icon icon-unlock','icon icon-usd-coin-usdc','icon icon-user-add','icon icon-user-cirlce-add','icon icon-user-edit','icon icon-user-minus','icon icon-user-octagon','icon icon-user-remove','icon icon-user-search','icon icon-user-square','icon icon-user-tag','icon icon-user-tick','icon icon-user','icon icon-velas-vlx','icon icon-verify','icon icon-vibe-vibe','icon icon-video-add','icon icon-video-circle','icon icon-video-horizontal','icon icon-video-octagon','icon icon-video-play','icon icon-video-remove','icon icon-video-slash','icon icon-video-square','icon icon-video-tick','icon icon-video-time','icon icon-video-vertical','icon icon-video','icon icon-voice-cricle','icon icon-voice-square','icon icon-volume-cross','icon icon-volume-high','icon icon-volume-low-1','icon icon-volume-low','icon icon-volume-mute','icon icon-volume-slash','icon icon-volume-up','icon icon-vuesax','icon icon-wallet-1','icon icon-wallet-2','icon icon-wallet-3','icon icon-wallet-add-1','icon icon-wallet-add','icon icon-wallet-check','icon icon-wallet-minus','icon icon-wallet-money','icon icon-wallet-remove','icon icon-wallet-search','icon icon-wallet','icon icon-wanchain-wan-1','icon icon-wanchain-wan','icon icon-warning-2','icon icon-watch-status','icon icon-watch','icon icon-weight-1','icon icon-weight','icon icon-whatsapp','icon icon-wifi-square','icon icon-wifi','icon icon-wind-2','icon icon-wind','icon icon-windows','icon icon-wing-wing','icon icon-woman','icon icon-xd','icon icon-xiaomi','icon icon-xrp-xrp','icon icon-youtube','icon icon-zel-zel','icon icon-zoom' ) + ) ); + } +} From 071d022ccfc4235cfc8c350a8889d99bd4b6eba2 Mon Sep 17 00:00:00 2001 From: feng Date: Sat, 21 Dec 2024 12:33:36 +0800 Subject: [PATCH 06/18] Update readme.md --- readme.md | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/readme.md b/readme.md index 0cd9af6..dca2c28 100644 --- a/readme.md +++ b/readme.md @@ -33,12 +33,5 @@ ## 赞助商 - - - - - - - - - + + From 33e05459654bb2ae731d1b2f8a086f24ec503255 Mon Sep 17 00:00:00 2001 From: feng Date: Sat, 21 Dec 2024 12:34:21 +0800 Subject: [PATCH 07/18] Update readme.md --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index dca2c28..871eb5f 100644 --- a/readme.md +++ b/readme.md @@ -33,5 +33,5 @@ ## 赞助商 - + From 9ea04f6ac47c7692871035abd8929d22dcb01cb7 Mon Sep 17 00:00:00 2001 From: feng Date: Sat, 21 Dec 2024 12:50:20 +0800 Subject: [PATCH 08/18] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20iconsax=20=E5=9B=BE?= =?UTF-8?q?=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- framework/classes/setup.class.php | 4 ++++ 1 file changed, 4 insertions(+) mode change 100644 => 100755 framework/classes/setup.class.php diff --git a/framework/classes/setup.class.php b/framework/classes/setup.class.php old mode 100644 new mode 100755 index 4742edb..dbd55d2 --- a/framework/classes/setup.class.php +++ b/framework/classes/setup.class.php @@ -577,6 +577,10 @@ if ( ! class_exists( 'WP_CHINA_YES_Setup' ) ) { wp_enqueue_style( 'wp_china_yes-fa5-v4-shims', 'https://jsd.admincdn.com/npm/@fortawesome/fontawesome-free@5.15.4/css/v4-shims.min.css', array(), '5.15.5', 'all' ); } + // Iconsax font icon loader + wp_enqueue_style( 'wp_china_yes-iconsax', 'https://jsd.admincdn.com/npm/iconsax-font-icon@1.1.0/dist/icons.min.css', array(), '1.1.0', 'all' ); + + // Check for developer mode $min = ( self::$premium && SCRIPT_DEBUG ) ? '' : '.min'; From fdce4da05e54842dcb90247587adc26ea202961d Mon Sep 17 00:00:00 2001 From: feng Date: Sat, 21 Dec 2024 13:07:24 +0800 Subject: [PATCH 09/18] Update readme.md --- readme.md | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/readme.md b/readme.md index 871eb5f..b7893bb 100644 --- a/readme.md +++ b/readme.md @@ -2,9 +2,12 @@ 文派叶子 🍃(WP-China-Yes)是中国 WordPress 生态基础设施软件,犹如落叶新芽,生生不息。 + + + ## 简介 -文派叶子 🍃(WP-China-Yes)是一款不可多得的 WordPress 系统底层优化和生态基础设施软件。项目起源于 2019 年,专为解决困扰了中国互联网数十年的特色问题而存在。此为文派开源(WenPai.org)的一部分。 +文派叶子 🍃(WPCY)是一款不可多得的 WordPress 系统底层优化和生态基础设施软件。项目起源于 2019 年,专为解决困扰了中国互联网数十年的特色问题而存在。此为文派开源(WenPai.org)的一部分。 ## 功能 @@ -16,6 +19,14 @@ - [x] 优化 谷歌字体 加载速度 - [x] 优化 谷歌前端库 加载速度 - [x] 优化 CDNJS 加载速度 +- [x] 优化 Jsdelivr 加载速度 +- [x] 集成 WPMirror 镜像更新源 +- [x] 集成 Windfonts 中文网页 Webfonts [文风字体](https://windfonts.com) +- [x] 集成 adminCDN 前端公共库[文风字体](https://windfonts.com) +- [x] 启用 飞行模式 可屏蔽外部 API 请求 +- [x] 启用 节点监控 可自动切换加速节点 +- [x] 启用 品牌白标 可自定义 OEM 插件品牌 + ## 安装 @@ -33,5 +44,4 @@ ## 赞助商 - - + From 7e08f3392336d5cd01c26a3af15627bc040d6657 Mon Sep 17 00:00:00 2001 From: feng Date: Sat, 21 Dec 2024 13:10:25 +0800 Subject: [PATCH 10/18] Update readme.md --- readme.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index b7893bb..1fe546b 100644 --- a/readme.md +++ b/readme.md @@ -1,12 +1,13 @@ # WP-China-Yes +开源 WordPress 中国网站加速器。 + 文派叶子 🍃(WP-China-Yes)是中国 WordPress 生态基础设施软件,犹如落叶新芽,生生不息。 ## 简介 - 文派叶子 🍃(WPCY)是一款不可多得的 WordPress 系统底层优化和生态基础设施软件。项目起源于 2019 年,专为解决困扰了中国互联网数十年的特色问题而存在。此为文派开源(WenPai.org)的一部分。 ## 功能 @@ -22,7 +23,7 @@ - [x] 优化 Jsdelivr 加载速度 - [x] 集成 WPMirror 镜像更新源 - [x] 集成 Windfonts 中文网页 Webfonts [文风字体](https://windfonts.com) -- [x] 集成 adminCDN 前端公共库[文风字体](https://windfonts.com) +- [x] 集成 adminCDN 前端公共库[萌芽加速](https://admincdn.com) - [x] 启用 飞行模式 可屏蔽外部 API 请求 - [x] 启用 节点监控 可自动切换加速节点 - [x] 启用 品牌白标 可自定义 OEM 插件品牌 From 8d3a71414d1fc4a8c5983a8fa29ab66539a4a5c2 Mon Sep 17 00:00:00 2001 From: feng Date: Sat, 21 Dec 2024 13:11:29 +0800 Subject: [PATCH 11/18] Update readme.md --- readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index 1fe546b..fd4c790 100644 --- a/readme.md +++ b/readme.md @@ -16,14 +16,14 @@ - [x] 优化 WordPress 后台加载速度 - [x] 优化 WordPress 前台加载速度 - [x] 移除后台无用请求与组件 -- [x] 替换 Gravatar 头像为[初认头像](https://cravatar.com/) +- [x] 替换 Gravatar 头像为 Cravatar [初认头像](https://cravatar.com/) - [x] 优化 谷歌字体 加载速度 - [x] 优化 谷歌前端库 加载速度 - [x] 优化 CDNJS 加载速度 - [x] 优化 Jsdelivr 加载速度 - [x] 集成 WPMirror 镜像更新源 - [x] 集成 Windfonts 中文网页 Webfonts [文风字体](https://windfonts.com) -- [x] 集成 adminCDN 前端公共库[萌芽加速](https://admincdn.com) +- [x] 集成 adminCDN 前端公共库 [萌芽加速](https://admincdn.com) - [x] 启用 飞行模式 可屏蔽外部 API 请求 - [x] 启用 节点监控 可自动切换加速节点 - [x] 启用 品牌白标 可自定义 OEM 插件品牌 From 5370b07c366d813543337907c58c1673495ac286 Mon Sep 17 00:00:00 2001 From: feng Date: Thu, 2 Jan 2025 10:36:40 +0800 Subject: [PATCH 12/18] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E8=87=B3=203.8=20?= =?UTF-8?q?=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Plugin.php | 2 +- Service/Base.php | 6 +- Service/Memory.php | 254 ++++ Service/Monitor.php | 344 +++-- Service/Setting.php | 138 +- Service/Super.php | 59 +- Service/Update.php | 0 assets/css/setting.css | 3 + assets/images/qr-banner.jpg | Bin 0 -> 48213 bytes assets/images/website-banner.jpg | Bin 29467 -> 48110 bytes framework/assets/css/style-rtl.min.css | 0 framework/assets/css/style.min.css | 0 framework/assets/images/checkerboard.png | Bin framework/assets/images/wp-logo.svg | 0 framework/assets/images/wp-plugin-logo.svg | 0 framework/assets/js/main.min.js | 0 framework/assets/js/plugins.min.js | 0 framework/classes/abstract.class.php | 0 framework/classes/admin-options.class.php | 0 framework/classes/fields.class.php | 0 framework/fields/accordion/accordion.php | 0 framework/fields/background/background.php | 0 framework/fields/backup/backup.php | 0 framework/fields/border/border.php | 0 framework/fields/button_set/button_set.php | 0 framework/fields/callback/callback.php | 0 framework/fields/checkbox/checkbox.php | 0 framework/fields/code_editor/code_editor.php | 0 framework/fields/color/color.php | 0 framework/fields/color_group/color_group.php | 0 framework/fields/content/content.php | 0 framework/fields/date/date.php | 0 framework/fields/datetime/datetime.php | 0 framework/fields/dimensions/dimensions.php | 0 framework/fields/fieldset/fieldset.php | 0 framework/fields/gallery/gallery.php | 0 framework/fields/group/group.php | 0 framework/fields/heading/heading.php | 0 framework/fields/icon/fa4-icons.php | 0 framework/fields/icon/fa5-icons.php | 0 framework/fields/icon/icon.php | 0 .../fields/image_select/image_select.php | 0 framework/fields/index.php | 0 framework/fields/link/link.php | 0 framework/fields/link_color/link_color.php | 0 framework/fields/map/map.php | 0 framework/fields/media/media.php | 0 framework/fields/notice/notice.php | 0 framework/fields/number/number.php | 0 framework/fields/palette/palette.php | 0 framework/fields/radio/radio.php | 0 framework/fields/repeater/repeater.php | 0 framework/fields/select/select.php | 0 framework/fields/slider/slider.php | 0 framework/fields/sortable/sortable.php | 0 framework/fields/sorter/sorter.php | 0 framework/fields/spacing/spacing.php | 0 framework/fields/spinner/spinner.php | 0 framework/fields/subheading/subheading.php | 0 framework/fields/submessage/submessage.php | 0 framework/fields/switcher/switcher.php | 0 framework/fields/tabbed/tabbed.php | 0 framework/fields/text/text.php | 0 framework/fields/textarea/textarea.php | 0 framework/fields/typography/google-fonts.php | 0 framework/fields/typography/typography.php | 0 framework/fields/upload/upload.php | 0 framework/fields/wp_editor/wp_editor.php | 0 framework/functions/actions.php | 0 framework/functions/customize.php | 0 framework/functions/helpers.php | 0 framework/functions/sanitize.php | 0 framework/functions/validate.php | 0 framework/functions/walker.php | 0 framework/index.php | 0 framework/languages/zh_CN.mo | Bin framework/languages/zh_CN.po | 1344 ++++++++--------- helpers.php | 1 + 78 files changed, 1261 insertions(+), 890 deletions(-) mode change 100644 => 100755 Plugin.php mode change 100644 => 100755 Service/Base.php create mode 100755 Service/Memory.php mode change 100644 => 100755 Service/Monitor.php mode change 100644 => 100755 Service/Super.php mode change 100644 => 100755 Service/Update.php create mode 100755 assets/images/qr-banner.jpg mode change 100644 => 100755 framework/assets/css/style-rtl.min.css mode change 100644 => 100755 framework/assets/css/style.min.css mode change 100644 => 100755 framework/assets/images/checkerboard.png mode change 100644 => 100755 framework/assets/images/wp-logo.svg mode change 100644 => 100755 framework/assets/images/wp-plugin-logo.svg mode change 100644 => 100755 framework/assets/js/main.min.js mode change 100644 => 100755 framework/assets/js/plugins.min.js mode change 100644 => 100755 framework/classes/abstract.class.php mode change 100644 => 100755 framework/classes/admin-options.class.php mode change 100644 => 100755 framework/classes/fields.class.php mode change 100644 => 100755 framework/fields/accordion/accordion.php mode change 100644 => 100755 framework/fields/background/background.php mode change 100644 => 100755 framework/fields/backup/backup.php mode change 100644 => 100755 framework/fields/border/border.php mode change 100644 => 100755 framework/fields/button_set/button_set.php mode change 100644 => 100755 framework/fields/callback/callback.php mode change 100644 => 100755 framework/fields/checkbox/checkbox.php mode change 100644 => 100755 framework/fields/code_editor/code_editor.php mode change 100644 => 100755 framework/fields/color/color.php mode change 100644 => 100755 framework/fields/color_group/color_group.php mode change 100644 => 100755 framework/fields/content/content.php mode change 100644 => 100755 framework/fields/date/date.php mode change 100644 => 100755 framework/fields/datetime/datetime.php mode change 100644 => 100755 framework/fields/dimensions/dimensions.php mode change 100644 => 100755 framework/fields/fieldset/fieldset.php mode change 100644 => 100755 framework/fields/gallery/gallery.php mode change 100644 => 100755 framework/fields/group/group.php mode change 100644 => 100755 framework/fields/heading/heading.php mode change 100644 => 100755 framework/fields/icon/fa4-icons.php mode change 100644 => 100755 framework/fields/icon/fa5-icons.php mode change 100644 => 100755 framework/fields/icon/icon.php mode change 100644 => 100755 framework/fields/image_select/image_select.php mode change 100644 => 100755 framework/fields/index.php mode change 100644 => 100755 framework/fields/link/link.php mode change 100644 => 100755 framework/fields/link_color/link_color.php mode change 100644 => 100755 framework/fields/map/map.php mode change 100644 => 100755 framework/fields/media/media.php mode change 100644 => 100755 framework/fields/notice/notice.php mode change 100644 => 100755 framework/fields/number/number.php mode change 100644 => 100755 framework/fields/palette/palette.php mode change 100644 => 100755 framework/fields/radio/radio.php mode change 100644 => 100755 framework/fields/repeater/repeater.php mode change 100644 => 100755 framework/fields/select/select.php mode change 100644 => 100755 framework/fields/slider/slider.php mode change 100644 => 100755 framework/fields/sortable/sortable.php mode change 100644 => 100755 framework/fields/sorter/sorter.php mode change 100644 => 100755 framework/fields/spacing/spacing.php mode change 100644 => 100755 framework/fields/spinner/spinner.php mode change 100644 => 100755 framework/fields/subheading/subheading.php mode change 100644 => 100755 framework/fields/submessage/submessage.php mode change 100644 => 100755 framework/fields/switcher/switcher.php mode change 100644 => 100755 framework/fields/tabbed/tabbed.php mode change 100644 => 100755 framework/fields/text/text.php mode change 100644 => 100755 framework/fields/textarea/textarea.php mode change 100644 => 100755 framework/fields/typography/google-fonts.php mode change 100644 => 100755 framework/fields/typography/typography.php mode change 100644 => 100755 framework/fields/upload/upload.php mode change 100644 => 100755 framework/fields/wp_editor/wp_editor.php mode change 100644 => 100755 framework/functions/actions.php mode change 100644 => 100755 framework/functions/customize.php mode change 100644 => 100755 framework/functions/helpers.php mode change 100644 => 100755 framework/functions/sanitize.php mode change 100644 => 100755 framework/functions/validate.php mode change 100644 => 100755 framework/functions/walker.php mode change 100644 => 100755 framework/index.php mode change 100644 => 100755 framework/languages/zh_CN.mo mode change 100644 => 100755 framework/languages/zh_CN.po mode change 100644 => 100755 helpers.php diff --git a/Plugin.php b/Plugin.php old mode 100644 new mode 100755 index 4723162..c7801a3 --- a/Plugin.php +++ b/Plugin.php @@ -45,7 +45,7 @@ class Plugin { */ add_filter( sprintf( '%splugin_action_links', is_multisite() ? 'network_admin_' : '' ), function ( $links, $plugin = '' ) { $links[] = '参与翻译'; - $links[] = '去广告'; + $links[] = '去广告'; return $links; }, 10, 2 ); diff --git a/Service/Base.php b/Service/Base.php old mode 100644 new mode 100755 index 5938a15..4da50cc --- a/Service/Base.php +++ b/Service/Base.php @@ -16,11 +16,13 @@ class Base { new Super(); // 监控服务 new Monitor(); + // 内存服务 + new Memory(); // 更新服务 new Update(); if ( is_admin() ) { - // 设置服务 - new Setting(); + // 设置服务 + new Setting(); } } } diff --git a/Service/Memory.php b/Service/Memory.php new file mode 100755 index 0000000..23a1115 --- /dev/null +++ b/Service/Memory.php @@ -0,0 +1,254 @@ +' . __('WP_DEBUG', 'wp-china-yes') . ''; + } + return '' . __('WP_DEBUG', 'wp-china-yes') . ''; + } + + /** + * 获取 CPU 使用率 + */ + private function get_cpu_usage() { + if (function_exists('sys_getloadavg') && is_callable('sys_getloadavg')) { + $load = sys_getloadavg(); + return round($load[0] * 100 / 4, 2); // 假设是4核CPU + } + return false; + } + + /** + * 获取 MySQL 版本 + */ + private function get_mysql_version() { + global $wpdb; + return $wpdb->get_var("SELECT VERSION()"); + } + + /** + * 检查 PHP 内存限制 + */ + public function check_memory_limit() { + $this->memory['limit'] = (int) ini_get('memory_limit'); + } + + /** + * 检查内存使用情况 + */ + private function check_memory_usage() { + $this->memory['usage'] = function_exists('memory_get_peak_usage') + ? round(memory_get_peak_usage(true) / 1024 / 1024, 2) + : 0; + + if (!empty($this->memory['usage']) && !empty($this->memory['limit'])) { + $this->memory['percent'] = round($this->memory['usage'] / $this->memory['limit'] * 100, 0); + $this->memory['color'] = $this->get_memory_color($this->memory['percent']); + } + } + + /** + * 获取内存使用率的颜色 + */ + private function get_memory_color($percent) { + if ($percent > 90) { + return 'font-weight:bold;color:red'; + } elseif ($percent > 75) { + return 'font-weight:bold;color:#E66F00'; + } + return 'font-weight:normal;'; + } + + /** + * 格式化 WordPress 内存限制 + */ + private function format_wp_limit($size) { + $unit = strtoupper(substr($size, -1)); + $value = (int) substr($size, 0, -1); + + switch ($unit) { + case 'P': $value *= 1024; + case 'T': $value *= 1024; + case 'G': $value *= 1024; + case 'M': $value *= 1024; + case 'K': $value *= 1024; + } + return $value; + } + + /** + * 获取 WordPress 内存限制 + */ + private function check_wp_limit() { + $memory = $this->format_wp_limit(WP_MEMORY_LIMIT); + return $memory ? size_format($memory) : __('N/A', 'wp-china-yes'); + } + + /** + * 添加信息到管理界面页脚 + */ +public function add_footer($content) { + $settings = get_settings(); + // 确保 memory_display 是数组,如果不是则使用空数组 + $display_options = is_array($settings['memory_display'] ?? []) ? $settings['memory_display'] : []; + + // 如果 memory 设置未启用,直接返回原始内容 + if (empty($settings['memory'])) { + return $content; + } + + $this->check_memory_usage(); + $this->server_ip_address = $_SERVER['SERVER_ADDR'] ?? ($_SERVER['LOCAL_ADDR'] ?? ''); + $this->os_info = $this->get_os_info(); + + $footer_parts = []; + + // 内存使用量 + if (in_array('memory_usage', $display_options)) { + $footer_parts[] = sprintf('%s: %s %s %s MB (%s%%)', + __('Memory', 'wp-china-yes'), + $this->memory['usage'], + __('of', 'wp-china-yes'), + $this->memory['limit'], + $this->memory['color'], + $this->memory['percent'] + ); + } + + // WP内存限制 + if (in_array('wp_limit', $display_options)) { + $footer_parts[] = sprintf('%s: %s', + __('WP LIMIT', 'wp-china-yes'), + $this->check_wp_limit() + ); + } + + // 服务器IP和主机名 + if (in_array('server_ip', $display_options)) { + $hostname_part = in_array('hostname', $display_options) ? " (" . gethostname() . ")" : ""; + $footer_parts[] = sprintf('IP: %s%s', + $this->server_ip_address, + $hostname_part + ); + } + + // 操作系统信息 + if (in_array('os_info', $display_options)) { + $footer_parts[] = sprintf('OS: %s', $this->os_info); + } + + // PHP信息 + if (in_array('php_info', $display_options)) { + $footer_parts[] = sprintf('PHP: %s @%sBitOS', + PHP_VERSION, + PHP_INT_SIZE * 8 + ); + } + + // Debug状态 + if (in_array('debug_status', $display_options)) { + $footer_parts[] = $this->get_debug_status(); + } + + // CPU使用率 + if (in_array('cpu_usage', $display_options)) { + $cpu_usage = $this->get_cpu_usage(); + if ($cpu_usage !== false) { + $footer_parts[] = sprintf('CPU: %s%%', $cpu_usage); + } + } + + // MySQL版本 + if (in_array('mysql_version', $display_options)) { + $footer_parts[] = sprintf('MySQL: %s', $this->get_mysql_version()); + } + + if (!empty($footer_parts)) { + $content .= ' | WPCY - ' . implode(' | ', $footer_parts); + } + + return $content; +} + + + /** + * 检查 PHP 版本 + */ + public function check_php_version() { + if (version_compare(PHP_VERSION, '7.0', '<')) { + deactivate_plugins(plugin_basename(CHINA_YES_PLUGIN_FILE)); + wp_die( + sprintf( + '

%s

%s

', + __('插件无法激活:PHP 版本过低', 'wp-china-yes'), + __('请升级 PHP 至 7.0 或更高版本。', 'wp-china-yes') + ), + __('PHP 版本错误', 'wp-china-yes'), + ['back_link' => true] + ); + } + } +} diff --git a/Service/Monitor.php b/Service/Monitor.php old mode 100644 new mode 100755 index b2be08e..c6d3b44 --- a/Service/Monitor.php +++ b/Service/Monitor.php @@ -1,173 +1,171 @@ -settings = get_settings(); - wp_clear_scheduled_hook( 'wp_china_yes_maybe_check_store' ); // TODO 下个版本移除 - wp_clear_scheduled_hook( 'wp_china_yes_maybe_check_cravatar' ); // TODO 下个版本移除 - wp_clear_scheduled_hook( 'wp_china_yes_maybe_check_admincdn' ); // TODO 下个版本移除 - if ( $this->settings['monitor'] ) { - // 站点网络下只在主站运行 - if ( is_main_site() ) { - add_action( 'init', [ $this, 'init' ] ); - add_action( 'wp_china_yes_monitor', [ - $this, - 'run_monitor' - ] ); - } - } else { - if ( wp_get_scheduled_event( 'wp_china_yes_monitor' ) ) { - wp_clear_scheduled_hook( 'wp_china_yes_monitor' ); - } - } - } - - /** - * 初始化 - */ - public function init() { - if ( ! wp_next_scheduled( 'wp_china_yes_monitor' ) ) { - wp_schedule_event( time(), 'hourly', 'wp_china_yes_monitor' ); - } - } - - /** - * 运行监控 - */ - public function run_monitor() { - if ( $this->settings['store'] != 'off' ) { - $this->maybe_check_store(); - } - if ( $this->settings['cravatar'] != 'off' ) { - $this->maybe_check_cravatar(); - } - if ( ! empty( $this->settings['admincdn'] ) ) { - $this->maybe_check_admincdn(); - } - } - - /** - * 检查应用市场可用性 - */ - public function maybe_check_store() { - $test_url = 'https://api.wenpai.net/china-yes/version-check'; - if ( $this->settings['store'] == 'proxy' ) { - $test_url = 'https://api.wpmirror.com/core/version-check/1.7/'; - } - $response = wp_remote_get( $test_url ); - if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != 200 ) { - if ( $this->settings['store'] == 'wenpai' ) { - $this->settings['store'] = 'proxy'; - } elseif ( $this->settings['store'] == 'proxy' ) { - $this->settings['store'] = 'off'; - } - $this->update_settings(); - } - } - - /** - * 检查初认头像可用性 - */ - public function maybe_check_cravatar() { - $test_url = 'https://cn.cravatar.com/avatar/'; - switch ( $this->settings['cravatar'] ) { - case 'global': - $test_url = 'https://en.cravatar.com/avatar/'; - break; - case 'weavatar': - $test_url = 'https://weavatar.com/avatar/'; - break; - } - $response = wp_remote_get( $test_url ); - if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != 200 ) { - if ( $this->settings['cravatar'] == 'cn' ) { - $this->settings['cravatar'] = 'global'; - } elseif ( $this->settings['cravatar'] == 'global' ) { - $this->settings['cravatar'] = 'weavatar'; - } elseif ( $this->settings['cravatar'] == 'weavatar' ) { - $this->settings['cravatar'] = 'cn'; - } - $this->update_settings(); - } - } - - /** - * 检查萌芽加速可用性 - */ - public function maybe_check_admincdn() { - // 后台加速 - if ( in_array( 'admin', $this->settings['admincdn'] ) ) { - $response = wp_remote_get( 'https://wpstatic.admincdn.com/6.7/wp-includes/js/wp-sanitize.min.js' ); - if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != 200 ) { - $this->settings['admincdn'] = array_values( array_diff( $this->settings['admincdn'], [ 'admin' ] ) ); - $this->update_settings(); - } - } - // 前台加速 - if ( in_array( 'frontend', $this->settings['admincdn'] ) ) { - $url = network_site_url( '/wp-includes/js/wp-sanitize.min.js' ); - $response = wp_remote_get( 'https://public.admincdn.com/' . $url ); - if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != 200 ) { - $this->settings['admincdn'] = array_values( array_diff( $this->settings['admincdn'], [ 'frontend' ] ) ); - $this->update_settings(); - } - } - // Google 字体 - if ( in_array( 'googlefonts', $this->settings['admincdn'] ) ) { - $response = wp_remote_get( 'https://googlefonts.admincdn.com/css?family=Roboto:400,700' ); - if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != 200 ) { - $this->settings['admincdn'] = array_values( array_diff( $this->settings['admincdn'], [ 'googlefonts' ] ) ); - $this->update_settings(); - } - } - // Google 前端公共库 - if ( in_array( 'googleajax', $this->settings['admincdn'] ) ) { - $response = wp_remote_get( 'https://googleajax.admincdn.com/ajax/libs/jquery/3.7.1/jquery.slim.min.js' ); - if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != 200 ) { - $this->settings['admincdn'] = array_values( array_diff( $this->settings['admincdn'], [ 'googleajax' ] ) ); - $this->update_settings(); - } - } - // CDNJS 前端公共库 - if ( in_array( 'cdnjs', $this->settings['admincdn'] ) ) { - $response = wp_remote_get( 'https://cdnjs.admincdn.com/jquery/3.7.1/jquery.slim.min.js' ); - if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != 200 ) { - $this->settings['admincdn'] = array_values( array_diff( $this->settings['admincdn'], [ 'cdnjs' ] ) ); - $this->update_settings(); - } - } - // jsDelivr 公共库 - if ( in_array( 'jsdelivr', $this->settings['admincdn'] ) ) { - $response = wp_remote_get( 'https://jsd.admincdn.com/npm/jquery@3.7.1/dist/jquery.slim.min.js' ); - if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != 200 ) { - $this->settings['admincdn'] = array_values( array_diff( $this->settings['admincdn'], [ 'jsdelivr' ] ) ); - $this->update_settings(); - } - } - } - - /** - * 更新设置 - */ - private function update_settings() { - if ( is_multisite() ) { - update_site_option( 'wp_china_yes', $this->settings ); - } else { - update_option( 'wp_china_yes', $this->settings, true ); - } - } -} +settings = get_settings(); + wp_clear_scheduled_hook( 'wp_china_yes_maybe_check_store' ); // TODO 下个版本移除 + wp_clear_scheduled_hook( 'wp_china_yes_maybe_check_cravatar' ); // TODO 下个版本移除 + wp_clear_scheduled_hook( 'wp_china_yes_maybe_check_admincdn' ); // TODO 下个版本移除 + if ( $this->settings['monitor'] ) { + // 站点网络下只在主站运行 + if ( is_main_site() ) { + add_action( 'init', [ $this, 'init' ] ); + add_action( 'wp_china_yes_monitor', [ + $this, + 'run_monitor' + ] ); + } + } else { + wp_clear_scheduled_hook( 'wp_china_yes_monitor' ); + } + } + + /** + * 初始化 + */ + public function init() { + if ( ! wp_next_scheduled( 'wp_china_yes_monitor' ) ) { + wp_schedule_event( time(), 'hourly', 'wp_china_yes_monitor' ); + } + } + + /** + * 运行监控 + */ + public function run_monitor() { + if ( $this->settings['store'] != 'off' ) { + $this->maybe_check_store(); + } + if ( $this->settings['cravatar'] != 'off' ) { + $this->maybe_check_cravatar(); + } + if ( ! empty( $this->settings['admincdn'] ) ) { + $this->maybe_check_admincdn(); + } + } + + /** + * 检查应用市场可用性 + */ + public function maybe_check_store() { + $test_url = 'https://api.wenpai.net/china-yes/version-check'; + if ( $this->settings['store'] == 'proxy' ) { + $test_url = 'https://api.wpmirror.com/core/version-check/1.7/'; + } + $response = wp_remote_get( $test_url ); + if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != 200 ) { + if ( $this->settings['store'] == 'wenpai' ) { + $this->settings['store'] = 'proxy'; + } elseif ( $this->settings['store'] == 'proxy' ) { + $this->settings['store'] = 'off'; + } + $this->update_settings(); + } + } + + /** + * 检查初认头像可用性 + */ + public function maybe_check_cravatar() { + $test_url = 'https://cn.cravatar.com/avatar/'; + switch ( $this->settings['cravatar'] ) { + case 'global': + $test_url = 'https://en.cravatar.com/avatar/'; + break; + case 'weavatar': + $test_url = 'https://weavatar.com/avatar/'; + break; + } + $response = wp_remote_get( $test_url ); + if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != 200 ) { + if ( $this->settings['cravatar'] == 'cn' ) { + $this->settings['cravatar'] = 'global'; + } elseif ( $this->settings['cravatar'] == 'global' ) { + $this->settings['cravatar'] = 'weavatar'; + } elseif ( $this->settings['cravatar'] == 'weavatar' ) { + $this->settings['cravatar'] = 'cn'; + } + $this->update_settings(); + } + } + + /** + * 检查萌芽加速可用性 + */ + public function maybe_check_admincdn() { + // 后台加速 + if ( in_array( 'admin', $this->settings['admincdn'] ) ) { + $response = wp_remote_get( 'https://wpstatic.admincdn.com/6.7/wp-includes/js/wp-sanitize.min.js' ); + if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != 200 ) { + $this->settings['admincdn'] = array_values( array_diff( $this->settings['admincdn'], [ 'admin' ] ) ); + $this->update_settings(); + } + } + // 前台加速 + if ( in_array( 'frontend', $this->settings['admincdn'] ) ) { + $url = network_site_url( '/wp-includes/js/wp-sanitize.min.js' ); + $response = wp_remote_get( 'https://public.admincdn.com/' . $url ); + if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != 200 ) { + $this->settings['admincdn'] = array_values( array_diff( $this->settings['admincdn'], [ 'frontend' ] ) ); + $this->update_settings(); + } + } + // Google 字体 + if ( in_array( 'googlefonts', $this->settings['admincdn'] ) ) { + $response = wp_remote_get( 'https://googlefonts.admincdn.com/css?family=Roboto:400,700' ); + if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != 200 ) { + $this->settings['admincdn'] = array_values( array_diff( $this->settings['admincdn'], [ 'googlefonts' ] ) ); + $this->update_settings(); + } + } + // Google 前端公共库 + if ( in_array( 'googleajax', $this->settings['admincdn'] ) ) { + $response = wp_remote_get( 'https://googleajax.admincdn.com/ajax/libs/jquery/3.7.1/jquery.slim.min.js' ); + if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != 200 ) { + $this->settings['admincdn'] = array_values( array_diff( $this->settings['admincdn'], [ 'googleajax' ] ) ); + $this->update_settings(); + } + } + // CDNJS 前端公共库 + if ( in_array( 'cdnjs', $this->settings['admincdn'] ) ) { + $response = wp_remote_get( 'https://cdnjs.admincdn.com/jquery/3.7.1/jquery.slim.min.js' ); + if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != 200 ) { + $this->settings['admincdn'] = array_values( array_diff( $this->settings['admincdn'], [ 'cdnjs' ] ) ); + $this->update_settings(); + } + } + // jsDelivr 公共库 + if ( in_array( 'jsdelivr', $this->settings['admincdn'] ) ) { + $response = wp_remote_get( 'https://jsd.admincdn.com/npm/jquery@3.7.1/dist/jquery.slim.min.js' ); + if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != 200 ) { + $this->settings['admincdn'] = array_values( array_diff( $this->settings['admincdn'], [ 'jsdelivr' ] ) ); + $this->update_settings(); + } + } + } + + /** + * 更新设置 + */ + private function update_settings() { + if ( is_multisite() ) { + update_site_option( 'wp_china_yes', $this->settings ); + } else { + update_option( 'wp_china_yes', $this->settings, true ); + } + } +} diff --git a/Service/Setting.php b/Service/Setting.php index 376bbc6..99b06d0 100755 --- a/Service/Setting.php +++ b/Service/Setting.php @@ -25,6 +25,19 @@ class Setting { self::admin_init(); } + +/** + * 动态获取设置页面的 URL + * + * @return string + */ +private function get_settings_page_url() { + if ( is_multisite() ) { + return network_admin_url( 'settings.php?page=wp-china-yes' ); + } + return admin_url( 'options-general.php?page=wp-china-yes' ); +} + /** * 挂载设置项 */ @@ -55,7 +68,7 @@ class Setting { 'type' => 'content', 'content' => <<

原生体验

文派叶子🍃(WP-China-Yes)是一款不可多得的 WordPress 系统底层优化和生态基础设施软件。

网站加速

优化加速插件多如牛毛,为何文派叶子如此与众不同?

进一步了解 ↗

翻译推送

高质量翻译中文本地化翻译由文派开源官方提供,欢迎参与改进。

本地化改进 ↗

广告屏蔽

呈现清爽整洁的网站后台,清除侵入式后台广告、无用信息。

获取广告规则 ↗

加入我们

关注文派茶馆 WPTEA.com 公众号以及订阅我们的时事通讯即可接收独家内容、提示和更新。

+

原生体验

文派叶子🍃(WP-China-Yes)是一款不可多得的 WordPress 系统底层优化和生态基础设施软件。

网站加速

优化加速插件多如牛毛,为何文派叶子如此与众不同?

进一步了解 ↗

翻译推送

高质量翻译中文本地化翻译由文派开源官方提供,欢迎参与改进。

本地化改进 ↗

广告屏蔽

呈现清爽整洁的网站后台,清除侵入式后台广告、无用信息。

获取广告规则 ↗

加入我们

关注文派茶馆 WPTEA.com 公众号以及订阅我们的时事通讯即可接收独家内容、提示和更新。

HTML, ] ], @@ -71,13 +84,13 @@ HTML, 'title' => __( '应用市场', 'wp-china-yes' ), 'inline' => true, 'options' => [ + 'wenpai' => '文派开源', 'proxy' => '官方镜像', - 'wenpai' => '文派开源', 'off' => '不启用' ], 'default' => 'wenpai', 'subtitle' => '是否启用市场加速', - 'desc' => __( '官方加速源(WPMirror)直接从 .org 反代至大陆分发;文派开源(WenPai.org)中国境内自建托管仓库,同时集成文派翻译平台。可参考源站说明。', + 'desc' => __( '文派开源(WenPai.org)中国境内自建托管仓库,同时集成文派翻译平台。官方加速源(WPMirror)直接从 .org 反代至大陆分发;可参考源站说明。', 'wp-china-yes' ), ], [ @@ -86,20 +99,36 @@ HTML, 'title' => __( '萌芽加速', 'wp-china-yes' ), 'inline' => true, 'options' => [ - 'admin' => '后台加速', - 'frontend' => '前台加速', 'googlefonts' => 'Google 字体', 'googleajax' => 'Google 前端库', 'cdnjs' => 'CDNJS 前端库', - 'jsdelivr' => 'jsDelivr 前端库' + 'jsdelivr' => 'jsDelivr 前端库', + 'bootstrapcdn' => 'Bootstrap 前端库' ], 'default' => [ 'admin' => 'admin', ], 'subtitle' => '是否启用萌芽加速', - 'desc' => __( '萌芽加速(adminCDN)将 WordPress 依赖的静态文件切换为公共资源,加快网站访问速度。您可按需启用需要加速的项目,更多细节控制和功能,请查看推荐设置。', + 'desc' => __( '萌芽加速(adminCDN)将 WordPress 插件依赖的静态文件切换为公共资源,解决卡顿、加载慢等问题。您可按需启用加速项目,更多细节控制和功能,请查看推荐设置。', 'wp-china-yes' ), ], + [ + 'id' => 'admincdn', + 'type' => 'checkbox', + 'title' => __( '文件加速', 'wp-china-yes' ), + 'inline' => true, + 'options' => [ + 'admin' => '后台加速', + 'frontend' => '前台加速', + ], + 'default' => [ + 'admin' => 'admin', + ], + 'subtitle' => '是否启用文件加速', + 'desc' => __( '专为 WordPress 系统内置依赖的静态资源进行加速,加快网站访问速度,如遇异常请停用对应选项。', + 'wp-china-yes' ), + ], + [ 'id' => 'cravatar', 'type' => 'radio', @@ -148,10 +177,12 @@ HTML, 'corner' => '直角括号', 'space' => '文本空格', 'punctuation' => '标点显示', + 'indent' => '段首缩进', + 'align' => '两端对齐', ], 'default' => '', 'subtitle' => '是否启用排印优化', - 'desc' => __( '排印优化可提升中文网页的视觉美感,适用于中文字体的网站。', + 'desc' => __( '文风字体排印优化可提升中文网页的视觉美感,适用于正式内容的网站。', 'wp-china-yes' ), 'dependency' => [ 'windfonts', @@ -261,7 +292,7 @@ HTML, ], 'default' => 'off', 'subtitle' => '是否启用后台广告屏蔽', - 'desc' => __( '文派叶子🍃(WP-China-Yes)独家特色功能,让您拥有清爽整洁的 WordPress 后台,清除各类常用插件侵入式后台广告、通知及无用信息,拿回您的后台控制权。', + 'desc' => __( '文派叶子🍃(WPCY)独家特色功能,让您拥有清爽整洁的 WordPress 后台,清除各类常用插件侵入式后台广告、通知及无用信息,拿回后台控制权。', 'wp-china-yes' ), ], [ @@ -360,10 +391,10 @@ HTML, ], [ 'id' => 'url', - 'type' => 'text', + 'type' => 'textarea', 'title' => __( 'URL', 'wp-china-yes' ), 'subtitle' => 'URL', - 'desc' => __( '设置需要屏蔽的 URL 关键词', + 'desc' => __( '填入需要屏蔽的 URL 链接,一行一条,注意不要串行', 'wp-china-yes' ), 'default' => '', 'placeholder' => 'example.com', @@ -382,25 +413,64 @@ HTML, ] ); - WP_CHINA_YES::createSection( $this->prefix, [ - 'title' => '节点监控', - 'icon' => 'icon icon-story', - 'fields' => [ - [ - 'id' => 'monitor', - 'type' => 'switcher', - 'default' => true, - 'title' => '节点监控', - 'subtitle' => '自动监控加速节点可用性', - 'desc' => __( '脉云维护(MainCloud)支持自动监控各加速节点可用性,当节点不可用时自动切换至可用节点或关闭加速,以保证您的网站正常访问', - 'wp-china-yes' ), - ], - [ - 'type' => 'content', - 'content' => '启用隐藏设置前请务必的保存或收藏当前设置页面 URL,否则您将无法再次进入插件设置页面', - ], - ], - ] ); +WP_CHINA_YES::createSection( $this->prefix, [ + 'title' => '脉云维护', + 'icon' => 'icon icon-story', + 'fields' => [ + [ + 'id' => 'monitor', + 'type' => 'switcher', + 'default' => true, + 'title' => '节点监控', + 'subtitle' => '自动监控加速节点可用性', + 'desc' => __( '脉云维护(MainCloud)支持自动监控各加速节点可用性,当节点不可用时自动切换至可用节点或关闭加速,以保证您的网站正常访问', + 'wp-china-yes' ), + ], + [ + 'id' => 'memory', + 'type' => 'switcher', + 'default' => true, + 'title' => '系统监控', + 'subtitle' => '自动监控站点系统运行状态', + 'desc' => __( '支持在管理后台页脚中显示系统运行状态,包括内存使用、CPU负载、MySQL版本、调试状态等信息', + 'wp-china-yes' ), + ], + [ + 'id' => 'memory_display', + 'type' => 'checkbox', + 'title' => __( '显示参数', 'wp-china-yes' ), + 'inline' => true, + 'options' => [ + 'memory_usage' => '内存使用量', + 'wp_limit' => 'WP内存限制', + 'server_ip' => '服务器IP', + 'hostname' => '主机名', + 'os_info' => '操作系统', + 'php_info' => 'PHP信息', + 'cpu_usage' => 'CPU使用率', + 'debug_status' => '调试状态', + 'mysql_version'=> 'MySQL版本' + ], + 'default' => [ + 'memory_usage', + 'wp_limit', + 'server_ip', + 'os_info', + 'php_info', + 'cpu_usage', + 'debug_status', + 'mysql_version' + ], + 'subtitle' => '选择页脚要显示的信息', + 'desc' => __( '为网站维护人员提供参考依据,无需登录服务器即可查看相关信息参数','wp-china-yes' ), + 'dependency' => ['memory', '==', 'true'], + ], + [ + 'type' => 'content', + 'content' => '启用隐藏设置前请务必的保存或收藏当前设置页面 URL,否则您将无法再次进入插件设置页面', + ], + ], +] ); WP_CHINA_YES::createSection( $this->prefix, [ 'title' => '品牌白标', @@ -448,7 +518,7 @@ HTML, 'type' => 'content', 'content' => <<

开源建站

文派寻鹿🦌(WP Deer)建站套件是由文派科技官方提供的企业建站产品集合,代码均为 100% GPL 开源,无任何加密隐藏。

SEO 优化技巧

WPXYZ.com ↗

网站政策合规

WPICP.com ↗

软件开发工具

WPSDK.com ↗
+

开源建站

文派寻鹿🦌(WP Deer)建站套件是由文派科技官方提供的企业建站产品集合,代码均为 100% GPL 开源,无任何加密隐藏。

SEO 优化技巧

WPXYZ.com ↗

网站政策合规

WPICP.com ↗

软件开发工具

WPSDK.com ↗
HTML, ] ], @@ -468,9 +538,7 @@ HTML,

项目简介

文派(WordPress)中国本土化项目始于 2019 年,由 文派叶子🍃(WPCY) 插件开启,其前身为 WP-China-Yes。

2023 年 5 月,文派科技完成对该项目的收购,并对其进行了全面的品牌重塑。

-

赞助支持

特别感谢以下企业品牌对文派项目提供的资金资源支持。早期伙伴未来有机会共享文派生态资源,期待社会各界参与。

赞助支持

特别感谢以下企业品牌对文派项目提供的资金资源支持。早期伙伴未来有机会共享文派生态资源,期待社会各界参与。

开发 & 贡献者

100% 开源代码,诚邀您一起参与文派 (WordPress) 软件国产化进程,打造属于自己的开源自助建站程序。

+
HTML, ] ], diff --git a/Service/Super.php b/Service/Super.php old mode 100644 new mode 100755 index c0e10d0..7f664ca --- a/Service/Super.php +++ b/Service/Super.php @@ -55,9 +55,7 @@ HTML; | 翻译平台 | - 文章投稿 - | - 自选新闻源 + 订阅推送

'; + } ); + } + // 支持中文排版两端对齐 + if ( in_array( 'align', (array) $this->settings['windfonts_typography'] ) ) { + add_action( 'wp_head', function () { + echo ''; + } ); + } + } /** diff --git a/Service/Update.php b/Service/Update.php old mode 100644 new mode 100755 diff --git a/assets/css/setting.css b/assets/css/setting.css index 1ad5486..f69d956 100755 --- a/assets/css/setting.css +++ b/assets/css/setting.css @@ -90,6 +90,9 @@ box-shadow: 0 0 0 1px #ccd0d4, 0 1px 1px 1px rgba(0, 0, 0, .04); } +.wp_china_yes-field-checkbox .wp_china_yes--inline-list li, .wp_china_yes-field-radio .wp_china_yes--inline-list li { + margin-right: 20px; +} .wp_china_yes-section { margin: 50px auto; diff --git a/assets/images/qr-banner.jpg b/assets/images/qr-banner.jpg new file mode 100755 index 0000000000000000000000000000000000000000..4620f3bd9d344aa6435ee5041d506af5fcc9dd07 GIT binary patch literal 48213 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�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 literal 0 HcmV?d00001 diff --git a/assets/images/website-banner.jpg b/assets/images/website-banner.jpg index 475afd7c3cfa94a9b262deecb33615eb9419067f..d212bdc2696fc432f25476e8ab3c4c2de6cc5c76 100755 GIT binary patch literal 48110 zcmeFY2UL^K)-N1HK&4ygO{xl^_bMHvDJU%zArNXpN$6k!DbkD5n?3p>4I++KsXa~AM z004dc8-R0w|Dcmi0Hc;4*dqu)1~_|~tPB90%#$a$A`sq+Vq!43sDqQ2qq8X33n~`q z;4LO0DlP_4RtxlY0DCwicpRNw++Zra+s*HJdEA^-cr9d%#ErZ)on77Zf_GQ8-F&&AdDggwGi%amxDTq4AJ4wsQNJ%S*@JNbFN{NX}iAhQUC8QL^WfY}lc>W;X z(*}K=Ad041I)5~G`liDBN529B0z?C(M7?}n#3U3H6vV_O#Uv$xryM|d5DeiE2!z4; z{;WaE84mV!^G3LN!FYbv=-}w(hfv`?754XDK)sEO{;K$&4j2^rt82e;!x5&={~^Xd z<%Zu4@^%(8b%uNS`GTEK+4=q~d^&vp>xO@4-N=Qop9U&6pKnPeuT0vS|R$5-d;m>;hS$Pe49SM0Y zX$ehv1qBHSZ5?$j87XZINlkSP2@NR)4e3A2>cij&2N>A-&$iu8+y0}h`2Vu3qNcC2 z1H#Mqu9uhRpNeqX)eGSTclGk-k(3sd2f`YSxw6nY%P)fo<4(K2&?Fdwmb#eweNlJ@5OM&I2oWz}Z#ZE;O`=vL3 z)1yC=PL=c5<6jfw^yROqU)_|gXv2u zUwDm~H2=vofQI~35JqxFfEwW2tuy~G5;go5k*PXiobLyN5rF(v!EK%*qkVMOF6_&& zw0)?jz3et8x%PjR0FXRdEK)lG7|keB#%(9W5ebWhu5I6^+Mxe8;s5jF!Ritf1r?3| zEOs9_x)E;sk>cy={Qqwe6ZhAt2gWAoPUc~T|9x`ZWnXl4@MQ$=G=_L6VIKj*t;lWI z7IhkbqNVf0*C}eB7Y+2IvT+cH#2*{LY{P|_Gw05-MRYRMXZ@0zNvti>X9xB}`~O%! zLVxRrPgup$_NHu$s!@=jFzPLTZw!KyzI04togpEzfW0g{C%S ztY)-R`mmKgurmeC3R4K4_oUCz7wG)DQI#qq4_b8mZz{b2&dgV*VNJurZnO9a8otuoAu+Y6|Alw?sa<9T1gj} zHJGH&;}_U)uP~CHr0Ik0&5R1YSHC<^Jb25)66cSD(D=);@CSvaiXUe-%@@i(+iIwz zyE+C168st}tML8aNVHWZIF>XT-78Xq)AS|oSkDw$;vP+BeBpZ;qj>ipRgT=64N*AH z8BMy3yVbKD^L(<#guOtR0$7*EanFOZ+d{8c>G_2~zPQF{`|G(wPex=8zb>R|6rXqB z-8%@Hi)_FK8Poq%;VecgvPETc)w^lU!0yDNhO{3_RTW>HZn$)Q?EKl`;X0Y3DRtCM zbytpgDCqlxod zv_dgAasHriT%RhciCMXQltPW?-gNYWQ3v8tFoW+tODmRNAjM8mj@6bYK%ChZbI!@{ z(@o7)+xEOAP7#hzXG5pqh(u@kgu9DB-#SIQQ`V|@J#RoJD#H&>qVc!}BKf(5%9vN^yA9HA*C zx|$VhI2m0(4c^;Y?Dpi)xyW9#S)9s?WC6^!nP~lpjwtlr5>>5|m6C$BO}(;} z0``{$dB)_`c~(z^q+~e&2_5$Lry>;Yk8h>vmE~T4bsN<iuUZYEabi$nK{-QtW{_tYL~W3^#6WQRFC@W#t@f<-F+vNs>@bcbs#CT)M;H zq5Z(*mX<|7HC`3di*q|RZU-i=@aCm6<`h^uoRS~5s){qdUf~hB&dtsad9vb{sb;qo zjkEU~5InU3wf@hS>nn;UnEE_G%nEz{Td0_B#vp-1)>6GOBb)1;g-)`t(O&q2cO6*5 z(-LN>^Dn?1L{CRiaKz)XMktNUniu&;%D(Br!7*i!I>#AZsvbVq`|t=&GU+p=25hsI zXPJ}#H<8=2?eI!>@B5i&{}$-~Lt~Z?M;#6nRCXEcZ~nWa?s&9n!7X?K2)_OASMo>W z>JF!#P4v>ze!qIysr&iw5k=hg3!BiKpKJe(I{s*xBKoH+cUs!4#DBxW{ca___KW`; zb^HO?e^~q9t>iy^$AA6hAC<=q<-h#_D#DM=UB&@L7Uo9w0c-ptHhl5ir+6sss=hqX zyFX6w>S;cn{%EC{=tUXkh%L#Qd9#F}25tDLzxg^sve?WO$|0NpEc>PU?*}n<# ze;fGgJN^G|i0&N;QU9iChbXXGFvw`}d4v~Ci3uzv$B&#?II}JI{3n{SrLo^n@y6m^ zZvX$|5UIX0+ZKUWQfq(5Ra7&;AN+FK{ed)>(!UG9H*c!@Pi!rWth491abEtSQkkg3 zrclz#^Mt$99wBy3(6F?+%upQ#~EE@*G5nfC~;I;E;)rARHz)$|f z$bQkH+?x`u*}(JYHv#(3R*3qe)4Hn zo~1_wzjUR09g>MC-wSXeFn-aI-nEF$SbvGlEJ5%3ZX4tZstRwvwTCmHM-IYVHw(UF#bbubN8+sPMyvOj_mh!>262Yq zV#uvk6A$(*{yRt`33ZY3bUV5=K=5<3=Y)M*Pa`)u&-TDkPi>y}cbEpQ*TT@VQVo?P zph#u8NKtd*rn~ALIA<2vKr`oa;aK+9049#|n4A*PY_peb#asRDf_z?C5f1NJRjGuY z<$ok)u)>#&>yYV6MbcZ0J6M|dtFIbI>vP?7&C3K1744zbYT3e8?K%E?!mLw<{SWMw z*qNuH#YBynK~LM|*V%fT%MEbyqBtH>C`LCq7`*%)T4r=_d+Q($;<(}R(Dr@V=jn2H z$GXe{#AnAD|JPH#0TXw?i@=(^y~8arzQ-eqa;{?&OwAEXWvt!h+KPd~Si(3`Gz)j7 zefq#hbZlfTHrUG7KPNsG2RML2oG1L{3^6=3X}atz2Ct_g`YT0?tS7!sv;c18bNhL{ znunYK4yFp0w1L?VAUZv>@dVk70NQt{bD!lpit*(*)Hs-XyvekgvK6q#LH?Mb z>Df1>^>kN3xM&R|w~io%%>O$0u!GsmE2H{d*S3L2Z&i*;bNNE|bhn@PN`uOhLh%U8 z;(dWnQpPDlnmvj)D9l9$_;HN-6_9*e6?RkwBtUxPS$hQ?6_NvD284oD;?sR*8f2#f z^m@;&FfI*b%YG{gog0%&P%8FZ39y|2NnNrIQInDX6gyyJxQScltSYPodHxq*^q-tQ z^_BN+Nne>R9lZWIbC*ly_rmI74V!V1Z=kQ1QJu(MJj&E@atF^Vy}@w&rZga&CIYp) zsO^(+zt3h0*OO)z51sf4EGa5(F`+vL?27I;;z?wu&T^8Fos*Qe+h^hIs`*ryM^{CK z;Cbl@)1e-9ka_jVKAg>SDPc3a@(KVw$JxpDl?Mf^7z5I0Go!mNPPCG)77wh^3Oz1; z9Yc&A4W8!zvs3C1+S`w=hR`NFp>Jww3{0dBj4EyIZWv~8?nTP+8|T%4MJ+d6S^d0e zoLs|iQ}YJ|RgQn8tUg;ffS%iBmEYp;w!-*v7WokruijzTgV(FITx$>a%@jf35O(u5 zPqo$!9E6rF6<(Ag$Ugb39{wl-9Eoe(T&mTMewTf0;17541dhLWvNpCAd*K;l@@bY| zJoEnd1Cl4qh6p0uYM+`RDh$A_x5CvO)GOB(7;e$@o3jHmnq>pa6sjsaxW&?N?^+M} zu7uPjN|R91bEMLm--=}R58TL! zv(TFYDf=|`OUkd&(w)g?roTPXdW}yeynk++-8r*1y`9v5QT9AKgGuR;pAtGo{Pypj zWxx@&lY``x%aX5#mEA$XWgql0$a?C-g6nzy3{ksUi?ECx+{fjR?KY_zsUk7a6pm{7 zF8`(tSdZ+tfx3P3?;DL!(wm{@Y4TB%Ng+uO!^aa~p;U>W?EbudG zG1I~0^L~Y2C&ZF0H^K8v@j#Uk)unY| z-hB^-##@FiS?tTES4e>HI*>%WmYRO+&ueeEZPvZ?MsMYFb`{(!$GjJXKFzBpmeN@6 z)QH9{xRj2J+WE^gIHR0h;*&q*gECdSBhw{JIbH@ zcIC_tV&%>DS_GWM@;k86~=UM}8VZm68HgzE!^- z!}`@S%9+r`d!Ri!251z5EVL%vmY3}&a)hvZYfW(yFf>}VuBjoTU>V97v&Ao6E;znD z&wb`>p2}HZd@Ibx*YE@oud~Iej1Ru@{?rDP9B%*M6kM1_?Kg)H@zLfh@ws?73zT{8 zC_ZvZN=YJ0ru5HJs;B@e3=@oySlNDp=fHSH+k?yn%!9lAUA%(4atG-(?DldY^($Sn zm`hG8wjI*`x8cgEdf=4Q*3`8`A@?A+%Jet2cbprm!@P2ZSaCIA8W%?)Q3y5`L}RGa z(PudW-BUrf=_i2sTN@JfH48+H3NkKxD-=JD55vXT*}n~cB9fJjgT<||5o%p9R$1#P zNEevbF-I{3;)j$NbJH*50P^}Me94$mD)(FT3uyS zdfQ!};5MSzRT=QQdU*pHSDE$ndu1i*c~yE>DX*KScajmy)IdZYveU&e@)MS@#D_%I zQm$LYU423awpZedBoXg@aD!^JK~SPzH7+bjh|7gw;Tu*d2(7K`+ufeDLtYs*jj2S+ zX^@R1L?%NH7S^I+<&-)j*g)CWD^vZd7f%(fk@Kw)?%5?+%K_{@7n3z_`~;VRF!cM9 zE8)0wBs#DJ-4RPACEEt#`VHeOm`E$qA>nQqiz&U<~- zP>u8TdlNZ}Qf^z7gp$S0z0ib&=kcDk*&JcH!|ME>Bod`;R1(Hm&`c8LG0LCUd^ne* z`D~eN<-i=H?EAU}3Cft+6p*9*z2^>flE_RvHe3%X=9~M`!-YH_=SsF-J(yhA%b)FL zVVVGtNTBuN2+GcZ<#<@d`S+6wIwq0M9=;{QO2W&_9q|0=*5?p$tY**<%IP*iT?)!4 z%3wHAhqO9JOO(}d=V+^@eCGXP9`$;gT?$w%x--kKV) zeSnm$V52Z5A-+&FOg_8u17*^ddCV-I;pQT39`PnD_x`(gDWB}{tMOfD6L?sb(+Y|c z&py`mF<)MNCfatqoME1xgb&;!EU`JgLrIA1E3wHiYYc|j0T#`R`JTkj^5P%5s}rM- zePg@N=4&?`k3|g7|5z&brvEF$T%IZgrdH3ht9b%Y5auB7L2*wf2fa7}0Xx9%y;oeW4_5@hkAj#Mk4)*M)pk>>KPbof{Cq=|&3({oImfG6P!l=Y zD=qh_+X8dR5h3a7`eyml&Y7*xD%YPRPIPeNK#Exe#p74tBKe3BBzDob%YU< zs=96nBltI|O1kVv@=@8Nb)F(Q&0bDbqzYSbe05DMiP)FqiL4ms_wI&$x1L)`5D_cW z4bElo{R9iFLfKC$V7$M>Fj;9#L`}XNVFP<%d*P*ra*1!(bwpO%JoEL7aanmUx2S0< z232P-r8V?8mP0%J%bSukNkidaH(E%^nk&yp>o=w@wrQH2a%2!G4wi+^8D%nY)TFJ; z*Mc;`skeC%_C-$Nf>GU9^y%o5ea5cObFEsZW#q|p)Aqxkzs}06WUpSEC0af(aL=;b z!{UOZ=28~Mx~`=P*N}moGTGWxLS1Lr}&ix0yc!i*D$12;aJ3{;JGE?g`LV_nf7&sgR5@DXK4k(Am21dbUBo!mH3|TEL-=jj-rko1(osl{L}Fz1 z5<8}qh~}5nG#1aZrSU0B%w~JsMG-fE$!zvZD=tV>#arX(#K;~sq|RRr6jK~9sn%kv zJIl$`H`^Qmu{Q~MB7VLS%rLObcs|>b?yZ{-d1*0)g6%=0Wag1g*jV)e@L9`|xunEc zn9brm^IiFtG49(40E4Sj%8uR|zheH5&Em})Ca#XM=RC(VYqvc1(y{#XKh-5NkK(M@`__3i8l8)R1Urx|VybM%tCTAPs1eX$99 zpuL-A8QaArbwnAV`cuo^InA%uQ-@`9VXHc?$l=SoA=*kvr!Ktx{sG&9_Vsa@vM~QI zKd8<7TQ)olT)3j8g!rs7E-@|7CiV5UlFZw;Lfn=HEG0d3dT;^g&m*7sq?HQ44todO z%BdL2dYa=x7iEa?o9s7So&|ZBL?>Q=g_w5Z7Yfk^+3#fcDm~_s6~fKa&#+HYwJfAT z5IClRTD?{6Jr5WrPDpfJ7ZYb6(E2VQDPi9VXO(vu8YOv{_$g*V0PO>LX2gv(Np~hontwzNt-0 zXEiDW3_7>8Ogdabo%4w+{HpOwN6)DM|G8%gNLKvAEC1a$XJ8z4@;M}kv{ z{UrQ{?zPtG2~ur`yuM)Od_oi0BinXzc`Q96;8vJ^_p72R%aK1$Xz{%CdYravvY?(2 zbpmjy{+TZpc$rWKx%RI?=5M(9ul!@Yd0RSh=gQyz{y5C>KOHA3Ou&}Q)e}HtAdMLe z*wy0Qv_3=GxZU76C@5#pTbMA?`aE{l?Dfb>%lE7P2rKgw0N2qQ8SE$HD_;qp7}=+T z<5u#gIxrZz{F3OJgB|9a{OS2wdsUAjfk8WuxTu`KY=V!aHjnF1C4?rwS877pG`%*{ zWS};3x&PscUi-9;R1GXYp<052MN(Mq1dxsoep$DHl?mfrL2SL=f+PY9LX_{c4kY>$ zEbH`!UAf3h=*S4tyk#k{f*X#4aA1qj{!@_h3Q?ivFtmXfrH-Bh zvKNg7iu5*w4pcXI#Nt?o#mx`MA23=(wYO~*Kj4QM zduf#mhn$k#FbcRlgQjl>;bUrcyBvJ{M7-)#r)Pq4&W^AwGh*I+oaQU?Ftb}&aYgLm z3Ji#>E=C^WKlv>+kfqDBzEv%C``9Jt^* zDI)Q)UC%%!`gS6Rg)a`8`MvC{oSWuxdb|Z(|N4AYsWOd`(a({$ z){Ea5&&SntXJ~vfTFWRb@x5zTNHls`Gz(c;?eG-EpoNdy@wHW{P_$x68C>31(Y#kw zmf5xe&KD&d1i22SM7pG>Oj-4uim50Id&@ziWH?KjwN=%t~kndpJf zUqEtKpEctB4?rB6UgeuO>Y7Q1sVOfW`Y4092J^jqQvw^uNw>GoSlG+Dq)%aTMB6e< zmQV{hE-Wb8Pu4y~#?$7IpqEo62kp%(xR2v|IU#&CfzYbx9%qr701*+yL?rPXiLL#B zTflPBM+JvQx{YQ|CaZE-E zZ#cdt9dv!`YDfGhaJXzF>=3!raB*td=H^=A6*FjkHm`HMU|)*8K#WBK4f=glN^;H4 z@|XOft}FR8Fdh31HQ>_6(zM>?U0dsoaqFG2QPF4Rdk+LfDq$AiTpt9@?u_~VV(%=^ z#aFEl|JZ%MTqc^bj3u`ktA~ zwbWvvdkC1-f_h%l+0Av|!3Ug8%tn|elDQk(bXvgqZ^g?UX(w%d3HeawKURDB)Z|bz z&uTOr$Q_OR+J`?wuk!Qj!@_q31G-x~gL)Ria3-NMYy-{r72@p%Ii z1~P$`2k@QVmwO7l0-u`3zeFLi)eWg=9rBRFhDraB_V1a?G02`10O#zF_xA$Eqa=9? zn54Q1AK$f1?_+7`l-N`H+K9x#g&E?)cMY`S98Qm)>{DWqA5-k;lx4*j2(w7ADo!P%MLqoRovG*dDTieTi!&S1q12@ zdmt=7;Di;<39|5V+SOA@beEq1ECEfd!NoJaoEED*UQT+N_!b$s zDYzDnK4c&0gjJTtOZLqpy)|%-WNe-Hn={>YpSX3raOfZG%X*6J(>dMDg}kZ36nRee z5BFlFnHH$#YxbEkXr5;T7&n2%iW*v-A8x!#w03Lc{}Mv2t4l}b*&WnBnLm|T%v(SU z{3-u1Nvqm8=gA_@0+iHcC<1isAL6n*#QvC=X*;*@lSjw^%QD77tQ#q;5Z>j>hV(2y zC76dmvqLSbB|=O`Mm#sRa&dbuupe&&Aqm9^_oL)NjBaBb!@OJj7fCDJF&k zVb|gtDn`|ow_YY->bHFN8*n(ov@a;jYHw(MPnP&a8|_|tU|QLjn;(VJTf|{Zjp$QU zwrFwa=v|2Ou4&q>kk^yYinRQ8r;MSQu02*I?cq12D=wG)ZA5GOEo$X0gUpBg9j4tOt< zx&NZA?xiwJND;j&|6Nl}^pgOMDNHsBsPgEb51kP5>nxJH8=Ao`3B)R`}DGp6}X(?#k+!)MLm@MBTm_o_RmDoKqn7_3$CZb!E%xT5hWY?sVPKw86>VMcZJv`8PyN zaZs4rWBr9**+%y;g#vM9KaPWkrK8^k)4JRjj=xm zhCTFlc$VBfaZT3_7n;&eu0_sUHR)LxEzGeFW3IEK{ zeB$0}`}bK}$&JYoMXEUv>)zmu#D$K{@(_O45Du=6VPbZ~ca1Tts7`z>;ycWyPySX)drvMyq%AdG%hL}>TUQOj%P zFs%zbch1D{#$3MnlJeOFp4eY+m;Yf(|CcZ7RK@ReXVDA~3f0!${m9Kfi1|$?d3Y8p z_mQ`TBtp(k?W>MV%xU%|D%i@S7+CXy%%f#CMLCew;Z02@-dg%fmWCwLhrE|CC`rbi z)y0%}nvm=*L}H?B{d_(nqu#=~d7a6Q3)+FlBffHSvgULj1~=C56SnE+L1*a@_}aJn zyiiT634XeKuD6*Q6)SC0Q;=oaC}o=_w8y!^r1bqPc7NOcprXa~aB1Z84f=cLZSNh& zzJ*xc_D@T9CPY?@*K!?T1RBz3t{Xz@oOW;on~Me!XH6JoBRlh~qs{9wOEX?vqTwiT zZ;qu_-X(o`Gz1ngd>5Lc-y_~+cef^^zB`}DT<3ba)ZV}AZ6x6(tGYixBzgPVW6wGD zYWg3QQ0lWU>;#DG>`Qzb;o{by4IGZp4i0`^RRI@kk(yxd1UsNm&7FEv^F%UX{-|}G zjQZ4GUGX~f$Z=V4QRyr5=hJl^X-JY;Xz$aDHRwUl_*9Lam%ywFv1iF(-g?){^!n~3 zeV}ZG1Mz718RsPtIR9(pb}=HLp(|dZ|s-`TGtGeyIt(I{`zTE0m0Pq z^dy5l+P^Bd3H3fTL{JNQ7CPdPu0Y;WlqTG7?Bg?Dkz4Y4(t6T_AtB{@W_Nx1)-XzI z(h`le?2@S%x{8vjk8Dq~Jy5bE_-YW{U44f4#*0hpIZR~_yt8zOW3aql4?%~?y?4H( zx|)e|1_VA)frOHo3nOW}Hhbd(v?J?@eC27@h?HAjrGqL*0)Taa0oK+U*pj#tKnt$F zyKxxbx!0u(9G*84^Vw)vEu^fIF+0AChpmAL{snEo`2ho2#^mn%UfR#9Vqs=K(ig5x zt#R2XRwiuufkxY7+w7hl1mAdfJRb0Bsy}QzQFU5hl-L9fGE-JS9_r-Z4tyT1569%; zIWL6uxJ>z%W)~oqHeKpa5%f+15_Ub9OiX4^e0;_|j!C)K#N-*7)o=Ib*8CrAwDxoY z;f7JTYaBgwH|<~SwxyWtuZ>Gnj^HhESdP!76x>e%?J&Ww+!!*6AY zPEVR+qb+PVi|mL|pQ)Z+sIDgQ9sp zOmOLkiW~B6X((T21rE;V-!PV#xR~q%5L2b4&)R5ZVrgZCgua%6;|t!udDFB3CxEZ^ zKTmC@4CseW*IiKh^!YsY;)E)M@gys6aV6()1$6hyE0R|G!dpuPtWX?n2>&JaAS-G- zc6xZB??MJ;Q(>~=jSASOoy~Nq&;=h!XTyv5B@CM*s;g+jc&iw1`+~zF8lw<&UU+*wC@YX5P`A9t z&5R>ENd3-e0$m(cP*}j}LD{!<_$+CsD!BeQYivclY`KdixrJy{_JiwH85xZR&wq}n zZBthcb9%+~4Y@_sJ;EBQm1^Fi(-Zg*KkNz5+DKK8|jCjfmPp4jtRW(+Hh#d8-V z+sF+X_AjdEz1*B6SWm~tX?Jb&^%jXFGY8o!Z~}ic#XfY;25U6j3%S~c%vYRVCmvnp zV8EWP`n5lHc3-=)QD4{~o9oATE8y;Bke4gF{$ON68^x%soXksw8wx`b=t-1uiNc^8 zo6U`9H=_KbYdO6Fyz$Q<91l_g=O***N}0}Bv)jsWUAb;7^Wx6kPijXIb!R{0+J5Nz z`LIJ03H`~pz@f*+lWwDSlGzWvGzvt=GmhAq$CFX8Ey9MbnN~ZPK6J+zF9mR6P1ar@j zS~7tjdlLBdCM4TRyu?rQoz55IqZ-ubWX_4_P0RLs8mC|d6PW30;ne&@>L`F=XsaUT z^?EFwN++vk5VTh0PTV^~l1Gs@7-PW6`n-}~_Hh%Nk;z#W8j_q-Q|C-G9|n05$!QV` z$@6lN$g{mtlr=$BShy;Ir4~teW-%f8v;xLndENRP9p{w=vMm8hBeI(#!qz^E-IHs7 zm~HjPAt}!@4Byoz)XeI$7jL9aErN~nym(9F5&)bxKCv%3hB>4%4K?`@WkjpMRB#Ka&$jusV%&+C#;eh|L35b$DA{FPT^1yTprodgw&aK)NvwHu;gl z{bwWmIxBq(5;)lL3E;Y#FdHTy>(yCzV2CSQ-`CdhB3;CrK1|cm0?rX-_!7b^EEeMu z098q1D^g|?yZ6)LMs*hAt8S&u*5~G(j`Yo< z0FY;He@d6j*}(FaPw_cL_ni{F*ClTg_gTy0!c29qjBXn*VTNj8H41P(mU)#++YUYB zww@zC^=r$!D2F6bop#}d@}-7^46`$ij~b{N=vKXMWgCC;|2-UkTjJd;iAk-tYx_(N z@}GK@??bm&mH+T6e<9g#K=<<8DYO}#LR;}4KIXZbFHg53PIYtc@y9=sC>XAV|Au|1 zC4QYM{b$7U6}6l5y`6rH>K_l#b1XGeU-;SnYN;sw= zgvbunaV4$KrvXV;ZWiTMql7`9^80IB0KkQ7+2sRM#IbC{&=G^+ja(G;O+sj}N0+q_Tah29tbv#H(iaOB40a`bX5o%-Ub(E!<7>|(s$9=XGYtp0 z5pGMH`kU1q_%q^aK<0}DBI)fya>k8zb~Z$nN{_mRZ|?H^4pRu$vVQ zOm$Z%=em@w#;kEi#>r;S>v3a?AASU%wG<9=%jH6EB)WoNKdmk0cNSe=zc5z07SH5) z1jMCJM2(Nk*q{ya4ukNE7CMd_ZZwlRN=BS_v~vAZqR?hainu#%GnR`fwI9iW+^S7& zuHZ+w`kGYvZ}gnfZ_d2&ms#VxfRLfxw0D!D^SNUba+%T`&&rooo|cXFjfjYle-Il# zI`>GP*2dIlXJ=aT^+)J;?{~GcJW{EMjR=?Rzm%_w;`Yrj_|;19B;R+AWCcEji!?6?UP< zIBZl#n>{Gx`n0K+vgo!*1FI)(X7|*CEVQVB^`0Ea$RL+pxM4COaNJ^jKv4dfKQ)`y zA5m$R1Ma<}s?>+AH^8pnPXMqiNkT2s$4F);BkqlEfKeTf^pB+q;gJ)7RWEVO_Td_8 zGWu-=&~L1UFTPDI5Y5Q`b^VzEOH3@4J3PYrM##69dyRNxxAayQrlwXp8t)Go?1dWY zL(9v12rk9ROHjTL(t$mk8lX zcXUQxh*uoaU?r~>lX?PZ<&EGUajLI=nqu-nazWH7aYdT`?6Cn3?>+w^a^qpy=<2M= z_$J)%bca!~Kov=!idF^374Y3S-AqPtZ@&H7XeRyC&9;6W_`b0qs7~Bh>oaC!LsnJ4 zKvz~!YZwa&-1>xPQ>x?}w-?{0RT~|HfSN=LJ`#H0XZPes`oqu$lsbJMD@E&@BGc?z z8b^kFE|-hJXKq$zd{Yc|2LOQjm6t>k|JZ)COhx~>j=lh!mii~rY_+i6hlQUD2B=P> z**jF1e|^D=kA49kPx1{0<7bS;XWed|!rw0d{LQyx{Dp~Uf5$kEQw5Xf@jeB?)5Jeq zzTY^1!@<*d&R-NUGCSzCcuwv1?-z6b%d0w;`G*tdvuKijN*6ZCPgCb=x|x!zufFYt z-J8?~JMqF|?jx6rr1*a{1_@&0>6i75)VKK&0kNpjY#8YYT&l1YnQzg-o+K;I@f}ZX zLtdt-OE#))P_u;;RuYgv+&X-zb@p<%w5dh<-h2I`x@6ZdYo0e}m6N*}N622%$(!V$ zULh@f`&YmC%&HEm5Bhc1`wVxhbfnuGDa-qOV{+FyzUH}iJlEWue$A_&V)7kz^Lc1} z4F01!zi!q9QA@9i>~=84g^E41`}Mg6*MazI%|K`cPkNsMZ$iPVzdONmPAjvNg%aElmE~<83k8`2yqq z{tZ&Wk6qrB8o?RQu*bDKm^8HAQy<@we@)w?@ zylPvd1J(0TX)_HQEVNjfEe;`H-TjJuBeM;!vqF3P34Ek%_xXlxy~sa{P|b!8tr`mL zs{e{mMf{pKzhY9qc@n2n=}~y$B0*g!&WKhXv7a24Q=9AJh|BO?@$%ZMzz5(!7jZwH zBrh#56MEV89s-Nz8WSOJeTrQpgoM4ON~CJa?Y<(hm+<-xm9Xkh)0nh;eV`Vv`R-zx zKJ4A<^c=O?1v+YK)E6pe*$uhyo|?nMEj*O;@qDtSZT%!o)WS&cy?CH&$^hJT{jmMT zH_vUyul#1w3hCslTvJt>j+#mG z@&e&C#k&DeEOkMgT!Cd2D3X2s8`9}dk>kg{Db3aov3oKZE0~a)u78X zE}Lfi=X+5>Qr5y8dLdqHCqq6#(-2YicIF*lLwL?WZKEd?=p|Ooj6`M(E@N$syhJ>+ zzLmt_i3!H@!wg~6wUvD`psjM`ar=^pPlF+UBelFJt4vOD?qsTFjGOnmyjfddA>m_P zGxM}cCY1JLTXhgex(i&=?W-l8rRQnY*racNik#llFNaHoBYWdmfqXn6J-u0S;&8A1 z^h%(VB$&WXY^Z%AU%iz~R<8TO=b`#*^$(cZfF}yV$~IFXPZX3N(Y>oqoiI02GU2@Q zu8x`RU@PFZLk;qKdgjnAet2|nToVEio^)^n>{g{#}mikll=bAtUa+Ilb8==lP67eP`YD2`bD zv4+|lhm%QVnk4urpP`}czzPmD9d&DCw^WsKjp>NzUY%jywV8}lyZ#{B(2gWFs$t~1 zZ5B=q#1gW5UBJm5oA^EBzSC8l?9cb<%cSz+!~RFwEuUnWS-u5uT6-^QF*RFn;-HpL z(sMXUJatZrwYh8)rqjOn)u@Cx;REnYYuSlj6P{!P-MUA~^=;EP6oRSm%iI(XYO$?F z&!I8T!xunrG#@4GC0CEE`6S&&gl zacKGq@_)g5`PgdqUV6FblO)a!Cgru5)eJLW@0pSZ)nxx+G~2LE zR%{)7ABAH6j&8Z{8~FX>MZ7MzxVp+4dg-)#)YDsUyaLClM*X=Raujkxd^ns4js!LBg5;SaJRGM}9-rYvJ?;4;9|W^ZdN|kM|SRdu;p@Tquv?T-mR4Drf7ad&KK- zd?yH7TN^j6CJ=_u=?k_Iey9M>#NdeqV*hdC^wz>aXZHBS4wDD>=N4Kcm5F3Cgvn*E zB7+PP*AROPNw#_ORjNm&OE5PV7EmZblK0~CH_R+3s5 zhwL*p!>`>>UN2O%nVMOV8IxHpeVbDAid4kz;~(etgpf&S20lyEPgyRw;j!q!cd-Wy zDQQ^$9PPuCp2mvHzi`a)Y@pk=n@bS{QC7-$U9&Z(&Jo%4_JcbIc|(2@b-0eelu7zB zt_@qghwf3jU ze28?5bYH#u*Uh2df;8%n;a;3wM=w(gS;*+zin8a9>D;y$YO$d>XK+%rer#WQZ^nyy zIF&dX^>JnRkl)LC;=>Ljm6^l~5XlpO?DpvQ&tEe)ZBeMindNF-YhV0|0=g0&7iqId z5HLR?Zg?o0G3rA^gwH-YFZjrZzwnFDj8J_Tu0gJA5dW^Z5!q>_fc&%w%_Z)ZJmfSz zH{j$m25_5GdhGWV%LIZtC$5FQoxIwNeBg(k@#yDrA6U%n>-Cc2{4k=!=FQhIufc@J z!JLGvx9K`U3{+lt3VXI`vvca`eLT-JNV5Up4TuzD=yP zEV9r`8=q#kqREM=R+ZhSE7Vc^howqf+W;=i0?R)rq_JbQ5RQ2wGjm9RT%$m(Krt4pDj{p8ctfiITT$sgT|A5TN^RNJO6KhJT;?bRA8j*YEV6g}dFDl|oR z@*xh6W$zjbtAJ^;f;2sMkIX7-^vI^=4o;>-YUfzOB+_>!QEaeon=QQ;bCtV>kNBf} z?qjt>?n@cYwICRx%Uaz8!W2$!1{|DE!+}g9c4 z1j?NKeY)nheOwU~iJ`6uZ3Rklv=?r{hTqBc**S>R@O2}*N4qhT5Q8yeKRt^8c&L9b zE8y}2<|zIi#s9%r)F~DzBH~ZD2oPN;fLRFON51OXJ>2_rr6!nWf!39i6e0y!FU`Tz zb}aj)9*1TN$^@fr>&^=ws(W6cJE_=34+Se@;yGx~)P2qRoP%v%(e&*ol;L9oldUR8 z`vi4-Q$5&twIWEvmdFsp?Blk9J!)KpU(mi4O6rh?=8`tF&#W?gf#@p5Tujo0?$+=$ z`LmjOHRA!`Pp2TkO(L~{&e1Gp==C1kL=Qlg^q>}D{f7%S)wShjhvu7ob<-#PbHybL zHR0m3a8)LDrp{wX9S!=8!|Q@?hV|_dW>&3^^uZEy!Ur)t1f8=hc63IH%5_C~ZhZKZ zYWt7YOx7D12Injx0X@O*aPH?3>sbm@AENR`oiY3S|;cI-|aCiSr9chM5e;#?bW3DPM3Fe3-L1?V%=6mm7A>E*{)$vkXbTtSpzs zq##70FcoEt@C)0=bF~cHY2v`OWNzy>Vz#+*x|QpG5MxP>P70eL<>M)<94n?kld1If zGpJ9Wk0bo%zRBsa;a+NEso7K&mKsxoqbY0Ihh`92;%+eX!5N(CJyuNfr4p0~!7{IL zgX0H)2{Jj#rvzA!O}n+1URcrwm=e^)s9y$n_s$+^A#u)a-Ypc(L-QPSV*BiPNe>Rn z5(eUp5u%275j!Y-NhxXv)DigJ%>-i{eSn0p)m>g5HZ(OfE(ji?Ih)&jyS8KDfFn68 zkf*JSq0k8Rk8jB>wvaXUGcikEEVoK+syV)O311K-SUjV;WnQ#of)pm$;+zgus>qrJ z#b!?KIjD(YDaWF}S%kJ!9Fy~;`;-1 z6}Q5W#C_ohCDEG0ba=S{!}$(Ek(~fuVq}-d5)y$7R1G|VmW6~olFM} zs|+S(X`f5mBHpYD0^4(tW9X4)D~r(bq{p`MHTQh+n9)z}CT1xvkJi~Ndn?dG%^Tfj ze*DkDyvKKVYh0d$zDOyDy`wj(hO$rkA5+4oBA0ScXjS z-wM}Bmr$9%?d``IN?Tkh>lr)-fKJ%XK*Fnl?)iB~t8$ud1BvBtr+1SPn?&NBo4a0& zk6Cu>TAK#BR+Q7#kU-U!o65eT*8r$Kcn8J1MOYmHNO~%!KP)$w}p6VSG@Rqx)?G zMd#J#3nvj!LR62{hl9^{euoATBi6mi>Za({PB4D^9{J@m0iuMM`Q#Q2JkU=hXyXAwa~GeIaL86aBBqZQ&()VTlQmvulDk2z zRxx(-?5QAYbo;tHFf{h5y~A)%LP36AK~4iBwX@=LmPZf&`so~A(r`&Ly|;*4iYMl6 z<$!RP@Sw}Sw&&1{3a+K&&?oTNpipinU3KnPjQ~#h=&JSrZ;BX7v!R3JyH|dWhV4BE z&bmp5i^3yT5uDo98g&QPm-|uk+HSKwwtM+UY}?jw!I*;8=>9Gqso_8Z=|_5br|tn6 z*_N;#aW^YB8#8N&srm+xnt8&*>+>~1R)}EI26XHJEw^)1-d#jbtci^`kGz~ww&Phv zN-(hJWH0AQHO|pXI9VclhHVVUZA?Zo1-=YVc&t`m009FDVZT7Y7H?trh3-#W{TP(@9tCDg?QTvOZN^{fV0Vg?`@$sO3d?R;nK zg!3{Kr7Ik>cOLtUU)4<_F$Zr*N^K^Fua^H#pp$R+@!`piRBMV#dX?kaG8lz@w3#uP zRL?BAAS|f%+q;ux?X~Z(lVaW^YgkE>l{L3N>HG5h_0!kg`W$hSHhWSBlFhE~6qtFs zmwJZatCevyny12pXX3bmvf|~cB^CoJx2<41eBW6Bn)0s?JCdh2 z@YJ!z>j^YCU36nU?=x&Q@TPPQPBh;rcII6$gr$#ILl@i{sz0iu2$FLV1tIKYG zpM5D?-XL88K4LMVD{+L5_>v~`Rtx6CBXmu#oN<>4;bNfqz~$ryC#uaD43pxqzklcv zipPpo+IWj^o@UIPK(~3wq!p418b)HlPds##4!Nsj0#UG1YRFpXRjt| z_}pRR{OuK3ggz)kFMXw7bqP~tayRnAX?fWXa1~rE(ZQ2l7G@0reV^K8m}j>uVQJ8( zCTE14Wl2(V8(+C9C_}Fs6RTO@y5B;jli%c!4PDl(Mecv<|Pl7_UYR^={ul z9UTRI$A)Vf0Xb_S zs?MG{?Cwkz<~A3=g)Cl4T@m&^u(^G<3ontC2C+*sE0!B;>m@PpNM&2eXm{k7P?RC_ zB$wJ5@XD>VEbuFi6xp)jYTEjkf2a!669>_HlZ-(@RrA7mM;_^)Te=PgHdWiA;`mFl z*SnaryT?aK49w<7CFPZy3owEXW~y=<6c&&a1PUye!*M#_5%FcrEM4X_9^Q&MJ_K(H zV)P&C>=dg><>RyX2JpuF&XhG-yDHe$;P%-F#p99Ny#`MA9QP_}i-P=A!TvV661q}n zQ!C`Dyvd0OowUhaBoGr{P#0gv2`C%3^m)zYg25U*=-|ep-<;bg=A1Yo23zk*6w3P$?NNOOIkP zYLWIBl;3?B-oWnUOd6^+VIDA#NmS@Ok1lJUThXjs-`F#vGtLj~hZTE-5qVHic_|Ye zH^EQmcY1Z$w^%}q4kANMRGRStw!5=)mbhhAPquD`UX2%mBs~BkLun8FDyl+%%%S&qXo)5*=o)}n>C#%v&yk7eP(+!vZ zB}wekIb+(07tu-B8M3hW!aWQ^gI#VG7++Ub8AT%4o*lhJ8{LIiAM^*+=a={LJL&_H z`5&mhKLUdP^^L?WB{nQ=*|{!3VryPPeH?`rg|f%{*$Lir*1o!LZ_CD|9j7JQRD|1F zVFa@yvZ7w;ToI67L_Vn8O7}fk1gbznmdlCFjL_m{LCnK?@+6(@_pIbJnT8YVa)uVw z=9~32RWgSg)kc2H4Q`b~Cl+blT8l)(>=ObEYE4Bo)t}>)su>)-?L#qQDkZhFtN6lY zO2>==kfeWeD=fOYGWZ9~h>Sb~5clS<7MY6aTYqB5)=3x(55f5x_a89%>WA^8@x$vO~L}wt=H9m2j+eQVgKYVpgbmff!c;N$w;EWsPGCEnHo`(Pjg{Y zL{4B=&Q4}!0zK8Sa;z&wU{ZJ;e8|xor9tzp4fWdcO*y6W?qzO*#t9#c$0A?QP1HZSB{H%%RZh-W zKgqyRzu9KhRD%MwS1qaHP;$QWZRjOzy&E-wf8?CeL_x|p0$PGW)RDgUOC@wy!yHYeR=%{gy}2x`lm3$NHVQljI0$%Nl}Okk{<;R7Gd>= zKC)PI=O7=A!IM!~mSYuK0{8N=iyd1^oYt+fDqO&LhQHezA5R2H5H833`#^0fj9#wU ziZe5A6b&o>T|Eg^3;h^0vY*-$_qu}L_bp{~U!k}+_2gGcY(ElodeddDHgJ7x3G9#^ zbws5fw3yMC*ndbG&mf%K{`;bFPc>nLtc)?ATc*5@FKVLCaPw0`LxGJkG1$brnz!DS zLU?;stq=Hwm@^Bja&J49Q0(no3>Os+wM|1%j@E*21{$zB7@44IUW)B zEBUC>CQ;5Ebv-S}T~=&*oWGp@YbR)x_t^V>vnInaI-n;| zF*ADsNvY+9*~=d=+I{ybu2?uN{#5r{yg|ohd}G}yT6}AZt4jAy3>RA4LJ|+yh2usp z_mKd>o$F!Vt5pA?u<7S_;p}iX79dR#&8PVkcy4`15LI-WYAm0`l^9_2oZcew{t4bJ!g@59 z`PaLFC0)EVaUsF`_ls8aJcBgaua^0N)7X-~Hmxw+9IEU#jQ;$78lWSC@;ddTgpuAo zaQySOQfls}R}x=UFD5dUcy?&K~tODrsUHgis~yL^=vz%>_XE~~3s ze9z-GSzR(^m;9UXi=pY-a_9z56?ui=HnrJb{P5(`k(!6#hDKckg~a}Rv~r4Np7S%z zyCm4or~*Egp-=ISs~i<*pP8)*m0PPWr!1zHs7vk0^N!7FYZVmY!Dp|R#&)-46A2+W zyprUR-)|DmY*%khSR8lfof$8A#Ho%4-K!moIP`CZvoV4MOmq$G&)(R*p1t+iEU4qZ zk}#Lw?9typJ6Dd~mYrVy{;9}iFuCZPT-w1Eo+Yc{b3dMFY&-1(gi4ya*EVR| zJUjN)8W(luX{tp~bBTjWo3ET4MsXFBx4inKA`APs7H#2;X&tvi zOkKq=SBkb}5c02_JV3dwS`)xmkp3xbY%N`=26tzA2;ub6F>Pd)zvW71)7w^fB7V7XULF}GR&miE1o?}F9jtxu8}iDKw$Xl zwFZVo_3eU!akQqAR;K~L%Y7_Zf;l&gCNBwc4*YCn$?p`^AhxF< z--EJd=aKD9Y~Hx#dz)$cs?u?Z48HRiLQ078A;)LEfO*1G2>Pd7r2?wuE#8tXB`vPn z^9Vmg%xT`#X3E_V7mJm0tT<&8e`1pB>?lR?1$o~ca1t1Xx6$`Ou$mnD@pF0i%K>Ss zo~Ck$43~uTo8rWYdTC89HSVS@C3$!}26NKX%PWOz;Vg2;dt13_!KB4P4XJ?;KWB-y zu~Dvbs)4G55yv*}&XKa71%X2($N~y63mGL%4%_mvc$H`^a6K%y22g?;WtF(N>9NJx zKt#DS+WLWH?8(ch>8WP9_IZ1JqART;OSA?4j&=6$w}ZfZRHJgEGq%f#88pcSWuuT6 zq@I&0SRe>^DE`#9zbxn{e=(|mGpuaHR)LhK_y_sldbsrOdRQnLV)URid~^8&ra_`< z$=>U(+U4GMc~4~j8xQMl8RS%-(g`^R%0b`hA{*aoW0!FA17@e8K*km2@gYLIMs5QS zOZI+gyat7`zJ|(2xA~IkWZ1}VN%&Q_2LnTo2HNoR=tSqTjj1eWg=5WI!5SX6>fJ7u z+y@+qsrf>B)?iNqUTDEVLrPfj4C}^F4PIQ;^w?B@>N$7z?j8(^1=2gNn;h9xNTNjr zk)G^>_66&t1}CYt9lz|>M~}$nCiJ-Z-5)TN7UotNU`|?Ib}9X2as3I^4U>)Ck^{tseS4!J^2?)Z9nzHJ_O;IE zgaE0v@~voC`q0qGRL#JN#-71=N`pGaP;~n`Tb3s&$%0m>P24GrWsUGSf7b|*ogood z)wIh}ETVNO+2h3Z%}@)kobf>9Nc5Ujbe6U0Tqb>~lGq9Y z;JD7NJL?_|UO>u4U3!u$RAgY0Pl%PmOr{$8Dl$s?F708OFMD0m2064ZR}w>>Od{f` zTjUPQJyN0*mPij~9r&-PFytcYj+PhUag^GWzN-vP)!)&(wq-X{jP(9N(nT#&u=2y52(s=V@$@TE(s20qb(xM*Pgc}+iTeme#C0=m=n$6q#TsL z!C_;&4?Kk2dX(=vIjyJF%*LnxQDK4P=}EPUTZ!a?Wbw&tC(-g&wa@s#TZss)6_sL^ z7md|e1PfYo>(Nr_6SQf7FV-0cc46E@mm@*;Nl14dQ6Xn8th9&Zth`U)Ac-BrK?!uk`eVNAbgR zbTRWpO0vbw_c0acfC(t9aod-#xN4MA`mZDr;s(A{QPTGH*!eFdNGx$i+kF_MjO~`P z(Oaph(f9q5G5YPC%>^2Fc4ZGCJs1ps7?${AlB%8HQE2+{)R|(ag#GFyi1ncR?SYv# zrPO+TZ5$yIZy-_H#I8LXtizbYn6O-fL2Rhr{)w9L2>J(oC)Ty;$^;&MQ>0n}{U0!> zAvQ%eN^ zBsU5cDy6fPbk7Lk{^S|UG`-MTZBKIvuV)!+4l80^+ zW;c>hvi*Cftu4Q`!?KXUYGLrY8m&VH%9RW}mz44_s)J3Z{3JH}mwE)8yqXHrMj7{I&EJ^GZb{VO}d z6mA^%%6r3GC(%6)LVD#`%LdlxHMipB2g#MC^i3V=!tv1+F?*kLqKty}6uaZ2vvHpp zS2<{{rKaOpocX&X+Ez{*4C#^#wtP%Y*|2ruX9^+Kt7~wHvq9)Ad)|A<>KM=<#VRCA zU|w=Psb;Q$=Wi3FctD{wq5k~-A735!`z%%dKfm7;8@Zk7rw*K_>XSN)VKFl3-mu$UbiRpr+>d)^ZA8CSl7HX7UhS%C0 z*{Xqlz;sbb&C!fBRS3$P@RpEq^%#2uJZcWPcLnGskDHwM>PH$xjJ}k9JQ~_`LAN z=F6}V10f@mVJp!wit;yqr@9yX7dD&GfcXV~CwYtV5Ie?p=90gc2BoV^cp2h;Q3qhzK`?cTn= zvd}`E%!%isl3bOwDsiH0XCCkHLqGXEhqc4ueNx>j+>%YsZA4MCELPQ0)`;bh)2V_H zHc!hgT#8|R7oDAi|6kW!F+JsR+HW?LCnIL*&|8-`1LircYt^F}?*lfI;%AJek_9Yy z_}QUkRm1Cz-CFan0-58S)5)xO*f}>=d8sWiwqada zS+`yXMLLy7Fmo}fG+*g6TKyc!3A5QlDo!L+04FvEg1%1x(~vP}Ev!SmvDc1yBMIQWrrMcJ2ie4Wy+sBgHU zk&m?0T9{zxEaw~1NY5MB@i=3bochprsJa5?^s!+!QnZI5=Zcus9qlTZD?Dy)=5o;OZBsJ&askdKo zc2Y3TmwkHIGiS85_F59hba~S%%OStYB89`ZZ_7UO5M2m4tcU^!$%i4ZAonSp37I*V zr@Kw!Ibx-gH$JLw_CEk+VB^1F${Sw)fRtatWB&mpGnq96&Vkf_;)Op)raU|*GBQ4} z!~$NA^x?VdHfvl)b`?AU@B;T5nFY|8$m70T8NpO0AQA;+;Q7Ze2ZW#hubJ{B=qaE> ze+~aXROKJvgn(<0HEh+4EGoD3YYn%5q>7l?5}|wSV6m+C6_1NZ0d=41P7+ddS|_); zkg}by3pE`n=*t0Ptg?T!Cty%)blP?v%Jub~y>$UvoFEgPksbVrwDl1kTqNFlkwqqJ zNd#h6e%F-nWInU^j__Mk?lgN@L-138r zVBzSvL{i0PP*BY7$*KZ*dD&sJ!4DV_t7l+1)1C&IK-%MRb&VXT_G6l<*9SWU&~GOa zZcib!KHpbm6RE*0n2uk$hph_(zQ~v@#}Jcx8P6@tbor0-Jk8!*kXUY~I1mski4Y?f z!nRWQiyiYn+x)wo;|_Ne{ZFX{)B;4n{%xrc61fE)Qx*L5GXZ<&FN8CxhgClg&SD?v zqTgP|&klq)0d1!@Sn1s&Ihx<@Uv6}V=FGLk4HIp;b-tBEBXTX)OP;n%lV+F(UAVZx z?sE{9MI96}E>UM&xJOmiM!$y9UmN!$bELlVw9`EC>yG;tafKE*ij6|`5Z^eipkH%% zKWmr0!D~K8Z2y@Hg>EWi5=kj>)MVVZMbfg%>rQ#*?#yctv|+i#ql{(f7~=G~wR@Yr zq{{b{)QEosM?mZ2pk9hhrLsV9+G8o%GBpeHOOa`Vlt(g%Bh+DF_i_G>VY?(0dVkE_ zv#Y%d!=0Q-_ao632Ro0+W{coqoY$_2Z)QmyWl5fA-u0iJS1T3Df65IE6D$x-Ouflb zJ@T;MZ$9k3V)_9CNqLNN<3GyxJQdH{X4^_$KJV+b%bih~)#I6mhFcn-G+_7q7+<-j zIF0j;*>#vmoAvt#OQ+pf)}vH&Sq6?H$vR8fu*!|Fu~54wtner_b{+F>{^XLGZ_FyP zD0CO^r!}~5qJ{BZyQV*30cgHjwAD>FBy2Bk*mHm>^lNhboIrrCpz_Bbga2(d_+tW^ z!L*{}gDtdV*{x%39NZ8`)m7VBi|K;;#?ZKw$YQIiX@RMi43Vu7c=|*an zC`FsKi6_my(Rku|ZkS)N)JjcO$)+Pfhg4fn_BCK2Zb9TOHdKkH(s;cgn)0#XVUq%k z%Nle**y^<7+GIMr$I%dypzZzct?r5;GHtgIe4vIJ1QG%tzJ z)O1cduZ{BS7ImFrzc0}YsO765HlFb|RX2N@c|?N!u6wE&f>8vMtYN#z^1K^F1|oTM z8gG$S=N`_9c6dLrXU}&4ar-bJA!$ByP2|L!NC&@bVnrg5!qgr@mw0CJl$3N%c#Y>( zt*3V4Rk_^#pfPpzabThr@AE*su2r##o(%p*w;Y{o6??YTnd7jk%WtO|g$!;U8@`OI zUR01BmMsi`1;8D{x0@BdvYPMd4&~MzK0+&PNJef?@vvYb0c|fMNFTunC=>V(tRQ|G zp~-0Kq*SOaRlV6a2j>Bj)0gq*6OgjM((#^B!~c2*`sMfF`DJqei{QL$M!ws;UG_WQ z_?J@r|Ab)w*SG#1Sc{v-posE^F9l=};!eEqT?O)_QN&h#6<$9=P{5W1PUjuajxi*n*MU<6px3wix!&A4zEnR3@C|82tlgBQab! zxf>*XKv@YSl(7Iru|*D4uPe&R(m($~{sFT99&fp;Vc)87?&ZJDKP)*ksBcJZiIatV<~YI$rAwa7_-j#I4~NVI5?jCMcMGN=$T zL2YgvzR$8dE4iHXKyR5K4|ethzIu4%rtM3}Ic)u}pNob9~l;7+ z;mg>O;Rc9&X8eubx8r-jm`+W<_*7RxoTzKBxU|sB8!QZtoup}W&JRs~Vn)!TJ8fLf zlGLpg$qrP_^3gYs`ITr1^dn$beu9Ok%Fgfy)bl^o4{vMm>&aib zL*^xcg#lBYAWecmx~MY1g3Stw>cFpW6gKekbFeb{A|pSgMxgy2ss1U-ei_Cf>1~iS z@?TtQY!K*|%<)I{C)mvO`7P-Fx*XzvAl&|X=)VX$Zx4WwWc>#r>B+AHVYomFjL*cx z3Q&+5eG4+)1N}f1Aq7&fK0F2~0$#tLUT|6lL^Rtb6jxSz-Rcv>o`4)z98%EOKeS( zsZqYG2w5x__{t_QmW6ndDOLftJzYTJt`j}7 zvGT5X=dM~f*(!Z5C^m0Jt~L!WBSfFOV`4QK3P1#rlS5CW$SjoxrAjto$1JUEU?&zkDuu zcJ3u^H*jm1;uZH67Ju`ndq<9!U$@a4$xLvKWn@?9mvcTC& z*NZANUFUmb<6O{h-M{#K$FdiGz~pKF?uF#^3$)+85N-F6`DZWK{eZdr)j6PW6P7`z zv9gWUJ@m-%Qu|R~RE#n!Twt0;{dP`pUSfOuPF?`I^Yc$XoagU;_`k0ymnZh;4+zLy zCw=2FTayT;l9E4JS$hMmfu z2u9!6-tIDBqckzpp^faObE~|7lYKgKEWNgH^q7l?w_%#}O$^bFxgjBE_qE@%(U;~4 z?N}74nq)9*FA9lrKVmG^#&^IEnz$=zaZDu5aD6kwcp|Gc?U09j^qBFv;2CjzORqZ5 zQ5e)arQYiu#sRK}~@7LpBD)uc?x|eQi{*ezI^ye{H zAkYUdg;%#PJ%Rhn*SEfJ6KB=b90M{V=k5nlnQ~DeGh}B>wRl)4zkcFyD?a#W_fsil zrZCpAE8mxAy?%}sd!P5011_SZBWBiJ#e<^b3*VC=AaGH{d@&s|d_63)rCKhl!V>ys z6J{5Ykif4X$yM@|>6h9uFsDWGHPeY=QN(7NFKQgi6 zw^=M_@p(iDXl#Q6pqRSf<+=Z%kLB(;Q)V1j2q;TBfyd5k2u*K+LOUEA5 z@{!~?vWjK!UgU))OC5Zts``#QW7;&*Xn4O!m6B7+(x#!b_kp$yvp!EF% zJxj;dQ;@$U9Cr(?|Iq6931hWJqi3LUmE4|7dp93 zrtql`+8V>?eg^aUj&a{4J&doH0~mAboWC1&Z=uk;**m-`9<{IW&gyZ(26_8oJ!}hM=3sH^N$(0Jh3b%*5fe0yY`RiYa)i|w!`_m6LjjY@ zldHx=kT|^4vElLkdc>wVUAawc?W}(2ZYckH=MFT(EDL6m6sR@;mD*v*WUz9~WPJl9 z{OblItKAStlFHCJo8;D>qjK%;k-wa@mO8zR>aVIg5aFjj4S_tJrK3==H%4TCer!DM zIy&97<#hA1o$ia{{K2Q0x(ZA~K8r&(|5;1(ToC>vNkMTxU`Z2}EPI=aDLvhZs$ggX zU2BHufi$Qt8dv z+0z>_*Q>NBrBc$DZySbj=ZIE*9T+J3lw!GbV7t_NSHTPczX>D!6!pl^YC9yQ^?Qfv zVpc%3lA`ly{u1&+Sv2InT$I=b1N^pZN!EFeNJzxxHC2g!z8t+V{eWm5oWE0izVZ$ zQs>0(+#MwrHT0OIc@avj_8v?;1m@Rv@0zPZyZ`h^34xEh<=@9Wb=0tsbG}i}5{RqAl(kag?23yP8QNJ)@y8 zt^USYk*hP0LOnQQQlPxVSG^K8uKVHh35<(3kCs8}$@Y#ay#t>4n!emYipOBgK#`|K zv65b!K=;`@m6Ih*=Q8S=SN?T_r$&O=ToT-S#SYeoMN@;D;RA1&Dn|CdL=vpkcrB0A z8FujpT`ON3ejKX9-9GhuUTfYCCJFTY?sHMNqhhcC2 zQ0Dkfv!(Ysw9ZVnhR=9%o?v%t8|&a!@agFUd9ulo^7r!S*VCnPjy&|_2^M3| zog>u4UdVzT@ba}ZT>);Bx)=S8jiY^wB{}(}4wi|Fm4y?R4OCu-LGP0$NWj^8MXAjW zg8sC|aK5I-e0*rYr~H&?>*X9;uA~jLoVr^SSom3BbE^Cs4JyvoCm1&`{Nf&=bGnZlHYhuAnda z0*@p@toOp2i*2WjJ}&b4?j$$+YKC%Cd+sN-Q+4&;2mOfdtMR0TQCYz$YO&gB_Sn(U z`J^P&cjrIz6v#Xu95)cBW~C43pV%2Rg2(Ck%IRwfhg7N-W)LUQY`X4;!PH@OM@~ZB z)3Qw)N-wpnxQ5y53F^rO=0`PQ?G|?TNF-6Ydj*&sUCkOBYp?VUKZ2Q@OAz+U5>~yq z;4(WSNfFQV?)o+NNf0&4oPhwL?es-}nD zd~|Om97>SzjK5PNG^ko6Y=YYB#i2#x%>{G>&gcfIUFXv$b%9R~oZjxagpF_)CbipF z)&p*QL02RmXIE)-P6g{;NsYy=Ocf;k&+PRHKK(b_D?KKfBG{=>wZww;;xtum)voHh9gJEcbE7Ml9lK zw(cby(S=P%dS8FZz~XY=Ga-3zdwa#iM#`Z}A5EF$D4)n{VwqawN`61RSlz(Fs~|2o zhnE2);F1qG`7a_hKs7ZSI4%1Ux|q}crg5?U(zJ-%yq%F5nn4W zG5F1pP!Ej>ydhswyQ$c!H;kbChW<;Fqti^0u_Zw=-GNvX>UK0zWo@ zAI7drU6oi4^NI!e8L7NwVEg54_l$-w#8o-ccYL0`D$5yf)bH5{7PuTdFDO;VuKv6W z-rUYlTnes;Ns^*era&=^{h!9wzaU7hBG)>jwSUn4aQ-+9p2F9+^#_bs_+`*N5I6T0 z+o28bc!?w7R(c?oB|LMP@iuMmR)KNE;XV)FsQzIRFB?ZezT6K+hOJw04kR?^$-dZ+ z#G@1HRPHkrzec{FVQ28Y$BmKf|M(rgdFwH~quQ&_o-yra+|5J1uHo44=C`imsfwWt zGk~v4l|hvQ3*(RNJ2cYvhf6}Rcsqkuad2SkV#8h?J6vrQ-81A^19PH0X`O9gVZs%^ z%eqk>n`5IpJRDkER7WXIG2ApPJ|rJnF9Mr)?WX=f9Y5|Wb?I<7$4lfG7F zfYnX3*clzg^vT*65pH2Rsl|^B!}16n6+G5+gL4ZIL$QYs?&QpFpSPXdsb)v16sYxw-cPrk6N;b4IkW4xtAVki|e~6&Zv8fW!U-CGy)X zolEZ6Zgxj3_cUSmjb7Oo3lA+X=_`9`8_$qnt9{PuxcyP`TiH?mYBfMhFFq+W&yjcax%cMOp7v zE}V_^BpfO_M=_2RDS4Q_A8rEIn{_3BDOu^W{`U6kEzP{x|Fi{yt!ki1d(|*4&bYG; z<5ORP{w*Y2m`5=eroLDIuN(c3PfL%#UVC#oGuJyU29L14;w*3tbX`~f1LhP_@49N_ zh!te>ONUd#0vWstFM!cwxU~#0Mt=?*r~g9+4iIhv9@sLKX^f0kx92)+lmHP!Awo|w ztPH&B7Vu(v#1pFJ{z{mz<-0FM9s>3awF(A* z@kM3^j>|o5#6niot~*XL?iT)Hc-0?9?`7n`;{&(lr=<=8nXY?=+{prxsz&5=X`F8f z(sLuPH3G;7PcQSEmCQv-OM&|%zEa(_p#QD{^#96dyrjH04JfxBH8;iTNk?T~2Mv=0 zkyk8xfmMVf+ChLA>NVHJ^l@fU z*@|yWwrf5+%n_)Ue}Q4feAOaePS6a8Sn^gh8~6R;G7^&H)K{-y3@`!Ng2Ee)E9`~g zoostdp8%d}TrY_pxbYPzBMIs(#Lu9js<1oOSp}Fz!gW`150Tvui=yMMhh93jXSYT( z7?{VmHZw;qU2cSA|2WzIa0663*D^IL4>@R=GM$|92>AhHv6!nFUT38#oY(C7b2U>e zp!lxnKMEq?{)#^WashK&q#Tv>;hu1y2MF^{0!2r)#=`3Q7F1tSmdx@EaC+l}2|uYS zmMrpxcAr5mm!wli$=RF3!`2EpuWi!8`$cE{*wE6t3=gvFy5(4@f>j_*%Q(_BT-Ixg zpl^UeK<4&=Ij2-Z>`R05_~0j=Rt6;`Hg~UW=!WPWbU@vRY2IajXMrh$;vZ#Wa5-yF zgf%5Nni344^Ws3Kif!T~18udDLt(!ZAK5#-ctI`#tr^r3Nh^7bKIF3fh#(bf~cpR zP?QtZ=llbw!#3Oat|rQt@#?tfZsq%^r=?}-olnAph28Bygtn9P#i*jf3uG}sjpGAR z9>AsY`WfW8+*;JQktDqZ=-SeIb@yIJBM0f4T!I}3JvvQWkM}ig{yEzIvn|9m!yhmz zA4RRIf55yiRMNU+yRUIgv=!NCvcCLsy*CEP2BG__!3Y0#FD}Z4e!pI+pV9&tu2g}} z0NYB&Yw63i^G}C3z;{qt*+%#%7*1n1i7keyD9+!LhHvY@MBFB z?I^)Sx(H?LWxl53VldIrWnjr}xKTecMUDc!z7%H*m8IJ*IQ7_hs0avYCaKl=1N6yR25KoVh!iS6W^$ zWU_C<$T3IVn)d=rd~45$5<%>Xt;-a8v{EA&O)NV*$j@#d1a$1Az5E%b%$ppQN8@=< z*4TrqVHUK-v02=`nmw#VJ~{t zK&HUzQ$?api0bHq?f{Q@)y%kr#K^aC7OGqywyenwo1X>6MCN#T%!fNiA_kMhXHW4- zsQkTBT6b_=E9|&*#%owRv3x4b>x*{^3VR`rBm&A@QDO+KHjlEIUR4N2DriDT6qQLv zF~69Nt0ZPQW{exBBl zKJ#$*Fn7@*-YBx*aQpvM_T5oU^jox8KtVu2nt-4JDk7mn=%Vy4O&}EMC82~CItmJc z^iB{^ssaHiNq`_7LMQYR2u(n$bfo&?{ciidch|f3%^x%QWzCwkCTntLpMCb(hX6Hi z!xAs6WAlQGi30sD+{f>;!o$lnS4FRUcug1a4=VdFN8M%7oYFhF^*(p$cV~aLpWM;p zD*7T%5~|~ORfn7I-(H!2`ZxudSzW)saWJ!rbOP765lx?e=mC_c(539d7BYT!E?l^h zU4NAQ&$do-;v;Qv@e}d;%Ti6mSO@y|SVyU)MLB)8e%KC{iW{IpJ^*PQeP7+9l98EA zVn+LWh>GYcllje4>52{jMN2)b!QJo3rHS(<%!U+LH4Ks$^Yp}4H^yR9o~w=3>8YEk zDGh9brsUx-U;5F2FJ2%yqwY-=8UlIqAibpthC~zCZ^gb0j|4JOhiuqT9~zB? zTxGRzd8;7z9F#UWe^AvvqzrTfFl@#ZtGY32bc41lFH40D582zqj>pI7-N_s>r?9&->KM$?r3#CFRjJ4hm52WmCi=N zew0;gnPIp#VHvJ-Q~bNPAc2H&J@}~UXl-91&}l@k(djn(e8&A$OCXvN1Ez)83ABRx zZJ;Wmz-XFN*2nk5lC#bX4s|Ol>XSJEjA8xwkI_*kLD6|M%}3XKU`;R%1JF?o2D~bp zS=@^^va7C%V@v=)J{&6e%8*mCS_ym~hxV%45*H_%S9cwfR90I?_A&V5KelckK7@?g zf#@R|-&emkoTwDr<%&_l(|pfnE6JVK)In?5C7;IQ5Ry|95m@Iysb_l#m(kqYzZ11k z3;yQLqqd9uZ|s+^w}#O{K#38o<@b)0{LhBP5GL|jO$oo1AU5PjK*tv(z5 zb?Chq@q_L2#4!(I>*Y)~Ubfl+7LJc;@bBXtub#h1ImO5~5wIjhHzA>PzQpUnuNC&S zQKAtxIT=@OZx<*9XxM8rtRR4Mfb}J3{jZvhUJ$h1tbAi>|wUQ5f+4$zorkNk!@1K>mUH;iO7hMPlvR=LU+| zQrOb2GFS$7_NnIS?GHr{YBy=vQWlCs}2`EI#Pff(L)4`+mr zZ;+qjeh;I(O$3a$UlXrE^MlwO#`CY_2IRDwHa+Diz#0n z-Vdi|whu58yM6TN2lM=BB5O|WtAM%>1o(|3rSK;CsusIDUHDFEo!(2<$pegi)70FV zxQ9OUH^2WCX$Q0*sn+VYSuxi_@D-Eo>v{Zg`_PfP#$$>Gok5YZr_+*DvM!28>E*B{ zscMn^n`pcz$c0$fa4;)ZenjhQ$lX^HG1UIli1lNF`?T&dI;M146IhxAa|yAsOHb33 zVVG^%-}PhU+z>~R-z??XcE{?9BFhI6THsJn7 zF1aZqOjCRAjag6LUq&1(3;lIWGlYb$V?N=;@g_dpO$aP@104 zH{B3fnNHJP-9HKX8U^36rB4uI-RV_%pa)b4mQ z>hEuKJF#5gM%uH({Z{QYVJk5+ZL|SUi*SBd;ZjzHslLEsuO5Qt)!D1`eDf;O7xO2C z=}VMkcoj$NCc1?SatX_V+d_sYB{G@()~(xmv7gElU|3ca7bBXY#f$sL8OY zke>X7Pn`4tuV%=umMJejkDSCjx7bDp=f?=G)a!RwF8F(*IlY?-#I6tOhqZ15-mhI4 z^zX6;37(7nm~K4|-sIdR&)CcXCjKk?{S5?(WW$3r%M;D!GeQgNFP^rTNB0%{5( zK}P!E>Z9p^{}HR0Rbgr>F(EsnS_UH}QCS3etVVpbMBxMl8pNc~x}Mb9qiMN^$-<$Q z)R`Q4xsfdv#@c)>+m&;(b#JkN^jlOVCAOsYjvnfJaH$ei2i|CxaG~x3!TO0vL;keg z9xt!;CXD1eJD`TAAV#laJt~ZY`V=r*-92M63WUtCL2SQPB?p9P(zZWsX?ZGt|77F@ z%`e%#xm>}Af^BDwc!?W}VfjW<`>{_NQP=Ey>3mps*Uw`E#(ggGl5KWGqwtVLbfv+;_4gBLAV1k-V3gl=rY7y#LY*}L+RMfwHCZq~*S8>m(4JNLv-TK! zg{Ico^1^@K{+Ep9sF}=le|twn24pd>7aIA+Ze^n$3-fBIPd(NR!FS1>HReHtdDe#K}%Ff)b`~}ibM`(;{0E^9o4exYv0w5 zfqm&`P!@4};BNc#@Pu+(4-TZ45IXfg3-kHh%SLe6BO#Y*lv=&F+C~8=%Kr-^B7}niGqW>L{pv8j_P6hB9Wu*?=T|O$<}?A# zNf`mIb5Y%mgutC!F^roUjF!y;J;NK17FVIx)b&QWNVh`MZ7;ctlTjz)6YS7Ie*=(=(5z>CWXaCiV-%3`2t%-vMo4nDBy)*sj{qD}f3i zVTYJ(HR8PVFj{YnYdIlJv_i^`zP!_HVnga&!Q^aEnN3#~FE~y;m_l=axu;20Vf0V{ zC^modHk5%XJtiuC=EAH#7tyZ4NkiiSaj59U3MLDC|C>H3qdq;(*W+Y)SWKEd!=-fS z9i<=o7nKKAR#+oljA!$|m`bK>?uf07AT!RE(UDELikA6-p?75&j%>B43DzvqfT5V1Z7k+?8FefxBm>Wz^2O;Vi#Aq+-x8Y+pj)a(nmct7Lq6o~6WsgP*z)~gpRMUzmqHs0z25p~3-F)McfT?G$0#Jye| z8RND>1tp=A>bm08RK!pl(-gHOf@D=ecv zianR~p86vx?7qK6SiQ}QH<|7g2x0ZjuZD$Q;`GlG`5{1MF`nqDU}*P1L6tlI+cP0Y zL_s96x7WRsmB=d8v9TE?vIaWq_5ANemkwlwqQ9(|Ia4WA%43 zCG;5>eH+~&xm^iN=p>qcexdF4^^fpj$$a8tKt|8Xbc?dQi=Ut4k!6WvKwFFYtRYJFd|3<%J{tNvo zA0M02%-Zp-!=(107r8Wv6-0Zi0(A|Mi&fHo4E*m3cp!s5gY~cRf~Fwelj%a3!wJNE zDr@YH1jKu&Gcm#YN=+k)wWo&T$Us|jCNH&Fdbw!r&x~Mand0fdq~;m*Rp_FS&zkYN zu`f8G=Zc3Qt#((blRB^!me9vC&B8pI=B%2Vhuge|G*z$IsQ3LWHgRsjWp?B^BnRJQ zaK(!>BQX@7J^q~brbs*$Dpg8~{Z^c9lx`D@bbk+)Gcj5zyAcz;v&O#@%o`&^Ehyq7 z!s4KM6NyAix-GR&yj?_CWpM7hZ?whUvx3YW71w6UcA-x$&L3;8)C;+yfospF8%0b7 z2X5N3G%f8Q_upfgFxnWCTD)^qR57?$Br^l!FWoa?aE$KjXzKJHa)o!gpai45+EBtb z7Jp>rDUIg^eV!VVj@AUfBVlLIe1P`PS$ou#IplR({{u{2fiJD)iEXj)51(YrS@WKA z?xX^jS$e!zArZUpp~`g_%A{ui0~ieLbgKh+J(V?N&ysqS<0jLiUUQELnvbh{POx%? zsK&knUgZ$ObzqyF6vuk{-M;tl8ars$NgOgG#uxN}6$jVCc9@re| z1y%Wu2&4^N=KV7C2eSUhKJZcna{&Ysc03&$ILw%`g-~E%U$?# z#k6!UEkC8Nv)1oR^nO!i-szAG`>^c?%Fp`T?jkdL6(@`L z_Nlk00LqjG?;RZb<*WZf1d8#?R3h(-sGD&6k8 ziuGoJg5v-wqaC*j$**47E;3Z?_+F5FwRnskr>it^dR3=W=i(x`_RjlHkF3EQH>SBg zYeOFQ%Gd+>qE6G_*A+Xb!9gb0VMmxCcBjp^hTZeRfb`W1L918A?2GRor_nZHHMF&qO&=tB1w_%XByHY?e>8_v(Yu>W_9&CjT`U- zWA7kFsdzRfz*qlFXUaiSg?Ubo)_Ap9+yR-oTKpUxuq1QHM#*cqUBX8%Y<#DQ1yh{L zfVc2p=*HFL{ONV~x5fYGJ5Ps31G|Mxs!cRy(*o(V{OLEkI|?r zqX8gmt{daz?8@o!zMUyjvLJWDXpz6acWn}I9vI)Y&8HMe!rQNH&>d&aHoOZkGR-vm!aShS1*njPo*G>b%MZ$!4cE=CAx~88$HB!pP zT;sZ2CgSc^AcH)RkvV)kB^4@KwL56%4)c|`(;*ty=_`_06D=STH>P6xxD0BReCXf* zQnvckfzQ~-bwB*@L$`dlk+5gfri!F5S0uajhZ`bd6Q?+;I%pj3$G}V9m|>qSJzL(G zX5*d=SXhsRv%@m7eCMh80kZEG$;fBPXqkReq}VshX#6h{GRY}zu`NfiB@ss?46cYu zi)WU`kg%gNi9RPO`1pDk{P$lZ3Fy7MT?;-^JU3kV_>7~ahaSauXheTJqoI-p#**`+ zITL*CHX(9!_g44B-#v@_1G&nVrOw%$&cFJX6r$muN{E2HB>E5ezl9J)lHdW6IE@Yc zJ8?Sm--y$TS4BRSDFVmpLSA(awPJK02!c#f~gnqxtt+92G&;gukrf}ew9LBr$+^`{R#2ft3<{`{XRF#kjG zMfR8jXQaK9OZ3$A*(YXpmqX^JiYSPYfivVPEF{o|EV#a9XZyE4h>DalJtlek<;Jt2 zXOG-mIo#(jnf;{rPkDOmnZ?#G5+;eaeihoKNkNMd`Taoy&Utx?vVD?eC@?3FZS$!oug9Pru8 z1U=;GF}88xU!QTjV`DfL1>cB@t4ybj?sW@F71wcgVp)x~)B`x@?Ygxf97~rPgrnCF zKqCqEY$}etCaduLf%@2u&|^g?WN)&GNFVr;--x z3s$r+_KgYsEhRbEgG5+(RX1uCxR7F}2)38`9=86hk2t%6?Q(Q%-YOeUo8d`~Rgs-V zCuCYsSc}$p-OBcdzZt3_Vbacqst1slsLWbuy*9f7<5zX{dr#M0lk=&oXBh>^Yx8Nl zU*5LF-PN5`o5W$wwM-j6W8Fwpbf%++so9jLC8iy~IEu-Tl z#hAV@)vB#Ilqp5>VXBUxg4^xCNcg4LETkFEyizHtz1a;@RX>J;%nWzBkr)+8rH=(~ zo_{w!Ug!$QTgsve6Ixx`?2_1Y&a@X^E1LKw(fhHG4){m{rHIzO4+oY(Mv}_&{(Eo; eB+%~To=~X$A+O6PW(sb+%pBXoL{-bLiT?w1omN-? literal 29467 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%0AaD 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 T9S5<@vmHI@;eVa*yPf$TYTP0d diff --git a/framework/assets/css/style-rtl.min.css b/framework/assets/css/style-rtl.min.css old mode 100644 new mode 100755 diff --git a/framework/assets/css/style.min.css b/framework/assets/css/style.min.css old mode 100644 new mode 100755 diff --git a/framework/assets/images/checkerboard.png b/framework/assets/images/checkerboard.png old mode 100644 new mode 100755 diff --git a/framework/assets/images/wp-logo.svg b/framework/assets/images/wp-logo.svg old mode 100644 new mode 100755 diff --git a/framework/assets/images/wp-plugin-logo.svg b/framework/assets/images/wp-plugin-logo.svg old mode 100644 new mode 100755 diff --git a/framework/assets/js/main.min.js b/framework/assets/js/main.min.js old mode 100644 new mode 100755 diff --git a/framework/assets/js/plugins.min.js b/framework/assets/js/plugins.min.js old mode 100644 new mode 100755 diff --git a/framework/classes/abstract.class.php b/framework/classes/abstract.class.php old mode 100644 new mode 100755 diff --git a/framework/classes/admin-options.class.php b/framework/classes/admin-options.class.php old mode 100644 new mode 100755 diff --git a/framework/classes/fields.class.php b/framework/classes/fields.class.php old mode 100644 new mode 100755 diff --git a/framework/fields/accordion/accordion.php b/framework/fields/accordion/accordion.php old mode 100644 new mode 100755 diff --git a/framework/fields/background/background.php b/framework/fields/background/background.php old mode 100644 new mode 100755 diff --git a/framework/fields/backup/backup.php b/framework/fields/backup/backup.php old mode 100644 new mode 100755 diff --git a/framework/fields/border/border.php b/framework/fields/border/border.php old mode 100644 new mode 100755 diff --git a/framework/fields/button_set/button_set.php b/framework/fields/button_set/button_set.php old mode 100644 new mode 100755 diff --git a/framework/fields/callback/callback.php b/framework/fields/callback/callback.php old mode 100644 new mode 100755 diff --git a/framework/fields/checkbox/checkbox.php b/framework/fields/checkbox/checkbox.php old mode 100644 new mode 100755 diff --git a/framework/fields/code_editor/code_editor.php b/framework/fields/code_editor/code_editor.php old mode 100644 new mode 100755 diff --git a/framework/fields/color/color.php b/framework/fields/color/color.php old mode 100644 new mode 100755 diff --git a/framework/fields/color_group/color_group.php b/framework/fields/color_group/color_group.php old mode 100644 new mode 100755 diff --git a/framework/fields/content/content.php b/framework/fields/content/content.php old mode 100644 new mode 100755 diff --git a/framework/fields/date/date.php b/framework/fields/date/date.php old mode 100644 new mode 100755 diff --git a/framework/fields/datetime/datetime.php b/framework/fields/datetime/datetime.php old mode 100644 new mode 100755 diff --git a/framework/fields/dimensions/dimensions.php b/framework/fields/dimensions/dimensions.php old mode 100644 new mode 100755 diff --git a/framework/fields/fieldset/fieldset.php b/framework/fields/fieldset/fieldset.php old mode 100644 new mode 100755 diff --git a/framework/fields/gallery/gallery.php b/framework/fields/gallery/gallery.php old mode 100644 new mode 100755 diff --git a/framework/fields/group/group.php b/framework/fields/group/group.php old mode 100644 new mode 100755 diff --git a/framework/fields/heading/heading.php b/framework/fields/heading/heading.php old mode 100644 new mode 100755 diff --git a/framework/fields/icon/fa4-icons.php b/framework/fields/icon/fa4-icons.php old mode 100644 new mode 100755 diff --git a/framework/fields/icon/fa5-icons.php b/framework/fields/icon/fa5-icons.php old mode 100644 new mode 100755 diff --git a/framework/fields/icon/icon.php b/framework/fields/icon/icon.php old mode 100644 new mode 100755 diff --git a/framework/fields/image_select/image_select.php b/framework/fields/image_select/image_select.php old mode 100644 new mode 100755 diff --git a/framework/fields/index.php b/framework/fields/index.php old mode 100644 new mode 100755 diff --git a/framework/fields/link/link.php b/framework/fields/link/link.php old mode 100644 new mode 100755 diff --git a/framework/fields/link_color/link_color.php b/framework/fields/link_color/link_color.php old mode 100644 new mode 100755 diff --git a/framework/fields/map/map.php b/framework/fields/map/map.php old mode 100644 new mode 100755 diff --git a/framework/fields/media/media.php b/framework/fields/media/media.php old mode 100644 new mode 100755 diff --git a/framework/fields/notice/notice.php b/framework/fields/notice/notice.php old mode 100644 new mode 100755 diff --git a/framework/fields/number/number.php b/framework/fields/number/number.php old mode 100644 new mode 100755 diff --git a/framework/fields/palette/palette.php b/framework/fields/palette/palette.php old mode 100644 new mode 100755 diff --git a/framework/fields/radio/radio.php b/framework/fields/radio/radio.php old mode 100644 new mode 100755 diff --git a/framework/fields/repeater/repeater.php b/framework/fields/repeater/repeater.php old mode 100644 new mode 100755 diff --git a/framework/fields/select/select.php b/framework/fields/select/select.php old mode 100644 new mode 100755 diff --git a/framework/fields/slider/slider.php b/framework/fields/slider/slider.php old mode 100644 new mode 100755 diff --git a/framework/fields/sortable/sortable.php b/framework/fields/sortable/sortable.php old mode 100644 new mode 100755 diff --git a/framework/fields/sorter/sorter.php b/framework/fields/sorter/sorter.php old mode 100644 new mode 100755 diff --git a/framework/fields/spacing/spacing.php b/framework/fields/spacing/spacing.php old mode 100644 new mode 100755 diff --git a/framework/fields/spinner/spinner.php b/framework/fields/spinner/spinner.php old mode 100644 new mode 100755 diff --git a/framework/fields/subheading/subheading.php b/framework/fields/subheading/subheading.php old mode 100644 new mode 100755 diff --git a/framework/fields/submessage/submessage.php b/framework/fields/submessage/submessage.php old mode 100644 new mode 100755 diff --git a/framework/fields/switcher/switcher.php b/framework/fields/switcher/switcher.php old mode 100644 new mode 100755 diff --git a/framework/fields/tabbed/tabbed.php b/framework/fields/tabbed/tabbed.php old mode 100644 new mode 100755 diff --git a/framework/fields/text/text.php b/framework/fields/text/text.php old mode 100644 new mode 100755 diff --git a/framework/fields/textarea/textarea.php b/framework/fields/textarea/textarea.php old mode 100644 new mode 100755 diff --git a/framework/fields/typography/google-fonts.php b/framework/fields/typography/google-fonts.php old mode 100644 new mode 100755 diff --git a/framework/fields/typography/typography.php b/framework/fields/typography/typography.php old mode 100644 new mode 100755 diff --git a/framework/fields/upload/upload.php b/framework/fields/upload/upload.php old mode 100644 new mode 100755 diff --git a/framework/fields/wp_editor/wp_editor.php b/framework/fields/wp_editor/wp_editor.php old mode 100644 new mode 100755 diff --git a/framework/functions/actions.php b/framework/functions/actions.php old mode 100644 new mode 100755 diff --git a/framework/functions/customize.php b/framework/functions/customize.php old mode 100644 new mode 100755 diff --git a/framework/functions/helpers.php b/framework/functions/helpers.php old mode 100644 new mode 100755 diff --git a/framework/functions/sanitize.php b/framework/functions/sanitize.php old mode 100644 new mode 100755 diff --git a/framework/functions/validate.php b/framework/functions/validate.php old mode 100644 new mode 100755 diff --git a/framework/functions/walker.php b/framework/functions/walker.php old mode 100644 new mode 100755 diff --git a/framework/index.php b/framework/index.php old mode 100644 new mode 100755 diff --git a/framework/languages/zh_CN.mo b/framework/languages/zh_CN.mo old mode 100644 new mode 100755 diff --git a/framework/languages/zh_CN.po b/framework/languages/zh_CN.po old mode 100644 new mode 100755 index 4121676..6c4bfc3 --- a/framework/languages/zh_CN.po +++ b/framework/languages/zh_CN.po @@ -1,672 +1,672 @@ -# Copyright (C) 2021 Wp_china_yes -# This file is distributed under the same license as the Wp_china_yes Framework package. -msgid "" -msgstr "" -"POT-Creation-Date: 2021-06-25 12:32:35+00:00\n" -"PO-Revision-Date: 2021-08-19 12:18+0800\n" -"Last-Translator: Seaton Jiang \n" -"Language-Team: \n" -"Language: zh_CN\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.4.3\n" -"Project-Id-Version: \n" - -#: classes/admin-options.class.php:226 -msgid "Error while saving the changes." -msgstr "保存失败" - -#: classes/admin-options.class.php:286 -msgid "Settings successfully imported." -msgstr "导入成功" - -#: classes/admin-options.class.php:298 classes/admin-options.class.php:314 -msgid "Default settings restored." -msgstr "恢复完成" - -#: classes/admin-options.class.php:385 -msgid "Settings saved." -msgstr "保存成功" - -#: classes/admin-options.class.php:565 -msgid "You have unsaved changes, save your changes!" -msgstr "配置发生改变,请勿忘记保存!" - -#: classes/admin-options.class.php:567 -msgid "show all settings" -msgstr "显示所有设置" - -#: classes/admin-options.class.php:569 fields/icon/icon.php:57 -#: fields/map/map.php:23 -msgid "Search..." -msgstr "请输入关键词" - -#: classes/admin-options.class.php:572 classes/admin-options.class.php:695 -msgid "Save" -msgstr "保存配置" - -#: classes/admin-options.class.php:572 classes/admin-options.class.php:695 -msgid "Saving..." -msgstr "正在保存" - -#: classes/admin-options.class.php:573 classes/admin-options.class.php:696 -msgid "Reset Section" -msgstr "恢复此页" - -#: classes/admin-options.class.php:573 classes/admin-options.class.php:696 -msgid "Are you sure to reset this section options?" -msgstr "单击「确定」进行恢复,当前页面的配置将会丢失!" - -#: classes/admin-options.class.php:574 classes/admin-options.class.php:697 -msgid "Reset All" -msgstr "恢复全部" - -#: classes/admin-options.class.php:574 classes/admin-options.class.php:697 -#: classes/comment-options.class.php:216 classes/metabox-options.class.php:294 -#: fields/backup/backup.php:31 -msgid "Reset" -msgstr "恢复默认" - -#: classes/admin-options.class.php:574 classes/admin-options.class.php:697 -msgid "Are you sure you want to reset all settings to default values?" -msgstr "单击「确定」进行恢复,所有页面的配置都将丢失!" - -#: classes/admin-options.class.php:672 classes/comment-options.class.php:199 -#: classes/metabox-options.class.php:277 fields/button_set/button_set.php:56 -#: fields/checkbox/checkbox.php:76 fields/radio/radio.php:75 -#: fields/select/select.php:113 functions/actions.php:41 -msgid "No data available." -msgstr "没有可用数据" - -#: classes/comment-options.class.php:217 classes/metabox-options.class.php:295 -msgid "update post" -msgstr "更新文章" - -#: classes/comment-options.class.php:217 classes/metabox-options.class.php:295 -msgid "Cancel" -msgstr "取消" - -#: classes/setup.class.php:592 -msgid "Are you sure?" -msgstr "单击「确定」进行下一步操作,该操作可能会丢失部分配置!" - -#: classes/setup.class.php:593 -msgid "Please enter %s or more characters" -msgstr "请输入 %s 或更多字符" - -#: classes/setup.class.php:594 -msgid "Searching..." -msgstr "搜索中..." - -#: classes/setup.class.php:595 -msgid "No results found." -msgstr "未找到结果。" - -#: classes/setup.class.php:696 -msgid "Oops! Not allowed." -msgstr "哎呀!不允许。" - -#: classes/setup.class.php:768 classes/setup.class.php:772 -msgid "Field not found!" -msgstr "没有找到任何数据" - -#: classes/shortcode-options.class.php:253 fields/group/group.php:23 -msgid "Add New" -msgstr "新增" - -#: classes/shortcode-options.class.php:290 functions/actions.php:16 -#: functions/actions.php:68 functions/actions.php:106 functions/actions.php:141 -#: functions/actions.php:170 -msgid "Error: Invalid nonce verification." -msgstr "错误: 无效的nonce验证。" - -#: fields/background/background.php:36 fields/media/media.php:59 -msgid "Not selected" -msgstr "未选择" - -#: fields/background/background.php:72 fields/date/date.php:31 -msgid "From" -msgstr "从" - -#: fields/background/background.php:90 fields/date/date.php:32 -msgid "To" -msgstr "到" - -#: fields/background/background.php:108 -msgid "Direction" -msgstr "方向" - -#: fields/background/background.php:114 -msgid "Gradient Direction" -msgstr "渐变方向" - -#: fields/background/background.php:115 -msgid "⇓ top to bottom" -msgstr "⇓ 从上到下" - -#: fields/background/background.php:116 -msgid "⇒ left to right" -msgstr "⇒从左到右" - -#: fields/background/background.php:117 -msgid "⇘ corner top to right" -msgstr "⇘ 右上角" - -#: fields/background/background.php:118 -msgid "⇙ corner top to left" -msgstr "⇘ 左上角" - -#: fields/background/background.php:161 -msgid "Background Position" -msgstr "背景位置" - -#: fields/background/background.php:162 -msgid "Left Top" -msgstr "左上" - -#: fields/background/background.php:163 -msgid "Left Center" -msgstr "左中" - -#: fields/background/background.php:164 -msgid "Left Bottom" -msgstr "左下" - -#: fields/background/background.php:165 -msgid "Center Top" -msgstr "中上" - -#: fields/background/background.php:166 -msgid "Center Center" -msgstr "居中" - -#: fields/background/background.php:167 -msgid "Center Bottom" -msgstr "中下" - -#: fields/background/background.php:168 -msgid "Right Top" -msgstr "右上" - -#: fields/background/background.php:169 -msgid "Right Center" -msgstr "右中" - -#: fields/background/background.php:170 -msgid "Right Bottom" -msgstr "右下" - -#: fields/background/background.php:184 -msgid "Background Repeat" -msgstr "背景重复" - -#: fields/background/background.php:185 -msgid "Repeat" -msgstr "重复" - -#: fields/background/background.php:186 -msgid "No Repeat" -msgstr "不重复" - -#: fields/background/background.php:187 -msgid "Repeat Horizontally" -msgstr "水平重复" - -#: fields/background/background.php:188 -msgid "Repeat Vertically" -msgstr "垂直重复" - -#: fields/background/background.php:202 -msgid "Background Attachment" -msgstr "背景附件" - -#: fields/background/background.php:203 -msgid "Scroll" -msgstr "滚动" - -#: fields/background/background.php:204 -msgid "Fixed" -msgstr "固定" - -#: fields/background/background.php:218 -msgid "Background Size" -msgstr "背景大小" - -#: fields/background/background.php:219 -msgid "Cover" -msgstr "覆盖" - -#: fields/background/background.php:220 -msgid "Contain" -msgstr "包含" - -#: fields/background/background.php:221 -msgid "Auto" -msgstr "自动" - -#: fields/background/background.php:235 -msgid "Background Origin" -msgstr "背景起源" - -#: fields/background/background.php:236 fields/background/background.php:254 -msgid "Padding Box" -msgstr "框内边距" - -#: fields/background/background.php:237 fields/background/background.php:253 -msgid "Border Box" -msgstr "边框" - -#: fields/background/background.php:238 fields/background/background.php:255 -msgid "Content Box" -msgstr "内容框" - -#: fields/background/background.php:252 -msgid "Background Clip" -msgstr "背景剪辑" - -#: fields/background/background.php:269 -msgid "Background Blend Mode" -msgstr "背景混合模式" - -#: fields/background/background.php:270 fields/link_color/link_color.php:36 -#: fields/typography/typography.php:186 -msgid "Normal" -msgstr "正常" - -#: fields/background/background.php:271 -msgid "Multiply" -msgstr "乘" - -#: fields/background/background.php:272 -msgid "Screen" -msgstr "屏幕" - -#: fields/background/background.php:273 -msgid "Overlay" -msgstr "覆盖" - -#: fields/background/background.php:274 -msgid "Darken" -msgstr "变黑" - -#: fields/background/background.php:275 -msgid "Lighten" -msgstr "减轻" - -#: fields/background/background.php:276 -msgid "Color Dodge" -msgstr "颜色减淡" - -#: fields/background/background.php:277 -msgid "Saturation" -msgstr "饱和度" - -#: fields/background/background.php:278 -msgid "Color" -msgstr "颜色" - -#: fields/background/background.php:279 -msgid "Luminosity" -msgstr "光度" - -#: fields/backup/backup.php:26 -msgid "Import" -msgstr "导入" - -#: fields/backup/backup.php:29 -msgid "Export & Download" -msgstr "导出和下载" - -#: fields/border/border.php:25 fields/spacing/spacing.php:25 -msgid "top" -msgstr "顶部" - -#: fields/border/border.php:26 fields/spacing/spacing.php:26 -msgid "right" -msgstr "右" - -#: fields/border/border.php:27 fields/spacing/spacing.php:27 -msgid "bottom" -msgstr "底部" - -#: fields/border/border.php:28 fields/spacing/spacing.php:28 -msgid "left" -msgstr "左" - -#: fields/border/border.php:29 fields/spacing/spacing.php:29 -msgid "all" -msgstr "所有" - -#: fields/border/border.php:51 fields/typography/typography.php:214 -msgid "Solid" -msgstr "实线" - -#: fields/border/border.php:52 fields/typography/typography.php:217 -msgid "Dashed" -msgstr "虚线" - -#: fields/border/border.php:53 fields/typography/typography.php:216 -msgid "Dotted" -msgstr "点线" - -#: fields/border/border.php:54 fields/typography/typography.php:215 -msgid "Double" -msgstr "双线" - -#: fields/border/border.php:55 -msgid "Inset" -msgstr "插入" - -#: fields/border/border.php:56 -msgid "Outset" -msgstr "开始" - -#: fields/border/border.php:57 -msgid "Groove" -msgstr "凹槽" - -#: fields/border/border.php:58 -msgid "ridge" -msgstr "凸出" - -#: fields/border/border.php:59 fields/typography/typography.php:199 -#: fields/typography/typography.php:213 -msgid "None" -msgstr "无" - -#: fields/dimensions/dimensions.php:22 -msgid "width" -msgstr "宽度" - -#: fields/dimensions/dimensions.php:23 -msgid "height" -msgstr "高度" - -#: fields/gallery/gallery.php:20 -msgid "Add Gallery" -msgstr "添加图库" - -#: fields/gallery/gallery.php:21 -msgid "Edit Gallery" -msgstr "编辑图库" - -#: fields/gallery/gallery.php:22 -msgid "Clear" -msgstr "清除" - -#: fields/group/group.php:35 fields/repeater/repeater.php:27 -msgid "Error: Field ID conflict." -msgstr "错误:字段ID冲突。" - -#: fields/group/group.php:46 fields/group/group.php:87 -#: fields/repeater/repeater.php:48 fields/repeater/repeater.php:76 -msgid "Are you sure to delete this item?" -msgstr "确定要删除这个项目吗?" - -#: fields/group/group.php:121 fields/repeater/repeater.php:89 -msgid "You cannot add more." -msgstr "无法添加更多" - -#: fields/group/group.php:122 fields/repeater/repeater.php:90 -msgid "You cannot remove more." -msgstr "无法删除更多" - -#: fields/icon/icon.php:20 fields/icon/icon.php:53 -msgid "Add Icon" -msgstr "添加图标" - -#: fields/icon/icon.php:21 -msgid "Remove Icon" -msgstr "删除图标" - -#: fields/link/link.php:20 -msgid "Add Link" -msgstr "添加链接" - -#: fields/link/link.php:21 -msgid "Edit Link" -msgstr "编辑链接" - -#: fields/link/link.php:22 -msgid "Remove Link" -msgstr "移除链接" - -#: fields/link_color/link_color.php:37 -msgid "Hover" -msgstr "悬停" - -#: fields/link_color/link_color.php:38 -msgid "Active" -msgstr "启用" - -#: fields/link_color/link_color.php:39 -msgid "Visited" -msgstr "访问" - -#: fields/link_color/link_color.php:40 -msgid "Focus" -msgstr "焦点" - -#: fields/map/map.php:24 -msgid "Latitude" -msgstr "纬度" - -#: fields/map/map.php:25 -msgid "Longitude" -msgstr "经度" - -#: fields/media/media.php:25 fields/upload/upload.php:25 -msgid "Upload" -msgstr "上传" - -#: fields/media/media.php:26 fields/upload/upload.php:26 -msgid "Remove" -msgstr "删除" - -#: fields/sorter/sorter.php:21 -msgid "Enabled" -msgstr "启用" - -#: fields/sorter/sorter.php:22 -msgid "Disabled" -msgstr "禁用" - -#: fields/switcher/switcher.php:20 -msgid "On" -msgstr "启用" - -#: fields/switcher/switcher.php:21 -msgid "Off" -msgstr "禁用" - -#: fields/typography/typography.php:96 -msgid "Font Family" -msgstr "字体" - -#: fields/typography/typography.php:97 -msgid "Select a font" -msgstr "选择字体" - -#: fields/typography/typography.php:105 -msgid "Backup Font Family" -msgstr "备份字体系列" - -#: fields/typography/typography.php:119 fields/typography/typography.php:132 -#: fields/typography/typography.php:145 fields/typography/typography.php:160 -#: fields/typography/typography.php:176 fields/typography/typography.php:189 -#: fields/typography/typography.php:203 fields/typography/typography.php:221 -msgid "Default" -msgstr "默认" - -#: fields/typography/typography.php:130 -msgid "Font Style" -msgstr "字体样式" - -#: fields/typography/typography.php:144 fields/typography/typography.php:145 -msgid "Load Extra Styles" -msgstr "加载额外样式" - -#: fields/typography/typography.php:158 -msgid "Subset" -msgstr "子集" - -#: fields/typography/typography.php:168 -msgid "Text Align" -msgstr "文本对齐" - -#: fields/typography/typography.php:170 -msgid "Inherit" -msgstr "继承" - -#: fields/typography/typography.php:171 -msgid "Left" -msgstr "左侧" - -#: fields/typography/typography.php:172 -msgid "Center" -msgstr "居中" - -#: fields/typography/typography.php:173 -msgid "Right" -msgstr "右侧" - -#: fields/typography/typography.php:174 -msgid "Justify" -msgstr "两端对齐" - -#: fields/typography/typography.php:175 -msgid "Initial" -msgstr "初始" - -#: fields/typography/typography.php:184 -msgid "Font Variant" -msgstr "字体变体" - -#: fields/typography/typography.php:187 -msgid "Small Caps" -msgstr "小写" - -#: fields/typography/typography.php:188 -msgid "All Small Caps" -msgstr "所有字母小写" - -#: fields/typography/typography.php:197 -msgid "Text Transform" -msgstr "文本转换" - -#: fields/typography/typography.php:200 -msgid "Capitalize" -msgstr "大写" - -#: fields/typography/typography.php:201 -msgid "Uppercase" -msgstr "大写" - -#: fields/typography/typography.php:202 -msgid "Lowercase" -msgstr "小写" - -#: fields/typography/typography.php:211 -msgid "Text Decoration" -msgstr "文本装饰" - -#: fields/typography/typography.php:218 -msgid "Wavy" -msgstr "波浪" - -#: fields/typography/typography.php:219 -msgid "Overline" -msgstr "上划线" - -#: fields/typography/typography.php:220 -msgid "Line-through" -msgstr "删除线" - -#: fields/typography/typography.php:233 -msgid "Font Size" -msgstr "字体大小" - -#: fields/typography/typography.php:245 -msgid "Line Height" -msgstr "线高度" - -#: fields/typography/typography.php:257 -msgid "Letter Spacing" -msgstr "字母间距" - -#: fields/typography/typography.php:269 -msgid "Word Spacing" -msgstr "字间距" - -#: fields/typography/typography.php:284 -msgid "Font Color" -msgstr "字体颜色" - -#: fields/typography/typography.php:295 -msgid "Custom Style" -msgstr "自定义样式" - -#: fields/typography/typography.php:362 -msgid "Custom Web Fonts" -msgstr "自定义 Web 字体" - -#: fields/typography/typography.php:368 -msgid "Safe Web Fonts" -msgstr "Web 安全字体" - -#: fields/typography/typography.php:388 -msgid "Google Web Fonts" -msgstr "Google Web 字体" - -#: functions/actions.php:72 functions/actions.php:110 -msgid "Error: Invalid key." -msgstr "错误:无效密钥。" - -#: functions/actions.php:114 -msgid "Error: The response is not a valid JSON response." -msgstr "错误:响应不是有效的 JSON 响应。" - -#: functions/actions.php:174 -msgid "Error: Invalid term ID." -msgstr "错误:无效的项目ID。" - -#: functions/actions.php:180 -msgid "Error: You do not have permission to do that." -msgstr "错误:您无权这样做。" - -#: functions/validate.php:14 functions/validate.php:86 -msgid "Please enter a valid email address." -msgstr "请输入正确的电子邮件地址。" - -#: functions/validate.php:32 functions/validate.php:106 -msgid "Please enter a valid number." -msgstr "请输入有效的数字" - -#: functions/validate.php:50 functions/validate.php:126 -msgid "This field is required." -msgstr "这是必填栏。" - -#: functions/validate.php:68 functions/validate.php:146 -msgid "Please enter a valid URL." -msgstr "请输入有效网址" - -#. Plugin Name of the plugin/theme -msgid "Wp_china_yes Framework" -msgstr "Wp_china_yes Framework" - -#. Plugin URI of the plugin/theme -msgid "http://wp_china_yesframework.com/" -msgstr "http://wp_china_yesframework.com/" - -#. Description of the plugin/theme -msgid "A Simple and Lightweight WordPress Option Framework for Themes and Plugins" -msgstr "一个简单且轻量的 WordPress 主题和插件选项框架" - -#. Author of the plugin/theme -msgid "Wp_china_yes" -msgstr "Wp_china_yes" - -#. Author URI of the plugin/theme -msgid "http://wp_china_yesthemes.com/" -msgstr "http://wp_china_yesthemes.com/" +# Copyright (C) 2021 Wp_china_yes +# This file is distributed under the same license as the Wp_china_yes Framework package. +msgid "" +msgstr "" +"POT-Creation-Date: 2021-06-25 12:32:35+00:00\n" +"PO-Revision-Date: 2021-08-19 12:18+0800\n" +"Last-Translator: Seaton Jiang \n" +"Language-Team: \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.4.3\n" +"Project-Id-Version: \n" + +#: classes/admin-options.class.php:226 +msgid "Error while saving the changes." +msgstr "保存失败" + +#: classes/admin-options.class.php:286 +msgid "Settings successfully imported." +msgstr "导入成功" + +#: classes/admin-options.class.php:298 classes/admin-options.class.php:314 +msgid "Default settings restored." +msgstr "恢复完成" + +#: classes/admin-options.class.php:385 +msgid "Settings saved." +msgstr "保存成功" + +#: classes/admin-options.class.php:565 +msgid "You have unsaved changes, save your changes!" +msgstr "配置发生改变,请勿忘记保存!" + +#: classes/admin-options.class.php:567 +msgid "show all settings" +msgstr "显示所有设置" + +#: classes/admin-options.class.php:569 fields/icon/icon.php:57 +#: fields/map/map.php:23 +msgid "Search..." +msgstr "请输入关键词" + +#: classes/admin-options.class.php:572 classes/admin-options.class.php:695 +msgid "Save" +msgstr "保存配置" + +#: classes/admin-options.class.php:572 classes/admin-options.class.php:695 +msgid "Saving..." +msgstr "正在保存" + +#: classes/admin-options.class.php:573 classes/admin-options.class.php:696 +msgid "Reset Section" +msgstr "恢复此页" + +#: classes/admin-options.class.php:573 classes/admin-options.class.php:696 +msgid "Are you sure to reset this section options?" +msgstr "单击「确定」进行恢复,当前页面的配置将会丢失!" + +#: classes/admin-options.class.php:574 classes/admin-options.class.php:697 +msgid "Reset All" +msgstr "恢复全部" + +#: classes/admin-options.class.php:574 classes/admin-options.class.php:697 +#: classes/comment-options.class.php:216 classes/metabox-options.class.php:294 +#: fields/backup/backup.php:31 +msgid "Reset" +msgstr "恢复默认" + +#: classes/admin-options.class.php:574 classes/admin-options.class.php:697 +msgid "Are you sure you want to reset all settings to default values?" +msgstr "单击「确定」进行恢复,所有页面的配置都将丢失!" + +#: classes/admin-options.class.php:672 classes/comment-options.class.php:199 +#: classes/metabox-options.class.php:277 fields/button_set/button_set.php:56 +#: fields/checkbox/checkbox.php:76 fields/radio/radio.php:75 +#: fields/select/select.php:113 functions/actions.php:41 +msgid "No data available." +msgstr "没有可用数据" + +#: classes/comment-options.class.php:217 classes/metabox-options.class.php:295 +msgid "update post" +msgstr "更新文章" + +#: classes/comment-options.class.php:217 classes/metabox-options.class.php:295 +msgid "Cancel" +msgstr "取消" + +#: classes/setup.class.php:592 +msgid "Are you sure?" +msgstr "单击「确定」进行下一步操作,该操作可能会丢失部分配置!" + +#: classes/setup.class.php:593 +msgid "Please enter %s or more characters" +msgstr "请输入 %s 或更多字符" + +#: classes/setup.class.php:594 +msgid "Searching..." +msgstr "搜索中..." + +#: classes/setup.class.php:595 +msgid "No results found." +msgstr "未找到结果。" + +#: classes/setup.class.php:696 +msgid "Oops! Not allowed." +msgstr "哎呀!不允许。" + +#: classes/setup.class.php:768 classes/setup.class.php:772 +msgid "Field not found!" +msgstr "没有找到任何数据" + +#: classes/shortcode-options.class.php:253 fields/group/group.php:23 +msgid "Add New" +msgstr "新增" + +#: classes/shortcode-options.class.php:290 functions/actions.php:16 +#: functions/actions.php:68 functions/actions.php:106 functions/actions.php:141 +#: functions/actions.php:170 +msgid "Error: Invalid nonce verification." +msgstr "错误: 无效的nonce验证。" + +#: fields/background/background.php:36 fields/media/media.php:59 +msgid "Not selected" +msgstr "未选择" + +#: fields/background/background.php:72 fields/date/date.php:31 +msgid "From" +msgstr "从" + +#: fields/background/background.php:90 fields/date/date.php:32 +msgid "To" +msgstr "到" + +#: fields/background/background.php:108 +msgid "Direction" +msgstr "方向" + +#: fields/background/background.php:114 +msgid "Gradient Direction" +msgstr "渐变方向" + +#: fields/background/background.php:115 +msgid "⇓ top to bottom" +msgstr "⇓ 从上到下" + +#: fields/background/background.php:116 +msgid "⇒ left to right" +msgstr "⇒从左到右" + +#: fields/background/background.php:117 +msgid "⇘ corner top to right" +msgstr "⇘ 右上角" + +#: fields/background/background.php:118 +msgid "⇙ corner top to left" +msgstr "⇘ 左上角" + +#: fields/background/background.php:161 +msgid "Background Position" +msgstr "背景位置" + +#: fields/background/background.php:162 +msgid "Left Top" +msgstr "左上" + +#: fields/background/background.php:163 +msgid "Left Center" +msgstr "左中" + +#: fields/background/background.php:164 +msgid "Left Bottom" +msgstr "左下" + +#: fields/background/background.php:165 +msgid "Center Top" +msgstr "中上" + +#: fields/background/background.php:166 +msgid "Center Center" +msgstr "居中" + +#: fields/background/background.php:167 +msgid "Center Bottom" +msgstr "中下" + +#: fields/background/background.php:168 +msgid "Right Top" +msgstr "右上" + +#: fields/background/background.php:169 +msgid "Right Center" +msgstr "右中" + +#: fields/background/background.php:170 +msgid "Right Bottom" +msgstr "右下" + +#: fields/background/background.php:184 +msgid "Background Repeat" +msgstr "背景重复" + +#: fields/background/background.php:185 +msgid "Repeat" +msgstr "重复" + +#: fields/background/background.php:186 +msgid "No Repeat" +msgstr "不重复" + +#: fields/background/background.php:187 +msgid "Repeat Horizontally" +msgstr "水平重复" + +#: fields/background/background.php:188 +msgid "Repeat Vertically" +msgstr "垂直重复" + +#: fields/background/background.php:202 +msgid "Background Attachment" +msgstr "背景附件" + +#: fields/background/background.php:203 +msgid "Scroll" +msgstr "滚动" + +#: fields/background/background.php:204 +msgid "Fixed" +msgstr "固定" + +#: fields/background/background.php:218 +msgid "Background Size" +msgstr "背景大小" + +#: fields/background/background.php:219 +msgid "Cover" +msgstr "覆盖" + +#: fields/background/background.php:220 +msgid "Contain" +msgstr "包含" + +#: fields/background/background.php:221 +msgid "Auto" +msgstr "自动" + +#: fields/background/background.php:235 +msgid "Background Origin" +msgstr "背景起源" + +#: fields/background/background.php:236 fields/background/background.php:254 +msgid "Padding Box" +msgstr "框内边距" + +#: fields/background/background.php:237 fields/background/background.php:253 +msgid "Border Box" +msgstr "边框" + +#: fields/background/background.php:238 fields/background/background.php:255 +msgid "Content Box" +msgstr "内容框" + +#: fields/background/background.php:252 +msgid "Background Clip" +msgstr "背景剪辑" + +#: fields/background/background.php:269 +msgid "Background Blend Mode" +msgstr "背景混合模式" + +#: fields/background/background.php:270 fields/link_color/link_color.php:36 +#: fields/typography/typography.php:186 +msgid "Normal" +msgstr "正常" + +#: fields/background/background.php:271 +msgid "Multiply" +msgstr "乘" + +#: fields/background/background.php:272 +msgid "Screen" +msgstr "屏幕" + +#: fields/background/background.php:273 +msgid "Overlay" +msgstr "覆盖" + +#: fields/background/background.php:274 +msgid "Darken" +msgstr "变黑" + +#: fields/background/background.php:275 +msgid "Lighten" +msgstr "减轻" + +#: fields/background/background.php:276 +msgid "Color Dodge" +msgstr "颜色减淡" + +#: fields/background/background.php:277 +msgid "Saturation" +msgstr "饱和度" + +#: fields/background/background.php:278 +msgid "Color" +msgstr "颜色" + +#: fields/background/background.php:279 +msgid "Luminosity" +msgstr "光度" + +#: fields/backup/backup.php:26 +msgid "Import" +msgstr "导入" + +#: fields/backup/backup.php:29 +msgid "Export & Download" +msgstr "导出和下载" + +#: fields/border/border.php:25 fields/spacing/spacing.php:25 +msgid "top" +msgstr "顶部" + +#: fields/border/border.php:26 fields/spacing/spacing.php:26 +msgid "right" +msgstr "右" + +#: fields/border/border.php:27 fields/spacing/spacing.php:27 +msgid "bottom" +msgstr "底部" + +#: fields/border/border.php:28 fields/spacing/spacing.php:28 +msgid "left" +msgstr "左" + +#: fields/border/border.php:29 fields/spacing/spacing.php:29 +msgid "all" +msgstr "所有" + +#: fields/border/border.php:51 fields/typography/typography.php:214 +msgid "Solid" +msgstr "实线" + +#: fields/border/border.php:52 fields/typography/typography.php:217 +msgid "Dashed" +msgstr "虚线" + +#: fields/border/border.php:53 fields/typography/typography.php:216 +msgid "Dotted" +msgstr "点线" + +#: fields/border/border.php:54 fields/typography/typography.php:215 +msgid "Double" +msgstr "双线" + +#: fields/border/border.php:55 +msgid "Inset" +msgstr "插入" + +#: fields/border/border.php:56 +msgid "Outset" +msgstr "开始" + +#: fields/border/border.php:57 +msgid "Groove" +msgstr "凹槽" + +#: fields/border/border.php:58 +msgid "ridge" +msgstr "凸出" + +#: fields/border/border.php:59 fields/typography/typography.php:199 +#: fields/typography/typography.php:213 +msgid "None" +msgstr "无" + +#: fields/dimensions/dimensions.php:22 +msgid "width" +msgstr "宽度" + +#: fields/dimensions/dimensions.php:23 +msgid "height" +msgstr "高度" + +#: fields/gallery/gallery.php:20 +msgid "Add Gallery" +msgstr "添加图库" + +#: fields/gallery/gallery.php:21 +msgid "Edit Gallery" +msgstr "编辑图库" + +#: fields/gallery/gallery.php:22 +msgid "Clear" +msgstr "清除" + +#: fields/group/group.php:35 fields/repeater/repeater.php:27 +msgid "Error: Field ID conflict." +msgstr "错误:字段ID冲突。" + +#: fields/group/group.php:46 fields/group/group.php:87 +#: fields/repeater/repeater.php:48 fields/repeater/repeater.php:76 +msgid "Are you sure to delete this item?" +msgstr "确定要删除这个项目吗?" + +#: fields/group/group.php:121 fields/repeater/repeater.php:89 +msgid "You cannot add more." +msgstr "无法添加更多" + +#: fields/group/group.php:122 fields/repeater/repeater.php:90 +msgid "You cannot remove more." +msgstr "无法删除更多" + +#: fields/icon/icon.php:20 fields/icon/icon.php:53 +msgid "Add Icon" +msgstr "添加图标" + +#: fields/icon/icon.php:21 +msgid "Remove Icon" +msgstr "删除图标" + +#: fields/link/link.php:20 +msgid "Add Link" +msgstr "添加链接" + +#: fields/link/link.php:21 +msgid "Edit Link" +msgstr "编辑链接" + +#: fields/link/link.php:22 +msgid "Remove Link" +msgstr "移除链接" + +#: fields/link_color/link_color.php:37 +msgid "Hover" +msgstr "悬停" + +#: fields/link_color/link_color.php:38 +msgid "Active" +msgstr "启用" + +#: fields/link_color/link_color.php:39 +msgid "Visited" +msgstr "访问" + +#: fields/link_color/link_color.php:40 +msgid "Focus" +msgstr "焦点" + +#: fields/map/map.php:24 +msgid "Latitude" +msgstr "纬度" + +#: fields/map/map.php:25 +msgid "Longitude" +msgstr "经度" + +#: fields/media/media.php:25 fields/upload/upload.php:25 +msgid "Upload" +msgstr "上传" + +#: fields/media/media.php:26 fields/upload/upload.php:26 +msgid "Remove" +msgstr "删除" + +#: fields/sorter/sorter.php:21 +msgid "Enabled" +msgstr "启用" + +#: fields/sorter/sorter.php:22 +msgid "Disabled" +msgstr "禁用" + +#: fields/switcher/switcher.php:20 +msgid "On" +msgstr "启用" + +#: fields/switcher/switcher.php:21 +msgid "Off" +msgstr "禁用" + +#: fields/typography/typography.php:96 +msgid "Font Family" +msgstr "字体" + +#: fields/typography/typography.php:97 +msgid "Select a font" +msgstr "选择字体" + +#: fields/typography/typography.php:105 +msgid "Backup Font Family" +msgstr "备份字体系列" + +#: fields/typography/typography.php:119 fields/typography/typography.php:132 +#: fields/typography/typography.php:145 fields/typography/typography.php:160 +#: fields/typography/typography.php:176 fields/typography/typography.php:189 +#: fields/typography/typography.php:203 fields/typography/typography.php:221 +msgid "Default" +msgstr "默认" + +#: fields/typography/typography.php:130 +msgid "Font Style" +msgstr "字体样式" + +#: fields/typography/typography.php:144 fields/typography/typography.php:145 +msgid "Load Extra Styles" +msgstr "加载额外样式" + +#: fields/typography/typography.php:158 +msgid "Subset" +msgstr "子集" + +#: fields/typography/typography.php:168 +msgid "Text Align" +msgstr "文本对齐" + +#: fields/typography/typography.php:170 +msgid "Inherit" +msgstr "继承" + +#: fields/typography/typography.php:171 +msgid "Left" +msgstr "左侧" + +#: fields/typography/typography.php:172 +msgid "Center" +msgstr "居中" + +#: fields/typography/typography.php:173 +msgid "Right" +msgstr "右侧" + +#: fields/typography/typography.php:174 +msgid "Justify" +msgstr "两端对齐" + +#: fields/typography/typography.php:175 +msgid "Initial" +msgstr "初始" + +#: fields/typography/typography.php:184 +msgid "Font Variant" +msgstr "字体变体" + +#: fields/typography/typography.php:187 +msgid "Small Caps" +msgstr "小写" + +#: fields/typography/typography.php:188 +msgid "All Small Caps" +msgstr "所有字母小写" + +#: fields/typography/typography.php:197 +msgid "Text Transform" +msgstr "文本转换" + +#: fields/typography/typography.php:200 +msgid "Capitalize" +msgstr "大写" + +#: fields/typography/typography.php:201 +msgid "Uppercase" +msgstr "大写" + +#: fields/typography/typography.php:202 +msgid "Lowercase" +msgstr "小写" + +#: fields/typography/typography.php:211 +msgid "Text Decoration" +msgstr "文本装饰" + +#: fields/typography/typography.php:218 +msgid "Wavy" +msgstr "波浪" + +#: fields/typography/typography.php:219 +msgid "Overline" +msgstr "上划线" + +#: fields/typography/typography.php:220 +msgid "Line-through" +msgstr "删除线" + +#: fields/typography/typography.php:233 +msgid "Font Size" +msgstr "字体大小" + +#: fields/typography/typography.php:245 +msgid "Line Height" +msgstr "线高度" + +#: fields/typography/typography.php:257 +msgid "Letter Spacing" +msgstr "字母间距" + +#: fields/typography/typography.php:269 +msgid "Word Spacing" +msgstr "字间距" + +#: fields/typography/typography.php:284 +msgid "Font Color" +msgstr "字体颜色" + +#: fields/typography/typography.php:295 +msgid "Custom Style" +msgstr "自定义样式" + +#: fields/typography/typography.php:362 +msgid "Custom Web Fonts" +msgstr "自定义 Web 字体" + +#: fields/typography/typography.php:368 +msgid "Safe Web Fonts" +msgstr "Web 安全字体" + +#: fields/typography/typography.php:388 +msgid "Google Web Fonts" +msgstr "Google Web 字体" + +#: functions/actions.php:72 functions/actions.php:110 +msgid "Error: Invalid key." +msgstr "错误:无效密钥。" + +#: functions/actions.php:114 +msgid "Error: The response is not a valid JSON response." +msgstr "错误:响应不是有效的 JSON 响应。" + +#: functions/actions.php:174 +msgid "Error: Invalid term ID." +msgstr "错误:无效的项目ID。" + +#: functions/actions.php:180 +msgid "Error: You do not have permission to do that." +msgstr "错误:您无权这样做。" + +#: functions/validate.php:14 functions/validate.php:86 +msgid "Please enter a valid email address." +msgstr "请输入正确的电子邮件地址。" + +#: functions/validate.php:32 functions/validate.php:106 +msgid "Please enter a valid number." +msgstr "请输入有效的数字" + +#: functions/validate.php:50 functions/validate.php:126 +msgid "This field is required." +msgstr "这是必填栏。" + +#: functions/validate.php:68 functions/validate.php:146 +msgid "Please enter a valid URL." +msgstr "请输入有效网址" + +#. Plugin Name of the plugin/theme +msgid "Wp_china_yes Framework" +msgstr "Wp_china_yes Framework" + +#. Plugin URI of the plugin/theme +msgid "http://wp_china_yesframework.com/" +msgstr "http://wp_china_yesframework.com/" + +#. Description of the plugin/theme +msgid "A Simple and Lightweight WordPress Option Framework for Themes and Plugins" +msgstr "一个简单且轻量的 WordPress 主题和插件选项框架" + +#. Author of the plugin/theme +msgid "Wp_china_yes" +msgstr "Wp_china_yes" + +#. Author URI of the plugin/theme +msgid "http://wp_china_yesthemes.com/" +msgstr "http://wp_china_yesthemes.com/" diff --git a/helpers.php b/helpers.php old mode 100644 new mode 100755 index c5fa9c0..2b770f1 --- a/helpers.php +++ b/helpers.php @@ -20,6 +20,7 @@ function get_settings() { 'plane' => 'off', 'plane_rule' => [], 'monitor' => true, + 'memory' => true, 'hide' => false, 'custom_name' => 'WP-China-Yes', ] ); From f9a7968c00cb7572c8ee61663091d276e625f3f9 Mon Sep 17 00:00:00 2001 From: feng Date: Thu, 2 Jan 2025 15:28:13 +0800 Subject: [PATCH 13/18] =?UTF-8?q?=E8=A1=A5=E5=85=85=E7=89=88=E6=9D=83?= =?UTF-8?q?=E5=A3=B0=E6=98=8E=E5=8F=8A=E6=9B=B4=E6=96=B0=E6=97=A5=E5=BF=97?= =?UTF-8?q?=20TXT?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- changelog.txt | 325 ++++++++++++++++++++++++++++++++++++++++++++++++++ copyright.txt | 28 +++++ 2 files changed, 353 insertions(+) create mode 100644 changelog.txt create mode 100644 copyright.txt diff --git a/changelog.txt b/changelog.txt new file mode 100644 index 0000000..b4ecb47 --- /dev/null +++ b/changelog.txt @@ -0,0 +1,325 @@ +IMPORTANT: +----------------------------------------------------------------------------------------- +Please be sure to read the Important Update Notes before you update: +https://wpcy.com/document/important-update-information/ +We are always proactive in preventing security issues, however nobody can assume they will never come up. +This is why we highly recommend to stay up to date with each new theme version and plugins. + +重要提示: +----------------------------------------------------------------------------------------- +在更新之前,请务必阅读重要更新说明: +https://wpcy.com/document/important-update-information/ + +我们始终致力于积极防范安全问题,但没有人能完全避免潜在风险。 +因此,我们强烈建议您密切关注每个主题和插件的新版本更新,以确保安全性和功能的最佳状态。 +----------------------------------------------------------------------------------------- +v3.8 - 2025-01-01 +----------------------------------------------------------------------------------------- + +* 文派叶子 v3.8 重大更新!全新UI 设计更接近 WordPress 原生体验。 + +1. 替换业务域名 WP-China-Yes.com 为新域名 WPCY.COM ; +2. 修复 adminCDN 支持 jsDelivr 加速无效等问题; +3. 新增 Bootstrap CDN 转接至 adminCDN 加速支持; +4. 新增 Windfonts 中文排版优化:支持段首空格 2em; +5. 新增 Windfonts 中文排版优化:支持文本内容对齐; +6. 新增 [脉云维护] 菜单并支持WP系统状态监控,可在页脚位置显示内存、CPU用量等信息; +7. 新增 [欢迎使用] 用户引导页面,更清晰的功能指导和简介。 +8. 新增 [建站工具] 文派·寻鹿建站套件展示页面,内容待完善。 +9. 优化 [萌芽加速] 设置,与 WordPress 程序端加速选项分离便于添加后续项目; +10. 优化 [关于插件] 页面更简约的赞助商 Logo 和贡献者名单展示。 +11. 补充 changelog.txt 文本文件,跟随插件副本分发。 +12. 补充 copyright.txt 版权文件,跟随插件副本分发。 + +----------------------------------------------------------------------------------------- +v3.7.1 - 2024-11-19 +----------------------------------------------------------------------------------------- + +1. 性能优化 +2. 修复监控无法关闭的问题 + +----------------------------------------------------------------------------------------- +v3.6.5 - 2024-08-23 +----------------------------------------------------------------------------------------- + +1. 优化 CLI 判断 +2. 回退替换钩子修改 + +----------------------------------------------------------------------------------------- +v3.6.4 - 2024-08-23 +----------------------------------------------------------------------------------------- + +1. WP-CLI 下不运行 adminCDN 部分,防止影响缓冲区。 +2. 部分文案调整支持多语言。 + +----------------------------------------------------------------------------------------- +v3.6.3 - 2024-08-23 +----------------------------------------------------------------------------------------- + +1. 为自动监控功能添加开关 +2. adminCDN 支持 jsDelivr 加速 +3. Windfonts 支持优化模式开关 + +**adminCDN 的 jsd 加速默认屏蔽 gh 端点,如有主题插件作者需要使用请联系加白。** + +----------------------------------------------------------------------------------------- +v3.6.2 - 2024-03-09 +----------------------------------------------------------------------------------------- + +1. UI 重构 +2. 修复市场加速导致 Beta 测试插件失效的问题 +3. 更新接口及测试 URL + +----------------------------------------------------------------------------------------- +v3.6.1 - 2024-03-08 +----------------------------------------------------------------------------------------- + +1. 重构全部代码 +2. 应用市场调整为[文派开源](https://wenpai.org) +3. 加速服务调整为[萌芽加速](https://admincdn.com) +4. 头像调整为[初认头像](https://cravatar.com) +5. 支持自动检测节点可用性 + +----------------------------------------------------------------------------------------- +发展历史 +----------------------------------------------------------------------------------------- + +- 2019 年 2022 年 @薇晓朵 为 WP 中文本地化项目提供各项赞助支持,期间陆续数十万的资金。 +- 2022 年起至 2023 年 3 月,原有 LitePress 及 WP 中文本土化社区项目进入维护状态,不再活跃; +- 2023 年 3 月由 @薇晓朵(Weixiaoduo.com)联系原项目团队咨询相关发展情况,得知已无继续开发此项目的意向。 +- 此时文派开源(WenPai.org)项目也处于筹备启动基础设施建设阶段。 + +----------------------------------------------------------------------------------------- +项目重启 +----------------------------------------------------------------------------------------- + +- 了解到此项目实际情况并商议后,文派(广州)科技有限公司决定收购此项目并启动旗下————文派开源(WenPai.org)。 +- 2023 年 4 月 10 日文派科技公布收购 LitePress 社区声明 https://wpcy.com/news/acquisition-announcement +- 2023 年 4 月 25 日 WP-China-Yes 发布中文品牌词——“文派叶子”,寓意生生不息。 +- 2023 年 5 月 LitePress 、Cravatar 、WP-China-Yes 等项目重启,进入正式交接重启开发阶段。 + +----------------------------------------------------------------------------------------- +投资机构:汉中菲比斯网络技术有限公司 +----------------------------------------------------------------------------------------- + +投资项目:文派(WordPress)中国生态基础设施建设、文派开源中国本土化 WordPress 发行版及社区建设。 +投资金额:一百万人民币(一期) +基础资源:三百个 WP 行业属性稀缺域名资源,以及 “文派” 品牌、商标、软著、专利等知识产权。 + +----------------------------------------------------------------------------------------- +委托机构:文派(广州)科技有限公司 +----------------------------------------------------------------------------------------- + +技术支持:薇晓朵团队 - Weixiaoduo.com +营销支持:莫蒂奇团队 - Modiqi.com + +----------------------------------------------------------------------------------------- + +oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo +oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo +oooooooooooooooooooooooooooooooooooooooooo&&B&oooooooooooooooooooooooooooooooooooooooo +oooooooooooooooooooooooooooooooooooo#B&oo&#B#ooooooooooooooooooooooooooooooooooooooooo +oooooooooooooooooooooooooooooooooooBG&o#BBB&oooooooooooooooooooooooooooooooooooooooooo +ooooooooooooooooooooooooooooooooo#BGGBG#&ooooooooooooooooooooooooooooooooooooooooooooo +oooooooooooooooooooooooooooooo#BGGGGGG&ooooooooooooooooooooooooooooooooooooooooooooooo +oooooooooooooooooooooooooooooo&&#GGGGGB&oooooooooooooooooooooooooooooooooooooooooooooo +oooooooooooooooooooooooooooooooooBGGGGGGGB##&&&&&#####&&oooooooooooooooooooooooooooooo +ooooooooooooooooooooooooooooooooo&GGGGGGGGGGGGGGGGGGGGGGBB#ooooooooooooooooooooooooooo +oooooooooooooooooooooooooooooooooo#GGGGGGGGGGGGGGGGGGGGGG&#ooooooooooooooooooooooooooo +ooooooooooooooooooooooooooooooooooo#GGGGGGGGGGGGGGGGGGGG#ooooooooooooooooooooooooooooo +ooooooooooooooooooooooooooooooooooooo#BGGGGGGGBB##&BGGGGB&oooooooooooooooooooooooooooo +oooooooooooooooooooooooooooooooooooooooGGG&ooooooooo#GGBBGB&oooooooooooooooooooooooooo +oooooooooooooooooooooooooooooooooooooo#GBGooooooooooo&GBooG#oooooooooooooooooooooooooo +ooooooooooooooooooooooooooooooooooooooooG#oooooooooooB#ooo##oooooooooooooooooooooooooo +ooooooooooooooooooooooooooooooooooooooo#G#ooooooooooo&G&oo##oooooooooooooooooooooooooo +oooooooooooooooooooooooooooooooooooooooB#&&oooooooooB#oooo##oooooooooooooooooooooooooo +oooooooooooooooooooooooooooooooooooooooooooooooooooo#&oooooooooooooooooooooooooooooooo +oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo +oooooooooooooooooooooooooo##———— www.feibisi.com ————##ooooooooooooooooooooooooooooooo +ooooooooooooooooooooooooooo####菲比斯 · 品味简单生活####ooooooooooooooooooooooooooooooo +oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo +oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo +ooooooooooo(此项目于 2023 年 4 月重启,由菲比斯公司提供了初始一百万启动投资。)ooooooooooo +oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo +oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo + +----------------------------------------------------------------------------------------- +2022 年 ~ 2023 年 3 月 +----------------------------------------------------------------------------------------- + +此项目及 LitePress 社区发展已停滞,前景不明。 + +----------------------------------------------------------------------------------------- +v3.5.5 - 2022-11-15 此为前团队发布最后一版。 +----------------------------------------------------------------------------------------- + +修复 +1. 仓库源替换代码优先级过低被覆盖的问题 + +重构 +1. 去掉 CDNJS 功能; +2. 修改 WP China 标志为 LitePress +3. 替换各种加速节点链接为 LitePress 维护的地址 + +----------------------------------------------------------------------------------------- +v3.5.4 - 2024-03-08 +----------------------------------------------------------------------------------------- + +特性 +1. CDNJS加速功能 + +----------------------------------------------------------------------------------------- +v3.5.3 - 2024-03-08 +----------------------------------------------------------------------------------------- + +修复 +1. 核心功能无法在 Cron 环境中运行的问题 + +----------------------------------------------------------------------------------------- +v3.5.2 - 2024-03-08 +----------------------------------------------------------------------------------------- + +修复 +1. 留下测试代码 +2. 当未拦截到 API 请求时直接返回 WordPress 到底是什么响应值,而不是 false,该问题会导致其他插件无法调用 pre_http_request 过滤器 + +----------------------------------------------------------------------------------------- +v3.5.1 - 2021-10-01 +----------------------------------------------------------------------------------------- + +修复 +1. 不为 LitePress 替换后台资源 +2. 完善Cravatar头像夺取机制 + +----------------------------------------------------------------------------------------- +v3.5.0 - 2021-09-05 +----------------------------------------------------------------------------------------- + +特性 +1. 将“本土应用市场”更改为“LitePress 应用市场”,进而对接 LitePress 翻译平台 +2. “参与翻译”按钮全局生效 + +----------------------------------------------------------------------------------------- +v3.4.1 - 2021-08-15 +----------------------------------------------------------------------------------------- + +修复 +1. 不为处于RC版本的WordPress替换后台静态资源 +2. 替换默认头像处的Gravatar字样 +3. 替换个人资料卡中的头像设置说明 + +----------------------------------------------------------------------------------------- +v3.4.0 - 2021-07-27 +----------------------------------------------------------------------------------------- + +特性 +1. 将 Gravatar 头像替换方案由反代更改为 Cravatar(任何开发者均可在自己的产品中集成 Cravatar 头像服务) +修复 +2. 修复了某些情况下无法替换 Gravatar 头像的问题 + + +----------------------------------------------------------------------------------------- +v3.4.0 - 2021-07-27 +----------------------------------------------------------------------------------------- + +1. 修复:管理后台加速功能因用户反馈问题较多,故暂时默认关闭 +2. 修复:后台加速功能误对处于测试状态的WordPress起作用的问题 + +----------------------------------------------------------------------------------------- +v3.3.1 - 2020-10-28 +----------------------------------------------------------------------------------------- + +1. 修复:管理后台加速功能因用户反馈问题较多,故暂时默认关闭 +2. 修复:后台加速功能误对处于测试状态的WordPress起作用的问题 + +----------------------------------------------------------------------------------------- +v3.3.0 - 2020-10-14 +----------------------------------------------------------------------------------------- + +1. 特性:当使用“本土应用市场”时为插件列表中的所有插件追加“翻译校准”链接 + +----------------------------------------------------------------------------------------- +v3.2.0 - 2020-10-07 +----------------------------------------------------------------------------------------- + +1. 特性:支持谷歌前端公共库加速 +2. 特性:细化管理界面设置的颗粒度 + +----------------------------------------------------------------------------------------- +v3.1.3 - 2020-09-18 +----------------------------------------------------------------------------------------- + +1. 修复:多站点模式下可以在子站点激活插件的BUG +2. 修复:多站点模式下无法保存配置的BUG + +----------------------------------------------------------------------------------------- +v3.1.2 - 2020-08-30 +----------------------------------------------------------------------------------------- + +1. 修复:兼容WordPress多站点模式(只在主控上显示设置项) +2. 修复:插件更新后设置项被覆盖的问题 + +----------------------------------------------------------------------------------------- +v3.1.1 - 2020-08-27 +----------------------------------------------------------------------------------------- + +特性 +1. 增加管理后台加速功能,原理是将WordPress核心依赖的静态文件切换为公共资源,这将极大的加快管理后台访问速度^_^ +2. 增加”不接管应用市场“选项 + +修复 +1. 对AJAX加载的场景做了较为详尽的适配,节约每一点服务器资源 + +----------------------------------------------------------------------------------------- +v3.0.0 - 2020-08-15 +----------------------------------------------------------------------------------------- + +1. 使用WordPress默认组件重写设置页面 +2. 增加Gravatar加速支持 +3. 增加谷歌字体加速支持 +4. 对接本土应用市场,这个应用市场与本土翻译平台深度整合,可以大家进行基于AI翻译+人工辅助调整的全量汉化支持(技术试验) +5. “仓库源-主源”更名为“官方应用市场镜像” +6. 移除“自定义源”功能 +7. 移除“资源” +8. 删除仪表盘赞助商列表 + +----------------------------------------------------------------------------------------- +v2.1.0 - 2020-04-11 +----------------------------------------------------------------------------------------- + +1. 取消社区源选择功能,只保留主源和备源 +2. 禁止设置页的tab +3. 在仪表盘上放置了赞助者名单展示小部件(可关闭) + +----------------------------------------------------------------------------------------- +v2.0.3 - 2020-03-20 +----------------------------------------------------------------------------------------- + +1. 修复修改仓库源后刷新页面无法正确展示源信息的问题 + +----------------------------------------------------------------------------------------- +v2.0.2 - 2020-03-18 +----------------------------------------------------------------------------------------- + +1. RepairAPI接口编写的不规范的问题#7 + +----------------------------------------------------------------------------------------- +v2.0.1 - 2020-03-18 +----------------------------------------------------------------------------------------- + +1. 修复插件无法在使用子目录部署的 WordPress 上运行的问题#6 + +----------------------------------------------------------------------------------------- +v2.0.0 - 2020-03-12 +----------------------------------------------------------------------------------------- + +从这个版本开始WP-China-是第一次拥有了图形化设置界面 + +1. 社区资源 +2. 来源支持 + +----------------------------------------------------------------------------------------- +v1.0.1 - 2020-03-12 +----------------------------------------------------------------------------------------- + +1. 核心功能 diff --git a/copyright.txt b/copyright.txt new file mode 100644 index 0000000..558b6d2 --- /dev/null +++ b/copyright.txt @@ -0,0 +1,28 @@ +----------------------------------------------------------------------------------------- +**Copyright © 2025 WenPai.cn (Guangzhou) Technology Co., Ltd.** +----------------------------------------------------------------------------------------- + +**Compliance Terms** +Everyone is free to use Wenpai open-source software. However, in China, when using Wenpai software, you must adhere to the GPL open-source license, respect the intellectual property rights of others, and prioritize compliance with Chinese laws in case of any conflicts. + +**Fork Declaration** +To ensure the long-term availability of various Wenpai (WordPress) infrastructure components, individuals with the necessary capabilities are welcome to establish their own service sources or fork Wenpai Leaf 🍃 (WPCY) to create their own versions. + +**The Only Requirement:** +While strictly adhering to the GPL license, you must respect all lawful rights of Wenpai Technology, including (but not limited to) copyrights, trademarks, patents, intellectual property, goodwill, and more. + +----------------------------------------------------------------------------------------- +**版权所有 © 2025 年 文派(广州)科技有限公司** +----------------------------------------------------------------------------------------- + +**合规条款** +任何人都可以自由使用文派开源软件,但在中国,当您使用文派软件时,您应在遵守 GPL 开源协议的同时,尊重他人的知识产权,同时有违背中国法律的情况时皆以中国法律为准。 + +**分叉声明** +为保障各项文派 (WordPress) 基础设施的长久可用性,欢迎有能力的人自建各类服务源以及分叉文派叶子🍃(WPCY)来制作您自己的版本; + +**唯一要求:** +在严格遵守 GPL 协议的前提下,尊重文派科技的各项合法权益,包括 (不限于) 版权、商标、专利、知识产权、商誉等… + + + From 6083aa805749796dbe558c150b0520009de8f7b0 Mon Sep 17 00:00:00 2001 From: feng Date: Wed, 5 Feb 2025 10:39:35 +0800 Subject: [PATCH 14/18] Update readme.md --- readme.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/readme.md b/readme.md index fd4c790..0a32308 100644 --- a/readme.md +++ b/readme.md @@ -46,3 +46,7 @@ ## 赞助商 + +--- + +**Copyright © 2025 · WPCY.COM , All Rights Reserved. 文派 (广州) 科技有限公司;** From bfec4c147e7c56fab5babdcd02c35af0a9f87433 Mon Sep 17 00:00:00 2001 From: feng Date: Wed, 5 Feb 2025 10:58:27 +0800 Subject: [PATCH 15/18] Update readme.md --- readme.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/readme.md b/readme.md index 0a32308..1fc4ced 100644 --- a/readme.md +++ b/readme.md @@ -1,14 +1,15 @@ -# WP-China-Yes +## 开源 WordPress 中国网站加速器。 -开源 WordPress 中国网站加速器。 - -文派叶子 🍃(WP-China-Yes)是中国 WordPress 生态基础设施软件,犹如落叶新芽,生生不息。 +文派叶子 🍃(WPCY.COM)是中国 WordPress 生态基础设施软件,犹如落叶新芽,生生不息。专为解决困扰了中国互联网数十年的特色问题而存在。此为文派开源(WenPai.org)的一部分。 - + ## 简介 -文派叶子 🍃(WPCY)是一款不可多得的 WordPress 系统底层优化和生态基础设施软件。项目起源于 2019 年,专为解决困扰了中国互联网数十年的特色问题而存在。此为文派开源(WenPai.org)的一部分。 +文派叶子 🍃(WPCY.COM)是一款不可多得的 WordPress 系统底层优化和生态基础设施软件。文派(WordPress)中国本土化项目始于 2019 年,由 文派叶子🍃(WPCY) 插件开启,其前身为 WP-China-Yes。 + +2023 年 4 月,文派科技完成对该项目的收购,并对其进行了全面的品牌重塑。 + ## 功能 From 8beff870f24e65108e7a3f346e2a8b1e48a99d3f Mon Sep 17 00:00:00 2001 From: feibisi <666641+feibisi@users.noreply.github.com> Date: Wed, 5 Feb 2025 03:05:14 +0000 Subject: [PATCH 16/18] docs: Update CHANGELOG --- CHANGELOG.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d8c5dfa..35fbcc0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,23 @@ All notable changes to `WP-China-Yes` will be documented in this file. +## v3.8 - 2025-02-05 + +* 文派叶子 v3.8 重大更新!全新UI 设计更接近 WordPress 原生体验。 + +1. 替换业务域名 WP-China-Yes.com 为新域名 WPCY.COM ; +2. 修复 adminCDN 支持 jsDelivr 加速无效等问题; +3. 新增 Bootstrap CDN 转接至 adminCDN 加速支持; +4. 新增 Windfonts 中文排版优化:支持段首空格 2em; +5. 新增 Windfonts 中文排版优化:支持文本内容对齐; +6. 新增 [脉云维护] 菜单并支持WP系统状态监控,可在页脚位置显示内存、CPU用量等信息; +7. 新增 [欢迎使用] 用户引导页面,更清晰的功能指导和简介。 +8. 新增 [建站工具] 文派·寻鹿建站套件展示页面,内容待完善。 +9. 优化 [萌芽加速] 设置,与 WordPress 程序端加速选项分离便于添加后续项目; +10. 优化 [关于插件] 页面更简约的赞助商 Logo 和贡献者名单展示。 +11. 补充 changelog.txt 文本文件,跟随插件副本分发。 +12. 补充 copyright.txt 版权文件,跟随插件副本分发。 + ## v3.7.1 - 2024-11-19 1. 性能优化 From 70af2db0f5612e71ab71c03b46cb4e14a772dcc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8E=AB=E8=92=82=E5=A5=87?= <130886204+modiqi@users.noreply.github.com> Date: Thu, 8 May 2025 01:47:19 +0800 Subject: [PATCH 17/18] Update wp-china-yes.php MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更新插件名称 --- wp-china-yes.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wp-china-yes.php b/wp-china-yes.php index 597557f..9f05e67 100755 --- a/wp-china-yes.php +++ b/wp-china-yes.php @@ -1,6 +1,6 @@ Date: Tue, 29 Jul 2025 17:58:24 +0800 Subject: [PATCH 18/18] Add new service modules and enhance initialization Added new service classes: Maintenance, Acceleration, Adblock, Avatar, Database, Fonts, Performance, and related templates and assets. Updated Service/Base.php to conditionally instantiate service classes only if they exist. Improved Service/Memory.php and Service/Monitor.php with better settings handling and update logic. Enhanced Service/Setting.php to simplify framework title usage. These changes modularize features and improve plugin extensibility and reliability. --- Service/123-Maintenance.php | 169 ++++ Service/Acceleration.php | 256 +++++ Service/Adblock.php | 46 + Service/Avatar.php | 98 ++ Service/Base.php | 48 +- Service/Comments.php | 0 Service/Database.php | 92 ++ Service/Fonts.php | 131 +++ Service/Mail.php | 0 Service/Maintenance.php | 136 +++ Service/Media.php | 0 Service/Memory.php | 31 +- Service/Monitor.php | 343 +++---- Service/Performance.php | 2 + Service/Setting.php | 1101 +++++++++++++++++---- Service/Super.php | 484 ++++----- assets/css/setting.css | 29 +- assets/images/wpcy-logo.png | Bin 0 -> 32163 bytes assets/js/script.js | 33 + changelog.txt | 0 composer.json | 0 composer.lock | 0 copyright.txt | 64 +- framework/classes/admin-options.class.php | 27 +- templates/about-section.php | 48 + templates/maintenance-default.php | 20 + templates/website-section.php | 21 + templates/welcome-section.php | 56 ++ wp-china-yes.php | 27 +- 29 files changed, 2617 insertions(+), 645 deletions(-) create mode 100755 Service/123-Maintenance.php create mode 100755 Service/Acceleration.php create mode 100755 Service/Adblock.php create mode 100755 Service/Avatar.php create mode 100755 Service/Comments.php create mode 100755 Service/Database.php create mode 100755 Service/Fonts.php create mode 100755 Service/Mail.php create mode 100755 Service/Maintenance.php create mode 100755 Service/Media.php create mode 100755 Service/Performance.php create mode 100755 assets/images/wpcy-logo.png create mode 100755 assets/js/script.js mode change 100644 => 100755 changelog.txt mode change 100644 => 100755 composer.json mode change 100644 => 100755 composer.lock mode change 100644 => 100755 copyright.txt create mode 100755 templates/about-section.php create mode 100755 templates/maintenance-default.php create mode 100755 templates/website-section.php create mode 100755 templates/welcome-section.php diff --git a/Service/123-Maintenance.php b/Service/123-Maintenance.php new file mode 100755 index 0000000..77e3be5 --- /dev/null +++ b/Service/123-Maintenance.php @@ -0,0 +1,169 @@ +settings = get_settings(); + + // 仅在调试模式下输出调试信息 + if (defined('WP_DEBUG') && WP_DEBUG) { + error_log('Maintenance Settings Raw: ' . print_r($this->settings, true)); + error_log('Maintenance Mode Value: ' . var_export($this->settings['maintenance_mode'], true)); + } + + // 如果维护模式启用,挂载相关钩子 + if ($this->settings['maintenance_mode']) { + add_action('template_redirect', [$this, 'check_maintenance_mode'], 1); + add_action('admin_bar_menu', [$this, 'add_admin_bar_notice'], 100); + add_action('init', [$this, 'check_ajax_maintenance'], 1); + } + } + + public function check_ajax_maintenance() { + if (wp_doing_ajax() && !current_user_can('manage_options')) { + wp_die('维护模式已启用'); + } + } + + public function check_maintenance_mode() { + // 如果是命令行环境,直接返回 + if (php_sapi_name() === 'cli') { + return; + } + + // 如果是管理员,直接返回 + if (current_user_can('manage_options')) { + return; + } + + // 检查是否是允许的页面 + global $pagenow; + if (in_array($pagenow, $this->allowed_pages)) { + return; + } + + // 检查是否是后台请求 + if (is_admin()) { + return; + } + + // 检查是否是 REST API 请求 + if (defined('REST_REQUEST') && REST_REQUEST) { + return; + } + + // 检查是否是 AJAX 请求 + if (wp_doing_ajax()) { + return; + } + + // 显示维护页面 + $this->show_maintenance_page(); + } + + private function show_maintenance_page() { + $maintenance_settings = $this->settings['maintenance_settings'] ?? []; + + $title = $maintenance_settings['maintenance_title'] ?? '网站维护中'; + $heading = $maintenance_settings['maintenance_heading'] ?? '网站维护中'; + $message = $maintenance_settings['maintenance_message'] ?? '网站正在进行例行维护,请稍后访问。感谢您的理解与支持!'; + + // 添加基本的样式 + $style = ' + + '; + + $output = $style . sprintf( + '

+

%s

+

%s

+
%s
+
', + esc_html($heading), + esc_html($title), + wp_kses_post($message) + ); + + // 设置维护模式响应头 + if (!headers_sent()) { + header('HTTP/1.1 503 Service Temporarily Unavailable'); + header('Status: 503 Service Temporarily Unavailable'); + header('Retry-After: 3600'); + header('Content-Type: text/html; charset=utf-8'); + } + + // 确保输出被清空 + if (ob_get_level()) { + ob_end_clean(); + } + + wp_die($output, $title, [ + 'response' => 503, + 'back_link' => false + ]); + } + + public function add_admin_bar_notice($wp_admin_bar) { + if (!current_user_can('manage_options')) { + return; + } + + // 添加调试信息 + if (defined('WP_DEBUG') && WP_DEBUG) { + error_log('Admin bar notice added for maintenance mode.'); + } + + $wp_admin_bar->add_node([ + 'id' => 'maintenance-mode-notice', + 'title' => '维护模式已启用', + 'href' => admin_url('admin.php?page=wp-china-yes#tab=脉云维护') + ]); + } +} \ No newline at end of file diff --git a/Service/Acceleration.php b/Service/Acceleration.php new file mode 100755 index 0000000..f2c481b --- /dev/null +++ b/Service/Acceleration.php @@ -0,0 +1,256 @@ +settings = get_settings(); + $this->init(); + } + + /** + * 初始化 admincdn 功能 + */ + private function init() { + if (!empty($this->settings['admincdn'])) { + add_action('wp_head', function () { + echo "\n"; + }, 1); + } + + $this->load_admincdn(); + } + + /** + * 加载 admincdn 功能 + */ + private function load_admincdn() { + // 确保 $this->settings 中包含必要的键 + $this->settings['admincdn_files'] = $this->settings['admincdn_files'] ?? []; + $this->settings['admincdn_public'] = $this->settings['admincdn_public'] ?? []; + $this->settings['admincdn_dev'] = $this->settings['admincdn_dev'] ?? []; + + // WordPress 核心静态文件链接替换 + if (is_admin() && !(defined('DOING_AJAX') && DOING_AJAX)) { + if ( + in_array('admin', (array) $this->settings['admincdn']) && + !stristr($GLOBALS['wp_version'], 'alpha') && + !stristr($GLOBALS['wp_version'], 'beta') && + !stristr($GLOBALS['wp_version'], 'RC') + ) { + // 禁用合并加载,以便于使用公共资源节点 + global $concatenate_scripts; + $concatenate_scripts = false; + + $this->page_str_replace('init', 'preg_replace', [ + '~' . home_url('/') . '(wp-admin|wp-includes)/(css|js)/~', + sprintf('https://wpstatic.admincdn.com/%s/$1/$2/', $GLOBALS['wp_version']) + ]); + } + } + + // 前台静态加速 + if (in_array('frontend', (array) $this->settings['admincdn_files'])) { + $this->page_str_replace('template_redirect', 'preg_replace', [ + '#(?<=[(\"\'])(?:' . quotemeta(home_url()) . ')?/(?:((?:wp-content|wp-includes)[^\"\')]+\.(css|js)[^\"\')]+))(?=[\"\')])#', + 'https://public.admincdn.com/$0' + ]); + } + + // Google 字体替换 + if (in_array('googlefonts', (array) $this->settings['admincdn_public'])) { + $this->page_str_replace('init', 'str_replace', [ + 'fonts.googleapis.com', + 'googlefonts.admincdn.com' + ]); + } + + // Google 前端公共库替换 + if (in_array('googleajax', (array) $this->settings['admincdn_public'])) { + $this->page_str_replace('init', 'str_replace', [ + 'ajax.googleapis.com', + 'googleajax.admincdn.com' + ]); + } + + // CDNJS 前端公共库替换 + if (in_array('cdnjs', (array) $this->settings['admincdn_public'])) { + $this->page_str_replace('init', 'str_replace', [ + 'cdnjs.cloudflare.com/ajax/libs', + 'cdnjs.admincdn.com' + ]); + } + + // jsDelivr 前端公共库替换 + if (in_array('jsdelivr', (array) $this->settings['admincdn_public'])) { + $this->page_str_replace('init', 'str_replace', [ + 'cdn.jsdelivr.net', + 'jsd.admincdn.com' + ]); + } + + // BootstrapCDN 前端公共库替换 + if (in_array('bootstrapcdn', (array) $this->settings['admincdn_public'])) { + $this->page_str_replace('init', 'str_replace', [ + 'maxcdn.bootstrapcdn.com', + 'jsd.admincdn.com' + ]); + } + + // Emoji 资源加速 - 使用 Twitter Emoji + if (in_array('emoji', (array) $this->settings['admincdn_files'])) { + $this->replace_emoji(); + } + + // WordPress.org 预览资源加速 + if (in_array('sworg', (array) $this->settings['admincdn_files'])) { + $this->replace_sworg(); + } + + // React 前端库加速 + if (in_array('react', (array) $this->settings['admincdn_dev'])) { + $this->page_str_replace('init', 'str_replace', [ + 'unpkg.com/react', + 'jsd.admincdn.com/npm/react' + ]); + } + + // jQuery 前端库加速 + if (in_array('jquery', (array) $this->settings['admincdn_dev'])) { + $this->page_str_replace('init', 'str_replace', [ + 'code.jquery.com', + 'jsd.admincdn.com/npm/jquery' + ]); + } + + // Vue.js 前端库加速 + if (in_array('vuejs', (array) $this->settings['admincdn_dev'])) { + $this->page_str_replace('init', 'str_replace', [ + 'unpkg.com/vue', + 'jsd.admincdn.com/npm/vue' + ]); + } + + // DataTables 前端库加速 + if (in_array('datatables', (array) $this->settings['admincdn_dev'])) { + $this->page_str_replace('init', 'str_replace', [ + 'cdn.datatables.net', + 'jsd.admincdn.com/npm/datatables.net' + ]); + } + + // Tailwind CSS 加速 + if (in_array('tailwindcss', (array) $this->settings['admincdn_dev'])) { + $this->page_str_replace('init', 'str_replace', [ + 'unpkg.com/tailwindcss', + 'jsd.admincdn.com/npm/tailwindcss' + ]); + } + } + + /** + * 替换 Emoji 资源 + */ + private function replace_emoji() { + // 禁用 WordPress 默认的 emoji 处理 + remove_action('wp_head', 'print_emoji_detection_script', 7); + remove_action('admin_print_scripts', 'print_emoji_detection_script'); + remove_action('wp_print_styles', 'print_emoji_styles'); + remove_action('admin_print_styles', 'print_emoji_styles'); + remove_filter('the_content_feed', 'wp_staticize_emoji'); + remove_filter('comment_text_rss', 'wp_staticize_emoji'); + remove_filter('wp_mail', 'wp_staticize_emoji_for_email'); + + // 替换 emoji 图片路径 + $this->page_str_replace('init', 'str_replace', [ + 's.w.org/images/core/emoji', + 'jsd.admincdn.com/npm/@twemoji/api/dist' + ]); + + // 替换 wpemojiSettings 配置 + add_action('wp_head', function () { + ?> + + page_str_replace('init', 'str_replace', [ + 'ts.w.org', + 'ts.wenpai.net' + ]); + + // 替换主题预览图片 URL + add_filter('theme_screenshot_url', function ($url) { + if (strpos($url, 'ts.w.org') !== false) { + $url = str_replace('ts.w.org', 'ts.wenpai.net', $url); + } + return $url; + }); + + // 过滤主题 API 响应 + add_filter('themes_api_result', function ($res, $action, $args) { + if (is_object($res) && !empty($res->screenshots)) { + foreach ($res->screenshots as &$screenshot) { + if (isset($screenshot->src)) { + $screenshot->src = str_replace('ts.w.org', 'ts.wenpai.net', $screenshot->src); + } + } + } + return $res; + }, 10, 3); + + // 替换页面内容 + add_action('admin_init', function () { + ob_start(function ($content) { + return str_replace('ts.w.org', 'ts.wenpai.net', $content); + }); + }); + + // 确保前台内容替换 + add_action('template_redirect', function () { + ob_start(function ($content) { + return str_replace('ts.w.org', 'ts.wenpai.net', $content); + }); + }); + } + + /** + * 页面字符串替换 + * + * @param string $hook 钩子名称 + * @param string $replace_func 替换函数 + * @param array $param 替换参数 + */ + private function page_str_replace($hook, $replace_func, $param) { + if (php_sapi_name() == 'cli') { + return; + } + add_action($hook, function () use ($replace_func, $param) { + ob_start(function ($buffer) use ($replace_func, $param) { + $param[] = $buffer; + return call_user_func_array($replace_func, $param); + }); + }, PHP_INT_MAX); + } +} \ No newline at end of file diff --git a/Service/Adblock.php b/Service/Adblock.php new file mode 100755 index 0000000..38fb60e --- /dev/null +++ b/Service/Adblock.php @@ -0,0 +1,46 @@ +settings = get_settings(); + $this->init(); + } + + /** + * 初始化广告拦截功能 + */ + private function init() { + if (!empty($this->settings['adblock']) && $this->settings['adblock'] == 'on') { + add_action('admin_head', [$this, 'load_adblock']); + } + } + + /** + * 加载广告拦截 + */ + public function load_adblock() { + // 处理广告拦截规则 + foreach ((array) $this->settings['adblock_rule'] as $rule) { + if (empty($rule['enable']) || empty($rule['selector'])) { + continue; + } + echo sprintf('', + htmlspecialchars_decode($rule['selector']) + ); + } + } +} \ No newline at end of file diff --git a/Service/Avatar.php b/Service/Avatar.php new file mode 100755 index 0000000..f6c08a7 --- /dev/null +++ b/Service/Avatar.php @@ -0,0 +1,98 @@ +settings = get_settings(); + $this->init(); + } + + /** + * 初始化初认头像功能 + */ + private function init() { + if (!empty($this->settings['cravatar'])) { + add_filter('user_profile_picture_description', [$this, 'set_user_profile_picture_for_cravatar'], 1); + add_filter('avatar_defaults', [$this, 'set_defaults_for_cravatar'], 1); + add_filter('um_user_avatar_url_filter', [$this, 'get_cravatar_url'], 1); + add_filter('bp_gravatar_url', [$this, 'get_cravatar_url'], 1); + add_filter('get_avatar_url', [$this, 'get_cravatar_url'], 1); + } + } + + /** + * 获取 Cravatar URL + */ + public function get_cravatar_url($url) { + switch ($this->settings['cravatar']) { + case 'cn': + return $this->replace_avatar_url($url, 'cn.cravatar.com'); + case 'global': + return $this->replace_avatar_url($url, 'en.cravatar.com'); + case 'weavatar': + return $this->replace_avatar_url($url, 'weavatar.com'); + default: + return $url; + } + } + + /** + * 替换头像 URL + */ + public function replace_avatar_url($url, $domain) { + $sources = array( + 'www.gravatar.com', + '0.gravatar.com', + '1.gravatar.com', + '2.gravatar.com', + 's.gravatar.com', + 'secure.gravatar.com', + 'cn.gravatar.com', + 'en.gravatar.com', + 'gravatar.com', + 'sdn.geekzu.org', + 'gravatar.duoshuo.com', + 'gravatar.loli.net', + 'dn-qiniu-avatar.qbox.me' + ); + + return str_replace($sources, $domain, $url); + } + + /** + * 设置 WordPress 讨论设置中的默认 LOGO 名称 + */ + public function set_defaults_for_cravatar($avatar_defaults) { + if ($this->settings['cravatar'] == 'weavatar') { + $avatar_defaults['gravatar_default'] = 'WeAvatar'; + } else { + $avatar_defaults['gravatar_default'] = '初认头像'; + } + + return $avatar_defaults; + } + + /** + * 设置个人资料卡中的头像上传地址 + */ + public function set_user_profile_picture_for_cravatar() { + if ($this->settings['cravatar'] == 'weavatar') { + return '您可以在 WeAvatar 修改您的资料图片'; + } else { + return '您可以在初认头像修改您的资料图片'; + } + } +} \ No newline at end of file diff --git a/Service/Base.php b/Service/Base.php index 4da50cc..2d73d43 100755 --- a/Service/Base.php +++ b/Service/Base.php @@ -11,18 +11,38 @@ defined( 'ABSPATH' ) || exit; */ class Base { - public function __construct() { - // 加速服务 - new Super(); - // 监控服务 - new Monitor(); - // 内存服务 - new Memory(); - // 更新服务 - new Update(); - if ( is_admin() ) { - // 设置服务 - new Setting(); - } - } + public function __construct() { + // 确保所有类文件都存在后再实例化 + if (class_exists(__NAMESPACE__ . '\Super')) { + new Super(); + } + + if (class_exists(__NAMESPACE__ . '\Monitor')) { + new Monitor(); + } + + if (class_exists(__NAMESPACE__ . '\Memory')) { + new Memory(); + } + + if (class_exists(__NAMESPACE__ . '\Update')) { + new Update(); + } + + if (class_exists(__NAMESPACE__ . '\Database')) { + new Database(); + } + + if (class_exists(__NAMESPACE__ . '\Acceleration')) { + new Acceleration(); + } + + if (class_exists(__NAMESPACE__ . '\Maintenance')) { + new Maintenance(); + } + + if ( is_admin() && class_exists(__NAMESPACE__ . '\Setting')) { + new Setting(); + } + } } diff --git a/Service/Comments.php b/Service/Comments.php new file mode 100755 index 0000000..e69de29 diff --git a/Service/Database.php b/Service/Database.php new file mode 100755 index 0000000..f527338 --- /dev/null +++ b/Service/Database.php @@ -0,0 +1,92 @@ +settings = get_settings(); + + // 如果启用了数据库工具,则允许访问数据库修复工具 + if ( ! empty( $this->settings['enable_db_tools'] ) && $this->settings['enable_db_tools'] ) { + define( 'WP_ALLOW_REPAIR', true ); + } + + // 处理调试常量 + $this->handle_debug_constants(); + + // 安全相关常量 + $this->handle_security_constants(); + } + + /** + * 处理调试模式相关常量 + */ + private function handle_debug_constants() { + if ( ! empty( $this->settings['enable_debug'] ) && $this->settings['enable_debug'] ) { + // 只有在常量未定义时才定义 + if ( ! defined( 'WP_DEBUG' ) ) { + define( 'WP_DEBUG', true ); + } + if ( ! empty( $this->settings['debug_options']['wp_debug_log'] ) && ! defined( 'WP_DEBUG_LOG' ) ) { + define( 'WP_DEBUG_LOG', true ); + } + if ( ! empty( $this->settings['debug_options']['wp_debug_display'] ) && ! defined( 'WP_DEBUG_DISPLAY' ) ) { + define( 'WP_DEBUG_DISPLAY', true ); + } + if ( ! empty( $this->settings['debug_options']['script_debug'] ) && ! defined( 'SCRIPT_DEBUG' ) ) { + define( 'SCRIPT_DEBUG', true ); + } + if ( ! empty( $this->settings['debug_options']['save_queries'] ) && ! defined( 'SAVEQUERIES' ) ) { + define( 'SAVEQUERIES', true ); + } + } else { + // 禁用调试模式时的默认值 + if ( ! defined( 'WP_DEBUG' ) ) { + define( 'WP_DEBUG', false ); + } + if ( ! defined( 'WP_DEBUG_LOG' ) ) { + define( 'WP_DEBUG_LOG', false ); + } + if ( ! defined( 'WP_DEBUG_DISPLAY' ) ) { + define( 'WP_DEBUG_DISPLAY', false ); + } + if ( ! defined( 'SCRIPT_DEBUG' ) ) { + define( 'SCRIPT_DEBUG', false ); + } + if ( ! defined( 'SAVEQUERIES' ) ) { + define( 'SAVEQUERIES', false ); + } + } + } + + /** + * 处理安全相关常量 + */ + private function handle_security_constants() { + if ( ! empty( $this->settings['disallow_file_edit'] ) && ! defined( 'DISALLOW_FILE_EDIT' ) ) { + define( 'DISALLOW_FILE_EDIT', $this->settings['disallow_file_edit'] ); + } + if ( ! empty( $this->settings['disallow_file_mods'] ) && ! defined( 'DISALLOW_FILE_MODS' ) ) { + define( 'DISALLOW_FILE_MODS', $this->settings['disallow_file_mods'] ); + } + if ( ! empty( $this->settings['force_ssl_admin'] ) && ! defined( 'FORCE_SSL_ADMIN' ) ) { + define( 'FORCE_SSL_ADMIN', $this->settings['force_ssl_admin'] ); + } + if ( ! empty( $this->settings['force_ssl_login'] ) && ! defined( 'FORCE_SSL_LOGIN' ) ) { + define( 'FORCE_SSL_LOGIN', $this->settings['force_ssl_login'] ); + } + } +} diff --git a/Service/Fonts.php b/Service/Fonts.php new file mode 100755 index 0000000..4c310d2 --- /dev/null +++ b/Service/Fonts.php @@ -0,0 +1,131 @@ +settings = get_settings(); + $this->init(); + } + + /** + * 初始化文风字体功能 + */ + private function init() { + if (!empty($this->settings['windfonts']) && $this->settings['windfonts'] != 'off') { + $this->load_typography(); + } + + if (!empty($this->settings['windfonts']) && $this->settings['windfonts'] == 'optimize') { + add_action('init', function () { + wp_enqueue_style('windfonts-optimize', CHINA_YES_PLUGIN_URL . 'assets/css/fonts.css', [], CHINA_YES_VERSION); + }); + } + + if (!empty($this->settings['windfonts']) && $this->settings['windfonts'] == 'on') { + add_action('wp_head', [$this, 'load_windfonts']); + add_action('admin_head', [$this, 'load_windfonts']); + } + + if (!empty($this->settings['windfonts']) && $this->settings['windfonts'] == 'frontend') { + add_action('wp_head', [$this, 'load_windfonts']); + } + } + + /** + * 加载文风字体 + */ + public function load_windfonts() { + echo << + +HTML; + + $loaded = []; + foreach ((array) $this->settings['windfonts_list'] as $font) { + if (empty($font['enable'])) { + continue; + } + if (empty($font['family'])) { + continue; + } + if (in_array($font['css'], $loaded)) { + continue; + } + echo sprintf(<< + +HTML + , + $font['css'], + htmlspecialchars_decode($font['selector']), + $font['style'], + $font['weight'], + $font['family'] + ); + $loaded[] = $font['css']; + } + } + + /** + * 加载排印优化 + */ + public function load_typography() { + // 支持中文排版段首缩进 2em + if (in_array('indent', (array) $this->settings['windfonts_typography'])) { + add_action('wp_head', function () { + echo ''; + }); + } + + // 支持中文排版两端对齐 + if (in_array('align', (array) $this->settings['windfonts_typography'])) { + add_action('wp_head', function () { + if (is_single()) { // 仅在文章页面生效 + echo ''; + } + }); + } + } +} \ No newline at end of file diff --git a/Service/Mail.php b/Service/Mail.php new file mode 100755 index 0000000..e69de29 diff --git a/Service/Maintenance.php b/Service/Maintenance.php new file mode 100755 index 0000000..996cacf --- /dev/null +++ b/Service/Maintenance.php @@ -0,0 +1,136 @@ +settings = get_settings(); + + // 维护模式检查 + if (!empty($this->settings['maintenance_mode'])) { + add_action('template_redirect', [$this, 'check_maintenance_mode']); + add_action('admin_bar_menu', [$this, 'add_admin_bar_notice'], 100); + } + + // 仪表盘统计信息 + if (!empty($this->settings['disk']) && $this->settings['disk']) { + add_action('dashboard_glance_items', [$this, 'add_dashboard_stats']); + add_action('admin_head', [$this, 'add_admin_css']); + } + + // 添加登录记录钩子 + add_action('wp_login', [$this, 'record_last_login'], 10, 2); + } + + // 添加 CSS 样式 + public function add_admin_css() { + $screen = get_current_screen(); + if ($screen->id === 'dashboard') { + echo ''; + } + } + + public function add_dashboard_stats($items) { + if (!is_array($items)) { + $items = array(); + } + + // 获取显示选项设置 + $display_options = $this->settings['disk_display'] ?? []; + + // 媒体文件统计 + if (in_array('media_num', $display_options)) { + $media_count = wp_count_posts('attachment')->inherit; + $items['media'] = sprintf( + ' %s', + admin_url('upload.php'), + sprintf(_n('%d 个媒体', '%d 个媒体', $media_count), $media_count) + ); + } + + // 管理员统计 + if (in_array('admin_num', $display_options)) { + $admin_count = count(get_users(['role' => 'administrator', 'fields' => 'ID'])); + $items['admins'] = sprintf( + ' %s', + admin_url('users.php?role=administrator'), + sprintf(_n('%d 个管理员', '%d 个管理员', $admin_count), $admin_count) + ); + } + + // 用户总数统计 + if (in_array('user_num', $display_options)) { + $total_users = count(get_users(['fields' => 'ID'])); + $items['users'] = sprintf( + ' %s', + admin_url('users.php'), + sprintf(_n('%d 个用户', '%d 个用户', $total_users), $total_users) + ); + } + + // 磁盘使用统计 + $disk_info = $this->get_disk_usage_info(); + if (in_array('disk_usage', $display_options)) { + $items['disk_usage'] = sprintf( + ' 磁盘用量:%s / %s', + size_format($disk_info['used']), + size_format($disk_info['total']) + ); + } + + if (in_array('disk_limit', $display_options)) { + $items['disk_free'] = sprintf( + ' 剩余空间:%s (%s%%)', + size_format($disk_info['free']), + round(($disk_info['free'] / $disk_info['total']) * 100, 2) + ); + } + + // 上次登录时间 + if (in_array('lastlogin', $display_options)) { + $current_user_id = get_current_user_id(); + $last_login = get_user_meta($current_user_id, 'last_login', true); + $items['lastlogin'] = sprintf( + ' 上次登录:%s', + $last_login ? date('Y.m.d H:i:s', $last_login) : '从未登录' + ); + } + + return $items; + } + + private function get_disk_usage_info() { + $disk_info = get_transient('disk_usage_info'); + if (false === $disk_info) { + $upload_dir = wp_upload_dir(); + $disk_total = disk_total_space($upload_dir['basedir']); + $disk_free = disk_free_space($upload_dir['basedir']); + $disk_used = $disk_total - $disk_free; + + $disk_info = [ + 'used' => $disk_used, + 'total' => $disk_total, + 'free' => $disk_free, + ]; + set_transient('disk_usage_info', $disk_info, HOUR_IN_SECONDS); + } + return $disk_info; + } + + public function record_last_login($user_login, $user) { + update_user_meta($user->ID, 'last_login', time()); + } +} \ No newline at end of file diff --git a/Service/Media.php b/Service/Media.php new file mode 100755 index 0000000..e69de29 diff --git a/Service/Memory.php b/Service/Memory.php index 23a1115..881d379 100755 --- a/Service/Memory.php +++ b/Service/Memory.php @@ -45,10 +45,6 @@ class Memory { // 转换为更直观的名称 switch (strtolower($os)) { case 'linux': - if (file_exists('/etc/os-release')) { - $content = parse_ini_file('/etc/os-release'); - return $content['PRETTY_NAME'] ?? 'Linux'; - } return 'Linux'; case 'darwin': return 'macOS'; @@ -152,8 +148,18 @@ class Memory { */ public function add_footer($content) { $settings = get_settings(); - // 确保 memory_display 是数组,如果不是则使用空数组 - $display_options = is_array($settings['memory_display'] ?? []) ? $settings['memory_display'] : []; + + // 设置默认显示选项 + $default_options = [ + 'memory_usage', + 'wp_limit', + 'server_ip', + ]; + + // 如果设置为空或不是数组,使用默认选项 + $display_options = isset($settings['memory_display']) && is_array($settings['memory_display']) + ? $settings['memory_display'] + : $default_options; // 如果 memory 设置未启用,直接返回原始内容 if (empty($settings['memory'])) { @@ -165,6 +171,7 @@ public function add_footer($content) { $this->os_info = $this->get_os_info(); $footer_parts = []; + // 内存使用量 if (in_array('memory_usage', $display_options)) { @@ -251,4 +258,16 @@ public function add_footer($content) { ); } } + + + /** + * 更新设置 + */ + private function update_settings() { + if ( is_multisite() ) { + update_site_option( 'wp_china_yes', $this->settings ); + } else { + update_option( 'wp_china_yes', $this->settings, true ); + } + } } diff --git a/Service/Monitor.php b/Service/Monitor.php index c6d3b44..4f234cc 100755 --- a/Service/Monitor.php +++ b/Service/Monitor.php @@ -1,171 +1,172 @@ -settings = get_settings(); - wp_clear_scheduled_hook( 'wp_china_yes_maybe_check_store' ); // TODO 下个版本移除 - wp_clear_scheduled_hook( 'wp_china_yes_maybe_check_cravatar' ); // TODO 下个版本移除 - wp_clear_scheduled_hook( 'wp_china_yes_maybe_check_admincdn' ); // TODO 下个版本移除 - if ( $this->settings['monitor'] ) { - // 站点网络下只在主站运行 - if ( is_main_site() ) { - add_action( 'init', [ $this, 'init' ] ); - add_action( 'wp_china_yes_monitor', [ - $this, - 'run_monitor' - ] ); - } - } else { - wp_clear_scheduled_hook( 'wp_china_yes_monitor' ); - } - } - - /** - * 初始化 - */ - public function init() { - if ( ! wp_next_scheduled( 'wp_china_yes_monitor' ) ) { - wp_schedule_event( time(), 'hourly', 'wp_china_yes_monitor' ); - } - } - - /** - * 运行监控 - */ - public function run_monitor() { - if ( $this->settings['store'] != 'off' ) { - $this->maybe_check_store(); - } - if ( $this->settings['cravatar'] != 'off' ) { - $this->maybe_check_cravatar(); - } - if ( ! empty( $this->settings['admincdn'] ) ) { - $this->maybe_check_admincdn(); - } - } - - /** - * 检查应用市场可用性 - */ - public function maybe_check_store() { - $test_url = 'https://api.wenpai.net/china-yes/version-check'; - if ( $this->settings['store'] == 'proxy' ) { - $test_url = 'https://api.wpmirror.com/core/version-check/1.7/'; - } - $response = wp_remote_get( $test_url ); - if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != 200 ) { - if ( $this->settings['store'] == 'wenpai' ) { - $this->settings['store'] = 'proxy'; - } elseif ( $this->settings['store'] == 'proxy' ) { - $this->settings['store'] = 'off'; - } - $this->update_settings(); - } - } - - /** - * 检查初认头像可用性 - */ - public function maybe_check_cravatar() { - $test_url = 'https://cn.cravatar.com/avatar/'; - switch ( $this->settings['cravatar'] ) { - case 'global': - $test_url = 'https://en.cravatar.com/avatar/'; - break; - case 'weavatar': - $test_url = 'https://weavatar.com/avatar/'; - break; - } - $response = wp_remote_get( $test_url ); - if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != 200 ) { - if ( $this->settings['cravatar'] == 'cn' ) { - $this->settings['cravatar'] = 'global'; - } elseif ( $this->settings['cravatar'] == 'global' ) { - $this->settings['cravatar'] = 'weavatar'; - } elseif ( $this->settings['cravatar'] == 'weavatar' ) { - $this->settings['cravatar'] = 'cn'; - } - $this->update_settings(); - } - } - - /** - * 检查萌芽加速可用性 - */ - public function maybe_check_admincdn() { - // 后台加速 - if ( in_array( 'admin', $this->settings['admincdn'] ) ) { - $response = wp_remote_get( 'https://wpstatic.admincdn.com/6.7/wp-includes/js/wp-sanitize.min.js' ); - if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != 200 ) { - $this->settings['admincdn'] = array_values( array_diff( $this->settings['admincdn'], [ 'admin' ] ) ); - $this->update_settings(); - } - } - // 前台加速 - if ( in_array( 'frontend', $this->settings['admincdn'] ) ) { - $url = network_site_url( '/wp-includes/js/wp-sanitize.min.js' ); - $response = wp_remote_get( 'https://public.admincdn.com/' . $url ); - if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != 200 ) { - $this->settings['admincdn'] = array_values( array_diff( $this->settings['admincdn'], [ 'frontend' ] ) ); - $this->update_settings(); - } - } - // Google 字体 - if ( in_array( 'googlefonts', $this->settings['admincdn'] ) ) { - $response = wp_remote_get( 'https://googlefonts.admincdn.com/css?family=Roboto:400,700' ); - if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != 200 ) { - $this->settings['admincdn'] = array_values( array_diff( $this->settings['admincdn'], [ 'googlefonts' ] ) ); - $this->update_settings(); - } - } - // Google 前端公共库 - if ( in_array( 'googleajax', $this->settings['admincdn'] ) ) { - $response = wp_remote_get( 'https://googleajax.admincdn.com/ajax/libs/jquery/3.7.1/jquery.slim.min.js' ); - if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != 200 ) { - $this->settings['admincdn'] = array_values( array_diff( $this->settings['admincdn'], [ 'googleajax' ] ) ); - $this->update_settings(); - } - } - // CDNJS 前端公共库 - if ( in_array( 'cdnjs', $this->settings['admincdn'] ) ) { - $response = wp_remote_get( 'https://cdnjs.admincdn.com/jquery/3.7.1/jquery.slim.min.js' ); - if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != 200 ) { - $this->settings['admincdn'] = array_values( array_diff( $this->settings['admincdn'], [ 'cdnjs' ] ) ); - $this->update_settings(); - } - } - // jsDelivr 公共库 - if ( in_array( 'jsdelivr', $this->settings['admincdn'] ) ) { - $response = wp_remote_get( 'https://jsd.admincdn.com/npm/jquery@3.7.1/dist/jquery.slim.min.js' ); - if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != 200 ) { - $this->settings['admincdn'] = array_values( array_diff( $this->settings['admincdn'], [ 'jsdelivr' ] ) ); - $this->update_settings(); - } - } - } - - /** - * 更新设置 - */ - private function update_settings() { - if ( is_multisite() ) { - update_site_option( 'wp_china_yes', $this->settings ); - } else { - update_option( 'wp_china_yes', $this->settings, true ); - } - } -} +settings = get_settings(); + wp_clear_scheduled_hook( 'wp_china_yes_maybe_check_store' ); // TODO 下个版本移除 + wp_clear_scheduled_hook( 'wp_china_yes_maybe_check_cravatar' ); // TODO 下个版本移除 + wp_clear_scheduled_hook( 'wp_china_yes_maybe_check_admincdn' ); // TODO 下个版本移除 + if ( $this->settings['monitor'] ) { + // 站点网络下只在主站运行 + if ( is_main_site() ) { + add_action( 'init', [ $this, 'init' ] ); + add_action( 'wp_china_yes_monitor', [ + $this, + 'run_monitor' + ] ); + } + } else { + wp_clear_scheduled_hook( 'wp_china_yes_monitor' ); + } +} + + /** + * 初始化 + */ + public function init() { + if ( ! wp_next_scheduled( 'wp_china_yes_monitor' ) ) { + wp_schedule_event( time(), 'hourly', 'wp_china_yes_monitor' ); + } + } + + /** + * 运行监控 + */ + public function run_monitor() { + if ( $this->settings['store'] != 'off' ) { + $this->maybe_check_store(); + } + if ( $this->settings['cravatar'] != 'off' ) { + $this->maybe_check_cravatar(); + } + if ( ! empty( $this->settings['admincdn'] ) ) { + $this->maybe_check_admincdn(); + } + } + + /** + * 检查应用市场可用性 + */ + public function maybe_check_store() { + $test_url = 'https://api.wenpai.net/china-yes/version-check'; + if ( $this->settings['store'] == 'proxy' ) { + $test_url = 'https://api.wpmirror.com/core/version-check/1.7/'; + } + $response = wp_remote_get( $test_url ); + if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != 200 ) { + if ( $this->settings['store'] == 'wenpai' ) { + $this->settings['store'] = 'proxy'; + } elseif ( $this->settings['store'] == 'proxy' ) { + $this->settings['store'] = 'off'; + } + $this->update_settings(); + } + } + + /** + * 检查初认头像可用性 + */ + public function maybe_check_cravatar() { + $test_url = 'https://cn.cravatar.com/avatar/'; + switch ( $this->settings['cravatar'] ) { + case 'global': + $test_url = 'https://en.cravatar.com/avatar/'; + break; + case 'weavatar': + $test_url = 'https://weavatar.com/avatar/'; + break; + } + $response = wp_remote_get( $test_url ); + if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != 200 ) { + if ( $this->settings['cravatar'] == 'cn' ) { + $this->settings['cravatar'] = 'global'; + } elseif ( $this->settings['cravatar'] == 'global' ) { + $this->settings['cravatar'] = 'weavatar'; + } elseif ( $this->settings['cravatar'] == 'weavatar' ) { + $this->settings['cravatar'] = 'cn'; + } + $this->update_settings(); + } + } + + /** + * 检查萌芽加速可用性 + */ + public function maybe_check_admincdn() { + // 后台加速 + if ( in_array( 'admin', $this->settings['admincdn'] ) ) { + $response = wp_remote_get( 'https://wpstatic.admincdn.com/6.7/wp-includes/js/wp-sanitize.min.js' ); + if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != 200 ) { + $this->settings['admincdn'] = array_values( array_diff( $this->settings['admincdn'], [ 'admin' ] ) ); + $this->update_settings(); + } + } + // 前台加速 + if ( in_array( 'frontend', $this->settings['admincdn'] ) ) { + $url = network_site_url( '/wp-includes/js/wp-sanitize.min.js' ); + $response = wp_remote_get( 'https://public.admincdn.com/' . $url ); + if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != 200 ) { + $this->settings['admincdn'] = array_values( array_diff( $this->settings['admincdn'], [ 'frontend' ] ) ); + $this->update_settings(); + } + } + // Google 字体 + if ( in_array( 'googlefonts', $this->settings['admincdn'] ) ) { + $response = wp_remote_get( 'https://googlefonts.admincdn.com/css?family=Roboto:400,700' ); + if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != 200 ) { + $this->settings['admincdn'] = array_values( array_diff( $this->settings['admincdn'], [ 'googlefonts' ] ) ); + $this->update_settings(); + } + } + // Google 前端公共库 + if ( in_array( 'googleajax', $this->settings['admincdn'] ) ) { + $response = wp_remote_get( 'https://googleajax.admincdn.com/ajax/libs/jquery/3.7.1/jquery.slim.min.js' ); + if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != 200 ) { + $this->settings['admincdn'] = array_values( array_diff( $this->settings['admincdn'], [ 'googleajax' ] ) ); + $this->update_settings(); + } + } + // CDNJS 前端公共库 + if ( in_array( 'cdnjs', $this->settings['admincdn'] ) ) { + $response = wp_remote_get( 'https://cdnjs.admincdn.com/jquery/3.7.1/jquery.slim.min.js' ); + if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != 200 ) { + $this->settings['admincdn'] = array_values( array_diff( $this->settings['admincdn'], [ 'cdnjs' ] ) ); + $this->update_settings(); + } + } + // jsDelivr 公共库 + if ( in_array( 'jsdelivr', $this->settings['admincdn'] ) ) { + $response = wp_remote_get( 'https://jsd.admincdn.com/npm/jquery@3.7.1/dist/jquery.slim.min.js' ); + if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != 200 ) { + $this->settings['admincdn'] = array_values( array_diff( $this->settings['admincdn'], [ 'jsdelivr' ] ) ); + $this->update_settings(); + } + } + } + + + /** + * 更新设置 + */ + private function update_settings() { + if ( is_multisite() ) { + update_site_option( 'wp_china_yes', $this->settings ); + } else { + update_option( 'wp_china_yes', $this->settings, true ); + } + } +} diff --git a/Service/Performance.php b/Service/Performance.php new file mode 100755 index 0000000..a4abe2d --- /dev/null +++ b/Service/Performance.php @@ -0,0 +1,2 @@ +prefix, [ - 'framework_title' => sprintf( '%s v%s', $this->settings['custom_name'], CHINA_YES_VERSION ), + 'framework_title' => $this->settings['custom_name'], 'menu_hidden' => $this->settings['hide'], 'menu_title' => $this->settings['custom_name'], 'menu_slug' => 'wp-china-yes', @@ -59,24 +59,31 @@ private function get_settings_page_url() { 'async_webfont' => true, 'database' => is_multisite() ? 'network' : '', ] ); - + + // 获取启用的 sections + $enabled_sections = $this->settings['enabled_sections'] ?? ['welcome', 'store', 'admincdn', 'cravatar', 'other', 'about']; + + if (in_array('welcome', $enabled_sections)) { + $settings_page_url = $this->get_settings_page_url(); + ob_start(); + include CHINA_YES_PLUGIN_PATH . 'templates/welcome-section.php'; + $welcome_content = ob_get_clean(); + WP_CHINA_YES::createSection( $this->prefix, [ 'title' => '欢迎使用', 'icon' => 'icon icon-home-1', 'fields' => [ [ 'type' => 'content', - 'content' => - <<

原生体验

文派叶子🍃(WP-China-Yes)是一款不可多得的 WordPress 系统底层优化和生态基础设施软件。

网站加速

优化加速插件多如牛毛,为何文派叶子如此与众不同?

进一步了解 ↗

翻译推送

高质量翻译中文本地化翻译由文派开源官方提供,欢迎参与改进。

本地化改进 ↗

广告屏蔽

呈现清爽整洁的网站后台,清除侵入式后台广告、无用信息。

获取广告规则 ↗

加入我们

关注文派茶馆 WPTEA.com 公众号以及订阅我们的时事通讯即可接收独家内容、提示和更新。

-HTML, + 'content' =>$welcome_content, ] ], ] ); - + } + if (in_array('store', $enabled_sections)) { WP_CHINA_YES::createSection( $this->prefix, [ - 'title' => '加速设置', - 'icon' => 'icon icon-flash-1', + 'title' => '应用市场', + 'icon' => 'icon icon-shop', 'fields' => [ [ 'id' => 'store', @@ -94,41 +101,108 @@ HTML, 'wp-china-yes' ), ], [ - 'id' => 'admincdn', - 'type' => 'checkbox', - 'title' => __( '萌芽加速', 'wp-china-yes' ), - 'inline' => true, - 'options' => [ - 'googlefonts' => 'Google 字体', - 'googleajax' => 'Google 前端库', - 'cdnjs' => 'CDNJS 前端库', - 'jsdelivr' => 'jsDelivr 前端库', - 'bootstrapcdn' => 'Bootstrap 前端库' - ], - 'default' => [ - 'admin' => 'admin', - ], - 'subtitle' => '是否启用萌芽加速', - 'desc' => __( '萌芽加速(adminCDN)将 WordPress 插件依赖的静态文件切换为公共资源,解决卡顿、加载慢等问题。您可按需启用加速项目,更多细节控制和功能,请查看推荐设置。', - 'wp-china-yes' ), + 'id' => 'bridge', + 'type' => 'switcher', + 'default' => true, + 'title' => '云桥更新', + 'subtitle' => '是否启用更新加速', + 'desc' => __( '文派云桥(wpbridge)托管更新和应用分发渠道,可解决因 WordPress 社区分裂导致的混乱、旧应用无法更新,频繁 API 请求拖慢网速等问题。', + 'wp-china-yes' ), ], [ - 'id' => 'admincdn', - 'type' => 'checkbox', - 'title' => __( '文件加速', 'wp-china-yes' ), - 'inline' => true, - 'options' => [ - 'admin' => '后台加速', - 'frontend' => '前台加速', - ], - 'default' => [ - 'admin' => 'admin', - ], - 'subtitle' => '是否启用文件加速', - 'desc' => __( '专为 WordPress 系统内置依赖的静态资源进行加速,加快网站访问速度,如遇异常请停用对应选项。', - 'wp-china-yes' ), + 'id' => 'arkpress', + 'type' => 'switcher', + 'default' => false, + 'title' => '联合存储库', + 'subtitle' => '自动监控加速节点可用性', + 'desc' => __( 'ArkPress.org 支持自动监控各加速节点可用性,当节点不可用时自动切换至可用节点或关闭加速,以保证您的网站正常访问', + 'wp-china-yes' ), ], - + ], + ] ); + } + + if (in_array('admincdn', $enabled_sections)) { + WP_CHINA_YES::createSection($this->prefix, [ + 'title' => '萌芽加速', + 'icon' => 'icon icon-flash-1', + 'fields' => [ + [ + 'id' => 'admincdn_public', + 'type' => 'checkbox', + 'title' => __('萌芽加速', 'wp-china-yes'), + 'inline' => true, + 'options' => [ + 'googlefonts' => 'Google 字体', + 'googleajax' => 'Google 前端库', + 'cdnjs' => 'CDNJS 前端库', + 'jsdelivr' => 'jsDelivr 前端库', + 'bootstrapcdn' => 'Bootstrap 前端库', + ], + 'default' => [ + 'googlefonts' => 'googlefonts', + 'googleajax' => '', + 'cdnjs' => '', + 'jsdelivr' => '', + 'bootstrapcdn' => '', + ], + 'subtitle' => '是否启用萌芽加速', + 'desc' => __('萌芽加速(adminCDN)将 WordPress 插件依赖的静态文件切换为公共资源,解决卡顿、加载慢等问题。您可按需启用加速项目,更多细节控制和功能,请查看推荐设置。', + 'wp-china-yes'), + ], + [ + 'id' => 'admincdn_files', + 'type' => 'checkbox', + 'title' => __('文件加速', 'wp-china-yes'), + 'inline' => true, + 'options' => [ + 'admin' => '后台加速', + 'frontend' => '前台加速', + 'emoji' => 'Emoji加速', + 'sworg' => '预览加速', + ], + 'default' => [ + 'admin' => 'admin', + 'frontend' => '', + 'emoji' => 'emoji', + 'sworg' => '', + ], + 'subtitle' => '是否启用文件加速', + 'desc' => __('专为 WordPress 系统内置依赖的静态资源进行加速,加快网站访问速度,如遇异常请停用对应选项。预览加速可在不切换应用市场时加速插件目录预览截图。', + 'wp-china-yes'), + ], + [ + 'id' => 'admincdn_dev', + 'type' => 'checkbox', + 'title' => __('开发加速', 'wp-china-yes'), + 'inline' => true, + 'options' => [ + 'react' => 'React 前端库', + 'jquery' => 'jQuery 前端库', + 'vuejs' => 'Vue.js 前端库', + 'datatables' => 'DataTables 前端库', + 'tailwindcss' => 'Tailwind CSS' + ], + 'default' => [ + 'react' => '', + 'jquery' => 'jquery', + 'vuejs' => '', + 'datatables' => '', + 'tailwindcss' => '', + ], + 'subtitle' => '是否启用文件加速', + 'desc' => __('部分高级 WordPress 插件主题会包含最新前端资源,可在此勾选对应的 adminCDN 子库专项加速。', + 'wp-china-yes'), + ], + ], + ]); +} + + if (in_array('cravatar', $enabled_sections)) { + WP_CHINA_YES::createSection( $this->prefix, [ + 'title' => '初认头像', + 'icon' => 'icon icon-profile-circle', + 'fields' => [ [ 'id' => 'cravatar', 'type' => 'radio', @@ -147,7 +221,9 @@ HTML, ], ], ] ); - + } + + if (in_array('windfonts', $enabled_sections)) { WP_CHINA_YES::createSection( $this->prefix, [ 'title' => '文风字体', 'icon' => 'icon icon-text', @@ -168,28 +244,6 @@ HTML, 'desc' => __( '文风字体(Windfonts)为您的网站增添无限活力。专为中文网页设计,旨在提升用户阅读体验和视觉享受。新手使用请先查看字体使用说明。', 'wp-china-yes' ), ], - [ - 'id' => 'windfonts_typography', - 'type' => 'checkbox', - 'title' => __( '排印优化', 'wp-china-yes' ), - 'inline' => true, - 'options' => [ - 'corner' => '直角括号', - 'space' => '文本空格', - 'punctuation' => '标点显示', - 'indent' => '段首缩进', - 'align' => '两端对齐', - ], - 'default' => '', - 'subtitle' => '是否启用排印优化', - 'desc' => __( '文风字体排印优化可提升中文网页的视觉美感,适用于正式内容的网站。', - 'wp-china-yes' ), - 'dependency' => [ - 'windfonts', - 'any', - 'on,frontend,optimize', - ], - ], [ 'id' => 'windfonts_list', 'type' => 'group', @@ -271,81 +325,407 @@ HTML, ], ], [ - 'type' => 'content', - 'content' => '默认字体适配规则跟随插件更新,插件更新后可删除字体重新添加以获取最新适配规则', + 'id' => 'windfonts_typography', + 'type' => 'checkbox', + 'title' => __( '排印优化', 'wp-china-yes' ), + 'inline' => true, + 'options' => [ + 'corner' => '直角括号', + 'space' => '文本空格', + 'punctuation' => '标点显示', + 'indent' => '段首缩进', + 'align' => '两端对齐', + ], + 'default' => '', + 'subtitle' => '是否启用排印优化', + 'desc' => __( '文风字体排印优化可提升中文网页的视觉美感,适用于正式内容的网站。', + 'wp-china-yes' ), + ], + [ + 'id' => 'windfonts_typography', + 'type' => 'checkbox', + 'title' => __( '英文美化', 'wp-china-yes' ), + 'inline' => true, + 'options' => [ + 'align' => '排版优化', + 'corner' => '去双空格', + 'space' => '避免孤行', + 'punctuation' => '避免寡行', + 'indent' => '中英标点', + ], + 'default' => '', + 'subtitle' => '是否启用英文美化', + 'desc' => __( 'Windfonts 英文优化可提升英文网页的视觉美感,适用于多语内容网站。', + 'wp-china-yes' ), ], ], ] ); + } + if (in_array('motucloud', $enabled_sections)) { WP_CHINA_YES::createSection( $this->prefix, [ - 'title' => '广告屏蔽', - 'icon' => 'icon icon-eye-slash', + 'title' => '墨图云集', + 'icon' => 'icon icon-gallery', 'fields' => [ [ - 'id' => 'adblock', + 'id' => 'motucloud', 'type' => 'radio', - 'title' => __( '广告屏蔽', 'wp-china-yes' ), + 'title' => __( '墨图云集', 'wp-china-yes' ), 'inline' => true, 'options' => [ - 'on' => '启用', - 'off' => '不启用', + 'cn' => '默认线路', + 'global' => '国际线路', + 'weavatar' => '备用源(WeAvatar.com)', + 'off' => '不启用' ], - 'default' => 'off', - 'subtitle' => '是否启用后台广告屏蔽', - 'desc' => __( '文派叶子🍃(WPCY)独家特色功能,让您拥有清爽整洁的 WordPress 后台,清除各类常用插件侵入式后台广告、通知及无用信息,拿回后台控制权。', + 'default' => 'cn', + 'subtitle' => '是否启用墨图云集', + 'desc' => __( '墨图云集(MotuCloud)Gravatar 在中国的完美替代方案,您可以在 Cravatar.com 上传头像,更多选项请安装 WPAavatar 插件。可自选加速线路。', 'wp-china-yes' ), ], - [ - 'id' => 'adblock_rule', - 'type' => 'group', - 'title' => '规则列表', - 'subtitle' => '使用的广告屏蔽规则列表', - 'desc' => __( '支持添加多条广告屏蔽规则', - 'wp-china-yes' ), - - 'button_title' => '添加规则', - 'accordion_title_number' => true, - 'dependency' => [ - 'adblock', - 'any', - 'on', - ], - 'fields' => [ - [ - 'id' => 'name', - 'type' => 'text', - 'title' => __( '规则名称', 'wp-china-yes' ), - 'subtitle' => '自定义规则名称', - 'desc' => __( '自定义规则名称,方便识别', - 'wp-china-yes' ), - 'default' => '默认规则', - ], - [ - 'id' => 'selector', - 'type' => 'textarea', - 'title' => __( '应用元素', 'wp-china-yes' ), - 'subtitle' => '规则应用元素', - 'desc' => __( '设置规则应用的广告元素(CSS 选择器)', - 'wp-china-yes' ), - 'default' => '.wpseo_content_wrapper #sidebar-container, .yoast_premium_upsell, #wpseo-local-seo-upsell, .yoast-settings-section-upsell, #rank_math_review_plugin_notice, #bwp-get-social, .bwp-button-paypal, #bwp-sidebar-right, .tjcc-custom-css #postbox-container-1, .settings_page_wpcustomtaxfilterinadmin #postbox-container-1, #duplicate-post-notice #newsletter-subscribe-form, div[id^="dnh-wrm"], .notice-info.dst-notice, #googleanalytics_terms_notice, .fw-brz-dismiss, div.elementor-message[data-notice_id="elementor_dev_promote"], .notice-success.wpcf7r-notice, .dc-text__block.disable__comment__alert, #ws_sidebar_pro_ad, .pa-new-feature-notice, #redux-connect-message, .frash-notice-email, .frash-notice-rate, #smush-box-pro-features, #wp-smush-bulk-smush-upsell-row, #easy-updates-manager-dashnotice, #metaslider-optin-notice, #extendifysdk_announcement, .ml-discount-ad, .mo-admin-notice, .post-smtp-donation, div[data-dismissible="notice-owa-sale-forever"], .neve-notice-upsell, #pagelayer_promo, #simple-custom-post-order-epsilon-review-notice, .sfsi_new_prmium_follw, div.fs-slug-the-events-calendar[data-id="connect_account"], .tribe-notice-event-tickets-install, div.notice[data-notice="webp-converter-for-media"], .webpLoader__popup.webpPopup, .put-dismiss-notice, .wp-mail-smtp-review-notice, #wp-mail-smtp-pro-banner, body div.promotion.fs-notice, .analytify-review-thumbnail, .analytify-review-notice, .jitm-banner.is-upgrade-premium, div[data-name*="wbcr_factory_notice_adverts"], .sui-subscription-notice, #sui-cross-sell-footer, .sui-cross-sell-modules, .forminator-rating-notice, .sui-dashboard-upsell-upsell, .anwp-post-grid__rate, .cff-settings-cta, .cff-header-upgrade-notice, .cff_notice.cff_review_notice_step_1, .cff_get_pro_highlight, .aal-install-elementor, #ws_sidebar_pro_ad, .bold-timeline-lite-feedback-notice-wrapper, #elementskit-lite-go-pro-noti2ce, #elementskit-lite-_plugin_rating_msg_used_in_day, .yarpp-review-notice, #prli_review_notice, #webdados_invoicexpress_nag, #vc_license-activation-notice, .villatheme-dashboard.updated, #njt-FileBird-review, .notice[data-dismissible="pro_release_notice"], #thwvsf_review_request_notice, .wpdeveloper-review-notice, div[data-notice_type="tinvwl-user-review"], div[data-notice_type="tinvwl-user-premium"], #sg-backup-review-wrapper, .notice-wpmet-jhanda-getgenie-cross-promo, .notice-getgenie-go-pro-noti2ce, .notice-wpmet-jhanda-Summer2023, .thwcfd-review-wrapper, .woo-permalink-manager-banner, div.notice.bundle-notice, div.notice[data-dismissible="notice-owa-upgrade-forever"], .wpsm-acc-r-review-notice, .wpsm_ac_h_i, .edac-review-notice, .notice-iworks-rate, #monterinsights-admin-menu-tooltip, .monsterinsights-floating-bar, #monterinsights-admin-menu-tooltip, .exactmetrics-floating-bar, #metform-unsupported-metform-pro-version, .lwptocRate, .wpsm-tabs-b-review-notice, .quadlayers_woocommerce-direct-checkout_notice_delay, .iworks-rate-notice, #metform-_plugin_rating_msg_used_in_day, [id^="wpmet-jhanda-"], #wpmet-stories, #ti-optml-notice-helper, .menu-icon-dashboard-notice, .catch-bells-admin-notice, .wpdt-bundles-notice, .td-admin-web-services, .cf-plugin-popup, .wpzinc-review-media-library-organizer, .oxi-image-notice', - 'sanitize' => false, - ], - [ - 'id' => 'enable', - 'type' => 'switcher', - 'title' => __( '启用规则', 'wp-china-yes' ), - 'subtitle' => '是否启用该规则', - 'default' => true, - ], - ], - ], - [ - 'type' => 'content', - 'content' => '默认规则跟随插件更新,插件更新后可删除规则重新添加以获取更多最新屏蔽规则,出现异常,请尝试先停用规则排查原因。', - ], ], ] ); + } + if (in_array('fewmail', $enabled_sections)) { + WP_CHINA_YES::createSection( $this->prefix, [ + 'title' => '飞秒邮箱', + 'icon' => 'icon icon-sms-tracking', + 'fields' => [ + [ + 'id' => 'fewmail', + 'type' => 'radio', + 'title' => __( '飞秒邮箱', 'wp-china-yes' ), + 'inline' => true, + 'options' => [ + 'cn' => '默认线路', + 'global' => '国际线路', + 'weavatar' => '备用源(WeAvatar.com)', + 'off' => '不启用' + ], + 'default' => 'cn', + 'subtitle' => '是否启用飞秒邮箱', + 'desc' => __( '飞秒邮箱(FewMail)Gravatar 在中国的完美替代方案,您可以在 Cravatar.com 上传头像,更多选项请安装 WPAavatar 插件。可自选加速线路。', + 'wp-china-yes' ), + ], + ], + ] ); + } + + + if (in_array('wordyeah', $enabled_sections)) { + WP_CHINA_YES::createSection( $this->prefix, [ + 'title' => '无言会语', + 'icon' => 'icon icon-message-text', + 'fields' => [ + [ + 'id' => 'wordyeah', + 'type' => 'radio', + 'title' => __( '无言会语', 'wp-china-yes' ), + 'inline' => true, + 'options' => [ + 'cn' => '审核评论', + 'global' => '强化评论', + 'ban' => '禁用评论', + 'off' => '不启用' + ], + 'default' => 'cn', + 'subtitle' => '是否启用无言会语', + 'desc' => __( '无言会语(WordYeah)Gravatar 在中国的完美替代方案,您可以在 Cravatar.com 上传头像,更多选项请安装 WPAavatar 插件。可自选加速线路。', + 'wp-china-yes' ), + ], + ], + ] ); + } + + + if (in_array('blocks', $enabled_sections)) { + WP_CHINA_YES::createSection( $this->prefix, [ + 'title' => '笔笙区块', + 'icon' => 'icon icon-document-1', + 'fields' => [ + [ + 'id' => 'bisheng', + 'type' => 'radio', + 'title' => __( '笔笙区块', 'wp-china-yes' ), + 'inline' => true, + 'options' => [ + 'cn' => '审核评论', + 'global' => '强化评论', + 'ban' => '禁用评论', + 'off' => '不启用' + ], + 'default' => 'cn', + 'subtitle' => '是否启用笔笙区块', + 'desc' => __( '笔笙区块(Bisheng)Gravatar 在中国的完美替代方案,您可以在 Cravatar.com 上传头像,更多选项请安装 WPAavatar 插件。可自选加速线路。', + 'wp-china-yes' ), + ], + ], + ] ); + } + + + if (in_array('deerlogin', $enabled_sections)) { + WP_CHINA_YES::createSection( $this->prefix, [ + 'title' => '灯鹿用户', + 'icon' => 'icon icon-user-tick', + 'fields' => [ + [ + 'id' => 'deerlogin', + 'type' => 'radio', + 'title' => __( '灯鹿用户', 'wp-china-yes' ), + 'inline' => true, + 'options' => [ + 'cn' => '默认线路', + 'global' => '国际线路', + 'off' => '不启用' + ], + 'default' => 'cn', + 'subtitle' => '是否启用灯鹿用户', + 'desc' => __( '灯鹿用户(DeerLogin)Gravatar 在中国的完美替代方案,您可以在 Cravatar.com 上传头像,更多选项请安装 WPAavatar 插件。可自选加速线路。', + 'wp-china-yes' ), + ], + ], + ] ); + } + + + + if (in_array('waimao', $enabled_sections)) { + WP_CHINA_YES::createSection( $this->prefix, [ + 'title' => '跨飞外贸', + 'icon' => 'icon icon-chart-success', + 'fields' => [ + [ + 'id' => 'waimao', + 'type' => 'radio', + 'title' => __( '灯鹿用户', 'wp-china-yes' ), + 'inline' => true, + 'options' => [ + 'cn' => '默认线路', + 'global' => '国际线路', + 'off' => '不启用' + ], + 'default' => 'cn', + 'subtitle' => '是否启用灯鹿用户', + 'desc' => __( '灯鹿用户(DeerLogin)Gravatar 在中国的完美替代方案,您可以在 Cravatar.com 上传头像,更多选项请安装 WPAavatar 插件。可自选加速线路。', + 'wp-china-yes' ), + ], + ], + ] ); + } + + + + if (in_array('woocn', $enabled_sections)) { + WP_CHINA_YES::createSection( $this->prefix, [ + 'title' => 'Woo电商', + 'icon' => 'icon icon-shopping-cart', + 'fields' => [ + [ + 'id' => 'woocn', + 'type' => 'radio', + 'title' => __( 'Woo电商', 'wp-china-yes' ), + 'inline' => true, + 'options' => [ + 'cn' => '默认线路', + 'global' => '国际线路', + 'off' => '不启用' + ], + 'default' => 'cn', + 'subtitle' => '是否启用灯鹿用户', + 'desc' => __( '灯鹿用户(DeerLogin)Gravatar 在中国的完美替代方案,您可以在 Cravatar.com 上传头像,更多选项请安装 WPAavatar 插件。可自选加速线路。', + 'wp-china-yes' ), + ], + ], + ] ); + } + + + + if (in_array('lelms', $enabled_sections)) { + WP_CHINA_YES::createSection( $this->prefix, [ + 'title' => '乐尔达思', + 'icon' => 'icon icon-teacher', + 'fields' => [ + [ + 'id' => 'lelms', + 'type' => 'radio', + 'title' => __( '乐尔达思', 'wp-china-yes' ), + 'inline' => true, + 'options' => [ + 'cn' => '默认线路', + 'global' => '国际线路', + 'off' => '不启用' + ], + 'default' => 'cn', + 'subtitle' => '是否启用乐尔达思', + 'desc' => __( '乐尔达思(LeLMS)Gravatar 在中国的完美替代方案,您可以在 Cravatar.com 上传头像,更多选项请安装 WPAavatar 插件。可自选加速线路。', + 'wp-china-yes' ), + ], + ], + ] ); + } + + + + if (in_array('wapuu', $enabled_sections)) { + WP_CHINA_YES::createSection( $this->prefix, [ + 'title' => '瓦普文创', + 'icon' => 'icon icon-ticket-discount', + 'fields' => [ + [ + 'id' => 'wapuu', + 'type' => 'radio', + 'title' => __( '瓦普文创', 'wp-china-yes' ), + 'inline' => true, + 'options' => [ + 'cn' => '默认线路', + 'global' => '国际线路', + 'off' => '不启用' + ], + 'default' => 'cn', + 'subtitle' => '是否启用瓦普文创', + 'desc' => __( '瓦普文创(Wapuu)Gravatar 在中国的完美替代方案,您可以在 Cravatar.com 上传头像,更多选项请安装 WPAavatar 插件。可自选加速线路。', + 'wp-china-yes' ), + ], + ], + ] ); + } + + +if (in_array('adblock', $enabled_sections)) { +WP_CHINA_YES::createSection( $this->prefix, [ + 'title' => '广告拦截', + 'icon' => 'icon icon-eye-slash', + 'fields' => [ + [ + 'id' => 'adblock', + 'type' => 'radio', + 'title' => __( '广告拦截', 'wp-china-yes' ), + 'inline' => true, + 'options' => [ + 'on' => '启用', + 'off' => '不启用', + ], + 'default' => 'off', + 'subtitle' => '是否启用后台广告拦截', + 'desc' => __( '文派叶子🍃(WPCY.COM)独家特色功能,让您拥有清爽整洁的 WordPress 后台,清除各类常用插件侵入式后台广告、通知及无用信息,拿回后台控制权。', + 'wp-china-yes' ), + ], + [ + 'id' => 'adblock_rule', + 'type' => 'group', + 'title' => '规则列表', + 'subtitle' => '使用的广告拦截规则列表', + 'desc' => __( '默认规则跟随插件更新,插件更新后可删除规则重新添加以获取更多最新拦截规则,出现异常,请尝试先停用规则排查原因。', + 'wp-china-yes' ), + 'button_title' => '添加规则', + 'accordion_title_number' => true, + 'dependency' => [ + 'adblock', + 'any', + 'on', + ], + 'fields' => [ + [ + 'id' => 'name', + 'type' => 'text', + 'title' => __( '规则名称', 'wp-china-yes' ), + 'subtitle' => '自定义规则名称', + 'desc' => __( '自定义规则名称,方便识别', + 'wp-china-yes' ), + 'default' => '默认规则', + ], + [ + 'id' => 'selector', + 'type' => 'textarea', + 'title' => __( '应用元素', 'wp-china-yes' ), + 'subtitle' => '规则应用元素', + 'desc' => __( '设置规则应用的广告元素(CSS 选择器)', + 'wp-china-yes' ), + 'default' => '.wpseo_content_wrapper', + 'sanitize' => false, + ], + [ + 'id' => 'enable', + 'type' => 'switcher', + 'title' => __( '启用规则', 'wp-china-yes' ), + 'subtitle' => '是否启用该规则', + 'default' => true, + ], + ], + ], + ], +] ); + } + + +if (in_array('notice', $enabled_sections)) { +WP_CHINA_YES::createSection( $this->prefix, [ + 'title' => '通知管理', + 'icon' => 'icon icon-notification-bing', + 'fields' => [ + [ + 'id' => 'notice_block', + 'type' => 'radio', + 'title' => __('通知管理', 'wp-china-yes'), + 'inline' => true, + 'options' => [ + 'on' => '启用', + 'off' => '不启用', + ], + 'default' => 'off', + 'subtitle' => '是否启用后台通知管理', + 'desc' => __('管理和控制 WordPress 后台各类通知的显示。', 'wp-china-yes'), + ], + [ + 'id' => 'disable_all_notices', + 'type' => 'switcher', + 'title' => __('禁用所有通知', 'wp-china-yes'), + 'subtitle' => '一键禁用所有后台通知', + 'default' => false, + 'dependency' => ['notice_block', '==', 'on'], + ], + [ + 'id' => 'notice_control', + 'type' => 'checkbox', + 'title' => __('选择性禁用', 'wp-china-yes'), + 'inline' => true, + 'subtitle' => '选择需要禁用的通知类型', + 'desc' => __('可以按住 Ctrl/Command 键进行多选', 'wp-china-yes'), + 'chosen' => true, + 'multiple' => true, + 'options' => [ + 'core' => '核心更新通知', + 'error' => '错误通知', + 'warning' => '警告通知', + 'info' => '信息通知', + 'success' => '成功通知', + ], + 'dependency' => ['notice_block|disable_all_notices', '==|==', 'on|false'], + 'default' => [], + ], + [ + 'id' => 'notice_method', + 'type' => 'radio', + 'title' => __('禁用方式', 'wp-china-yes'), + 'inline' => true, + 'options' => [ + 'hook' => '移除钩子(推荐)', + 'css' => 'CSS隐藏', + 'both' => '双重保险', + ], + 'default' => 'hook', + 'dependency' => ['notice_block|disable_all_notices', '==|==', 'on|false'], + ], + ], +] ); + } + + + + if (in_array('plane', $enabled_sections)) { WP_CHINA_YES::createSection( $this->prefix, [ 'title' => '飞行模式', 'icon' => 'icon icon-airplane', @@ -371,7 +751,6 @@ HTML, 'subtitle' => '飞行模式使用的 URL 屏蔽规则列表', 'desc' => __( '支持添加多条 URL 屏蔽规则', 'wp-china-yes' ), - 'button_title' => '添加规则', 'accordion_title_number' => true, 'dependency' => [ @@ -411,8 +790,9 @@ HTML, ] ], ] ); + } - +if (in_array('monitor', $enabled_sections)) { WP_CHINA_YES::createSection( $this->prefix, [ 'title' => '脉云维护', 'icon' => 'icon icon-story', @@ -431,7 +811,7 @@ WP_CHINA_YES::createSection( $this->prefix, [ 'type' => 'switcher', 'default' => true, 'title' => '系统监控', - 'subtitle' => '自动监控站点系统运行状态', + 'subtitle' => '自动监控系统运行状态', 'desc' => __( '支持在管理后台页脚中显示系统运行状态,包括内存使用、CPU负载、MySQL版本、调试状态等信息', 'wp-china-yes' ), ], @@ -442,73 +822,399 @@ WP_CHINA_YES::createSection( $this->prefix, [ 'inline' => true, 'options' => [ 'memory_usage' => '内存使用量', - 'wp_limit' => 'WP内存限制', - 'server_ip' => '服务器IP', - 'hostname' => '主机名', + 'wp_limit' => '内存限制', + 'server_ip' => '服务器 IP', + 'hostname' => '主机名称', 'os_info' => '操作系统', - 'php_info' => 'PHP信息', + 'mysql_version'=> 'MySQL版本', 'cpu_usage' => 'CPU使用率', 'debug_status' => '调试状态', - 'mysql_version'=> 'MySQL版本' + 'php_info' => 'PHP 版本' ], 'default' => [ 'memory_usage', 'wp_limit', 'server_ip', - 'os_info', 'php_info', - 'cpu_usage', - 'debug_status', - 'mysql_version' ], 'subtitle' => '选择页脚要显示的信息', 'desc' => __( '为网站维护人员提供参考依据,无需登录服务器即可查看相关信息参数','wp-china-yes' ), 'dependency' => ['memory', '==', 'true'], ], [ - 'type' => 'content', - 'content' => '启用隐藏设置前请务必的保存或收藏当前设置页面 URL,否则您将无法再次进入插件设置页面', + 'id' => 'disk', + 'type' => 'switcher', + 'default' => true, + 'title' => '站点监控', + 'subtitle' => '自动监控站点运行状态', + 'desc' => __( '支持在管理后台页脚中显示系统运行状态,包括内存使用、CPU负载、MySQL版本、调试状态等信息', + 'wp-china-yes' ), + ], + [ + 'id' => 'disk_display', + 'type' => 'checkbox', + 'title' => __( '显示参数', 'wp-china-yes' ), + 'inline' => true, + 'options' => [ + 'disk_usage' => '磁盘用量', + 'disk_limit' => '剩余空间', + 'media_num' => '媒体数量', + 'admin_num' => '管理数量', + 'user_num' => '用户数量', + 'lastlogin' => '上次登录', + ], + 'default' => [ + 'disk_usage', + 'disk_limit', + 'media_num', + 'admin_num', + ], + 'subtitle' => '选择概览要显示的信息', + 'desc' => __( '为网站管理人员提供参考依据,进入后台仪表盘即可查看相关信息参数','wp-china-yes' ), + 'dependency' => ['disk', '==', 'true'], + ], +[ + 'id' => 'maintenance_mode', + 'type' => 'switcher', + 'default' => false, + 'title' => '启用维护模式', + 'subtitle' => '启用或禁用网站维护模式', + 'desc' => __( '启用后,网站将显示维护页面,只有管理员可以访问。', 'wp-china-yes' ), +], +[ + 'id' => 'maintenance_settings', + 'type' => 'fieldset', + 'title' => '维护模式设置', + 'fields' => [ + [ + 'id' => 'maintenance_title', + 'type' => 'text', + 'title' => '页面标题', + 'default' => '网站维护中', + ], + [ + 'id' => 'maintenance_heading', + 'type' => 'text', + 'title' => '主标题', + 'default' => '网站维护中', + ], + [ + 'id' => 'maintenance_message', + 'type' => 'textarea', + 'title' => '维护说明', + 'default' => '网站正在进行例行维护,请稍后访问。感谢您的理解与支持!', + ], + ], + 'dependency' => ['maintenance_mode', '==', 'true'], +] + + ], +] ); + } + + if (in_array('security', $enabled_sections)) { + WP_CHINA_YES::createSection( $this->prefix, [ + 'title' => '雨滴安全', + 'icon' => 'icon icon-shield', + 'fields' => [ + [ + 'id' => 'yoodefender', + 'type' => 'radio', + 'title' => __( '雨滴安全', 'wp-china-yes' ), + 'inline' => true, + 'options' => [ + 'cn' => '默认线路', + 'global' => '国际线路', + 'off' => '不启用' + ], + 'default' => 'cn', + 'subtitle' => '是否启用雨滴安全', + 'desc' => __( '雨滴安全(YooDefender)安全设置可以帮助增强 WordPress 的安全性,请根据实际需求启用相关选项。更多选项请安装 WPBan 插件。可自选加速线路。', + 'wp-china-yes' ), + ], + [ + 'id' => 'disallow_file_edit', + 'type' => 'switcher', + 'title' => __( '禁用文件编辑', 'wp-china-yes' ), + 'subtitle' => '禁用 WordPress 后台的主题和插件编辑器', + 'default' => true, + 'desc' => __( '启用后,用户无法通过 WordPress 后台编辑主题和插件文件。', 'wp-china-yes' ), + ], + [ + 'id' => 'disallow_file_mods', + 'type' => 'switcher', + 'title' => __( '禁用文件修改', 'wp-china-yes' ), + 'subtitle' => '禁止用户安装、更新或删除主题和插件', + 'default' => false, + 'desc' => __( '启用后,用户无法通过 WordPress 后台安装、更新或删除主题和插件。', 'wp-china-yes' ), ], ], ] ); - + } + if (in_array('performance', $enabled_sections)) { WP_CHINA_YES::createSection( $this->prefix, [ - 'title' => '品牌白标', - 'icon' => 'icon icon-password-check', - 'fields' => [ + 'title' => '性能优化', + 'icon' => 'icon icon-speedometer', + 'fields' => [ + [ + 'id' => 'performance', + 'type' => 'switcher', + 'title' => __( '性能优化', 'wp-china-yes' ), + 'subtitle' => '是否启用性能优化', + 'default' => true, + 'desc' => __( '性能优化设置可以帮助提升 WordPress 的运行效率,请根据服务器配置合理调整。', 'wp-china-yes' ), + ], + + [ + 'id' => 'wp_memory_limit', + 'type' => 'text', + 'title' => __( '内存限制', 'wp-china-yes' ), + 'subtitle' => '设置 WordPress 内存限制', + 'default' => '40M', + 'desc' => __( '设置 WordPress 的内存限制,例如 64M、128M、256M 等。', 'wp-china-yes' ), + 'dependency' => ['performance', '==', 'true'], + + ], + [ + 'id' => 'wp_max_memory_limit', + 'type' => 'text', + 'title' => __( '后台内存限制', 'wp-china-yes' ), + 'subtitle' => '设置 WordPress 后台内存限制', + 'default' => '256M', + 'desc' => __( '设置 WordPress 后台的内存限制,例如 128M、256M、512M 等。', 'wp-china-yes' ), + 'dependency' => ['performance', '==', 'true'], + + ], + [ + 'id' => 'wp_post_revisions', + 'type' => 'number', + 'title' => __( '文章修订版本', 'wp-china-yes' ), + 'subtitle' => '控制文章修订版本的数量', + 'default' => -1, // -1 表示启用所有修订版本 + 'desc' => __( '设置为 0 禁用修订版本,或设置为一个固定值(如 5)限制修订版本数量。', 'wp-china-yes' ), + 'dependency' => ['performance', '==', 'true'], + + ], + [ + 'id' => 'autosave_interval', + 'type' => 'number', + 'title' => __( '自动保存间隔', 'wp-china-yes' ), + 'subtitle' => '设置文章自动保存的时间间隔(秒)', + 'default' => 60, + 'desc' => __( '设置文章自动保存的时间间隔,默认是 60 秒。', 'wp-china-yes' ), + 'dependency' => ['performance', '==', 'true'], + + ], + ], + +] ); + } + + if (in_array('brand', $enabled_sections)) { + WP_CHINA_YES::createSection( $this->prefix, [ + 'title' => '品牌白标', + 'icon' => 'icon icon-password-check', + 'fields' => [ + [ + 'id' => 'custom_name', + 'type' => 'text', + 'title' => '品牌白标', + 'subtitle' => '自定义插件显示品牌名', + 'desc' => __( '专为 WordPress 建站服务商和代理机构提供的自定义品牌 OEM 功能,输入您的品牌词启用后生效', 'wp-china-yes' ), + 'default' => "文派叶子", + ], + [ + 'id' => 'header_logo', + 'type' => 'media', + 'title' => '品牌 Logo', + 'subtitle' => '自定义插件显示品牌 Logo', + 'library' => 'image', + 'desc' => '上传或选择媒体库的图片作为品牌 Logo', + 'default' => ['url' => plugins_url('wp-china-yes/assets/images/wpcy-logo.png')], // 设置默认 Logo + ], [ - 'id' => 'custom_name', - 'type' => 'text', - 'title' => '品牌白标', - 'subtitle' => '自定义插件显示品牌名', - 'desc' => __( '专为 WordPress 建站服务商和代理机构提供的自定义品牌 OEM 功能,输入您的品牌词启用后生效', + 'id' => 'hide_option', + 'type' => 'switcher', + 'default' => false, + 'title' => '隐藏设置', + 'subtitle' => '隐藏插件设置信息', + 'desc' => __( '如果您不希望让客户知道本站启用了文派叶子🍃(WPCY.COM)插件及服务,可开启此选项。', 'wp-china-yes' ), - 'default' => "WP-China-Yes", ], - [ - 'type' => 'content', - 'content' => '启用隐藏设置前请务必的保存或收藏当前设置页面 URL,否则您将无法再次进入插件设置页面', - ], - ], - ] ); - + [ + 'id' => 'hide_elements', + 'type' => 'checkbox', + 'title' => '隐藏元素', + 'subtitle' => '选择需要隐藏的元素', + 'desc' => __( '注意:启用[隐藏菜单]前请务必保存或收藏当前设置页面 URL,否则将无法再次进入插件页面', 'wp-china-yes' ), + 'inline' => true, + 'options' => [ + 'hide_logo' => '隐藏 Logo', + 'hide_title' => '隐藏插件名', + 'hide_version' => '隐藏版本号', + 'hide_copyright' => '隐藏版权', + 'hide_menu' => '隐藏菜单', + ], + 'default' => [], // 默认不隐藏任何元素 + 'dependency' => ['hide_option', '==', 'true'], // 只有在 hide 为 true 时显示 + ], + [ + 'id' => 'enable_custom_rss', + 'type' => 'switcher', + 'title' => '品牌新闻', + 'subtitle' => '是否启用定制新闻源', + 'desc' => '启用后,您可以自定义[文派茶馆]新闻源,输入自己的 RSS 源之后即可显示信息流。', + 'default' => false + ], + [ + 'id' => 'custom_rss_url', + 'type' => 'text', + 'title' => '自定义 RSS 源', + 'subtitle' => '添加自定义 RSS 新闻源', + 'desc' => '请输入有效的 RSS Feed URL,长期无更新时会恢复显示默认新闻源。', + 'dependency' => ['enable_custom_rss', '==', true] + ], + [ + 'id' => 'custom_rss_refresh', + 'type' => 'select', + 'title' => 'RSS 刷新频率', + 'options' => [ + '1800' => '30分钟', + '3600' => '1小时', + '7200' => '2小时', + '14400' => '4小时', + '28800' => '8小时' + ], + 'default' => '3600', + 'dependency' => ['enable_custom_rss', '==', true] + ], + [ + 'id' => 'rss_display_options', + 'type' => 'checkbox', + 'inline' => true, + 'title' => 'RSS 显示选项', + 'subtitle' => '选择需要显示的内容', + 'options' => [ + 'show_date' => '显示日期', + 'show_summary' => '显示摘要', + 'show_footer' => '显示页脚', + ], + 'default' => ['show_date', 'show_summary', 'show_footer'], // 默认全部勾选 + 'dependency' => ['enable_custom_rss', '==', true] + ], + + ], +]); + } + WP_CHINA_YES::createSection( $this->prefix, [ 'title' => '其他设置', 'icon' => 'icon icon-setting', 'fields' => [ - [ - 'id' => 'hide', - 'type' => 'switcher', - 'default' => false, - 'title' => '隐藏设置', - 'subtitle' => '隐藏插件设置入口', - 'desc' => __( '如果您不希望让客户知道本站启用了文派叶子🍃(WP-China-Yes)插件及服务,可开启此选项', - 'wp-china-yes' ), - ], - ], + [ + 'id' => 'enable_debug', + 'type' => 'switcher', + 'title' => __( '调试模式', 'wp-china-yes' ), + 'subtitle' => '启用或禁用调试模式', + 'default' => false, + 'desc' => __( '启用后,WordPress 将显示 PHP 错误、警告和通知。临时使用完毕后,请保持禁用此选项。', 'wp-china-yes' ), + ], + [ + 'id' => 'debug_options', + 'type' => 'checkbox', + 'title' => __( '调试选项', 'wp-china-yes' ), + 'subtitle' => '选择要启用的调试功能', + 'dependency' => [ 'enable_debug', '==', 'true' ], + 'options' => [ + 'wp_debug_log' => 'WP_DEBUG_LOG 记录日志', + 'wp_debug_display' => 'WP_DEBUG_DISPLAY 页面显示调试信息', + 'script_debug' => 'SCRIPT_DEBUG 加载未压缩的前端资源', + 'save_queries' => 'SAVEQUERIES 记录数据库查询 ', + ], + 'default' => [ + 'wp_debug_log' => true, + ], + 'desc' => __( '注意:调试模式仅适用于开发和测试环境,不建议在生产环境中长时间启用。选择要启用的调试功能,适用于开发和测试环境。', 'wp-china-yes' ), + ], + [ + 'id' => 'enable_db_tools', + 'type' => 'switcher', + 'title' => __( '数据库工具', 'wp-china-yes' ), + 'subtitle' => '启用或禁用数据库工具', + 'default' => false, + 'desc' => __( '启用后,您可以在下方访问数据库修复工具。定期使用完毕后,请保持禁用此选项。', 'wp-china-yes' ), + ], + [ + 'id' => 'db_tools_link', + 'type' => 'content', + 'title' => __( '数据库修复工具', 'wp-china-yes' ), + 'subtitle' => '打开数据库修复工具', + 'dependency' => [ 'enable_db_tools', '==', 'true' ], + 'content' => '' . esc_html__( '打开数据库修复工具', 'wp-china-yes' ) . '', + ], +[ + 'id' => 'enable_sections', + 'type' => 'switcher', + 'title' => '高级定制', + 'subtitle' => '启用或禁用功能选项卡', + 'default' => true, + 'desc' => __( '启用后,您可以在下方选用文派叶子功能,特别提醒:禁用对应功能后再次启用需重新设置。', 'wp-china-yes' ), +], +[ + 'id' => 'enabled_sections', + 'type' => 'checkbox', + 'title' => '功能选项卡', + 'subtitle' => '选择要显示的功能选项卡', + 'inline' => true, + 'options' => [ + 'store' => '应用市场', + 'admincdn' => '萌芽加速', + 'cravatar' => '初认头像', + 'windfonts' => '文风字体', + 'motucloud' => '墨图云集', + 'fewmail' => '飞秒邮箱', + 'wordyeah' => '无言会语', + 'blocks' => '笔笙区块', + 'deerlogin' => '灯鹿用户', + 'waimao' => '跨飞外贸', + 'woocn' => 'Woo电商', + 'lelms' => '乐尔达思', + 'wapuu' => '瓦普文创', + 'adblock' => '广告拦截', + 'notice' => '通知管理', + 'plane' => '飞行模式', + 'monitor' => '脉云维护', + 'forums' => '赛博论坛', + 'monitor' => '脉云维护', + 'forms' => '重力表单', + 'panel' => '天控面板', + 'security' => '雨滴安全', + 'domain' => '蛋叮域名', + 'performance' => '性能优化', + 'brand' => '品牌白标', + 'sms' => '竹莺短信', + 'chat' => '点洽客服', + 'translate' => '文脉翻译', + 'ecosystem' => '生态系统', + 'deer' => '建站套件', + 'docs' => '帮助文档', + 'about' => '关于插件', + 'welcome' => '欢迎使用' + ], + 'default' => ['welcome', 'store', 'admincdn', 'cravatar', 'other', 'about'], + 'desc' => '选择要在设置页面显示的功能选项卡,未选择的选项卡将被隐藏', + 'dependency' => ['enable_sections', '==', 'true'], +] + + ], ] ); + if (in_array('deer', $enabled_sections)) { + $settings_page_url = $this->get_settings_page_url(); + ob_start(); + include CHINA_YES_PLUGIN_PATH . 'templates/website-section.php'; + $website_content = ob_get_clean(); WP_CHINA_YES::createSection( $this->prefix, [ 'title' => '建站套件', @@ -516,49 +1222,58 @@ WP_CHINA_YES::createSection( $this->prefix, [ 'fields' => [ [ 'type' => 'content', - 'content' => - <<

开源建站

文派寻鹿🦌(WP Deer)建站套件是由文派科技官方提供的企业建站产品集合,代码均为 100% GPL 开源,无任何加密隐藏。

SEO 优化技巧

WPXYZ.com ↗

网站政策合规

WPICP.com ↗

软件开发工具

WPSDK.com ↗
-HTML, + 'content' =>$website_content, ] ], ] ); + } + + + if (in_array('docs', $enabled_sections)) { + WP_CHINA_YES::createSection( $this->prefix, [ + 'title' => '帮助文档', + 'icon' => 'icon icon-lifebuoy', + 'fields' => [ + [ + 'id' => 'docs', + 'type' => 'radio', + 'title' => __( '帮助文档', 'wp-china-yes' ), + 'inline' => true, + 'options' => [ + 'cn' => '默认线路', + 'global' => '国际线路', + 'off' => '不启用' + ], + 'default' => 'cn', + 'subtitle' => '是否启用灯鹿用户', + 'desc' => __( '灯鹿用户(DeerLogin)Gravatar 在中国的完美替代方案,您可以在 Cravatar.com 上传头像,更多选项请安装 WPAavatar 插件。可自选加速线路。', + 'wp-china-yes' ), + ], + ], + ] ); + } - + if (in_array('about', $enabled_sections)) { + $settings_page_url = $this->get_settings_page_url(); + ob_start(); + include CHINA_YES_PLUGIN_PATH . 'templates/about-section.php'; + $about_content = ob_get_clean(); + WP_CHINA_YES::createSection( $this->prefix, [ 'title' => '关于插件', 'icon' => 'icon icon-info-circle', 'fields' => [ [ 'type' => 'content', - 'content' => - <<
-

项目简介

文派(WordPress)中国本土化项目始于 2019 年,由 文派叶子🍃(WPCY) 插件开启,其前身为 WP-China-Yes。 - -

2023 年 5 月,文派科技完成对该项目的收购,并对其进行了全面的品牌重塑。

-

赞助支持

特别感谢以下企业品牌对文派项目提供的资金资源支持。早期伙伴未来有机会共享文派生态资源,期待社会各界参与。

开发 & 贡献者

100% 开源代码,诚邀您一起参与文派 (WordPress) 软件国产化进程,打造属于自己的开源自助建站程序。

-HTML, + 'content' =>$about_content, ] ], ] ); } - + } + /** * 加载后台资源 */ @@ -582,6 +1297,8 @@ HTML, return $plugins; } ); + + // 插件页设置 add_filter( 'plugin_action_links', function ( $links, $file ) { if ( 'wp-china-yes/wp-china-yes.php' !== $file ) { @@ -595,4 +1312,4 @@ HTML, return $links; }, 10, 2 ); } -} +} \ No newline at end of file diff --git a/Service/Super.php b/Service/Super.php index 7f664ca..8298bef 100755 --- a/Service/Super.php +++ b/Service/Super.php @@ -31,148 +31,152 @@ class Super { /** * 添加「文派茶馆」小组件 */ - if ( is_admin() ) { - add_action( 'wp_dashboard_setup', function () { - global $wp_meta_boxes; +if ( is_admin() ) { + add_action( 'wp_dashboard_setup', function () { + global $wp_meta_boxes; - unset( $wp_meta_boxes['dashboard']['side']['core']['dashboard_primary'] ); - wp_add_dashboard_widget( 'wenpai_tea', '文派茶馆', function () { - echo << -
+ unset( $wp_meta_boxes['dashboard']['side']['core']['dashboard_primary'] ); + wp_add_dashboard_widget( 'wenpai_tea', '文派茶馆', function () { + $default_rss_url = 'https://wptea.com/feed/'; + $custom_rss_url = $this->settings['custom_rss_url'] ?? ''; + $refresh_interval = $this->settings['custom_rss_refresh'] ?? 3600; + + $rss_display_options = $this->settings['rss_display_options'] ?? ['show_date', 'show_summary', 'show_footer']; + if (!is_array($rss_display_options)) { + $rss_display_options = explode(',', $rss_display_options); + } + + // 获取默认的 RSS 源内容 + $default_rss = fetch_feed($default_rss_url); + $default_items = []; + if (!is_wp_error($default_rss)) { + $default_items = $default_rss->get_items(0, 5); + } + + $custom_items = []; + $custom_rss = null; + $custom_rss_latest_date = 0; + + if (!empty($custom_rss_url)) { + $transient_key = 'wenpai_tea_custom_rss_' . md5($custom_rss_url); + $cached_custom_items = get_transient($transient_key); + + if (false === $cached_custom_items) { + $custom_rss = fetch_feed($custom_rss_url); + if (!is_wp_error($custom_rss)) { + $custom_items = $custom_rss->get_items(0, 2); + if (!empty($custom_items)) { + $custom_rss_latest_date = $custom_items[0]->get_date('U'); + } + + set_transient($transient_key, $custom_items, $refresh_interval); + } + } else { + $custom_items = $cached_custom_items; + if (!empty($custom_items)) { + $custom_rss_latest_date = $custom_items[0]->get_date('U'); + } + } + } + + $three_days_ago = time() - (3 * 24 * 60 * 60); + if ($custom_rss_latest_date > $three_days_ago) { + $items = array_merge(array_slice($default_items, 0, 3), $custom_items); + } else { + $items = array_slice($default_items, 0, 5); + } + + if (is_wp_error($custom_rss)) { + $items = array_slice($default_items, 0, 5); + } + + echo << +
HTML; - wp_widget_rss_output( 'https://wptea.com/feed/', [ - 'items' => 5, - 'show_summary' => 1, - ] ); - echo << -
- - + foreach ($items as $item) { + echo '
'; + echo '' . esc_html($item->get_title()) . ''; + if (in_array('show_date', $rss_display_options)) { + echo '' . esc_html($item->get_date('Y.m.d')) . ''; + } + if (in_array('show_summary', $rss_display_options)) { + echo '
' . esc_html(wp_trim_words($item->get_description(), 45, '...')) . '
'; + } + echo '
'; + } + + echo << +
HTML; - } ); - } ); - add_action( 'wp_network_dashboard_setup', function () { - global $wp_meta_boxes; - - unset( $wp_meta_boxes['dashboard-network']['side']['core']['dashboard_primary'] ); - wp_add_dashboard_widget( 'wenpai_tea', '文派茶馆', function () { - echo << -
+ if (in_array('show_footer', $rss_display_options)) { + echo << + 文派开源 + | + 支持论坛 + | + 翻译平台 + | + 订阅推送 +

HTML; - wp_widget_rss_output( 'https://wptea.com/feed/', [ - 'items' => 5, - 'show_summary' => 1, - ] ); - echo << -
- - + } + echo << + #wenpai_tea .rss-widget { + padding: 0 12px; + } + #wenpai_tea .rss-widget:last-child { + border-bottom: none; + padding-bottom: 8px; + } + #wenpai_tea .rss-item { + margin-bottom: 10px; + padding-bottom: 10px; + border-bottom: 1px solid #eee; + } + #wenpai_tea .rss-item:last-child { + border-bottom: none; + margin-bottom: 0; + padding-bottom: 0; + } + #wenpai_tea .rss-item a { + text-decoration: none; + display: block; + margin-bottom: 5px; + } + #wenpai_tea .rss-date { + color: #666; + font-size: 12px; + display: block; + margin-bottom: 8px; + } + #wenpai_tea .rss-summary { + color: #444; + font-size: 13px; + line-height: 1.5; + } + #wenpai_tea .community-events-footer { + margin-top: 15px; + padding-top: 15px; + padding-bottom: 5px; + border-top: 1px solid #eee; + text-align: center; + } + #wenpai_tea .community-events-footer a { + text-decoration: none; + margin: 0 5px; + } + #wenpai_tea .community-events-footer a:hover { + text-decoration: underline; + } + HTML; - } ); - } ); - } - - /** - * WordPress 核心静态文件链接替换 - */ - if ( is_admin() && ! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) { - if ( - in_array( 'admin', (array) $this->settings['admincdn'] ) && - ! stristr( $GLOBALS['wp_version'], 'alpha' ) && - ! stristr( $GLOBALS['wp_version'], 'beta' ) && - ! stristr( $GLOBALS['wp_version'], 'RC' ) - ) { - // 禁用合并加载,以便于使用公共资源节点 - global $concatenate_scripts; - $concatenate_scripts = false; - - $this->page_str_replace( 'init', 'preg_replace', [ - '~' . home_url( '/' ) . '(wp-admin|wp-includes)/(css|js)/~', - sprintf( 'https://wpstatic.admincdn.com/%s/$1/$2/', $GLOBALS['wp_version'] ) - ] ); - } - } - - /** - * adminCDN - */ - if ( ! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) { - $this->load_admincdn(); - } + }); + }); +} /** * 初认头像 @@ -214,6 +218,14 @@ HTML; add_action( 'admin_head', [ $this, 'load_adblock' ] ); } } +/** + * 通知管理 + */ +if ( ! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) { + if ( ! empty( $this->settings['notice_block'] ) && $this->settings['notice_block'] == 'on' ) { + add_action( 'admin_head', [ $this, 'load_notice_management' ] ); + } +} /** * 飞行模式 @@ -223,70 +235,7 @@ HTML; } } - /** - * 加载 adminCDN - */ - public function load_admincdn() { - /** - * 前台静态加速 - */ - if ( in_array( 'frontend', (array) $this->settings['admincdn'] ) ) { - $this->page_str_replace( 'template_redirect', 'preg_replace', [ - '#(?<=[(\"\'])(?:' . quotemeta( home_url() ) . ')?/(?:((?:wp-content|wp-includes)[^\"\')]+\.(css|js)[^\"\')]+))(?=[\"\')])#', - 'https://public.admincdn.com/$0' - ] ); - } - /** - * Google 字体替换 - */ - if ( in_array( 'googlefonts', (array) $this->settings['admincdn'] ) ) { - $this->page_str_replace( 'init', 'str_replace', [ - 'fonts.googleapis.com', - 'googlefonts.admincdn.com' - ] ); - } - - /** - * Google 前端公共库替换 - */ - if ( in_array( 'googleajax', (array) $this->settings['admincdn'] ) ) { - $this->page_str_replace( 'init', 'str_replace', [ - 'ajax.googleapis.com', - 'googleajax.admincdn.com' - ] ); - } - - /** - * CDNJS 前端公共库替换 - */ - if ( in_array( 'cdnjs', (array) $this->settings['admincdn'] ) ) { - $this->page_str_replace( 'init', 'str_replace', [ - 'cdnjs.cloudflare.com/ajax/libs', - 'cdnjs.admincdn.com' - ] ); - } - - /** - * jsDelivr 前端公共库替换 - */ - if ( in_array( 'jsdelivr', (array) $this->settings['admincdn'] ) ) { - $this->page_str_replace( 'init', 'str_replace', [ - 'cdn.jsdelivr.net', - 'jsd.admincdn.com' - ] ); - } - - /** - * BootstrapCDN 前端公共库替换 - */ - if ( in_array( 'bootstrapcdn', (array) $this->settings['admincdn'] ) ) { - $this->page_str_replace( 'init', 'str_replace', [ - 'maxcdn.bootstrapcdn.com', - 'jsd.admincdn.com' - ] ); - } - } /** @@ -470,6 +419,7 @@ HTML // 支持中文排版两端对齐 if ( in_array( 'align', (array) $this->settings['windfonts_typography'] ) ) { add_action( 'wp_head', function () { + if ( is_single() ) { // 仅在文章页面生效 echo ''; + } } ); } } - /** - * 加载广告拦截 - */ - public function load_adblock() { - foreach ( (array) $this->settings['adblock_rule'] as $rule ) { - if ( empty( $rule['enable'] ) ) { - continue; - } - if ( empty( $rule['selector'] ) ) { - continue; - } - echo sprintf( << - %s { - display: none!important; - } - -HTML - , - htmlspecialchars_decode( $rule['selector'] ) - ); - } - } +/** + * 加载广告拦截 + */ +public function load_adblock() { + if (empty($this->settings['adblock']) || $this->settings['adblock'] !== 'on') { + return; + } + + // 处理广告拦截规则 + foreach ( (array) $this->settings['adblock_rule'] as $rule ) { + if ( empty( $rule['enable'] ) || empty( $rule['selector'] ) ) { + continue; + } + echo sprintf( '', + htmlspecialchars_decode( $rule['selector'] ) + ); + } +} + + +/** + * 加载通知管理 + */ +public function load_notice_management() { + // 首先检查是否启用通知管理功能 + if (empty($this->settings['notice_block']) || $this->settings['notice_block'] !== 'on') { + return; + } + + // 检查是否启用全局禁用 + if (!empty($this->settings['disable_all_notices'])) { + $this->disable_all_notices(); + echo ''; + return; + } + + // 处理选择性禁用 + $selected_notices = $this->settings['notice_control'] ?? []; + $notice_method = $this->settings['notice_method'] ?? 'hook'; + + if (!empty($selected_notices)) { + // 处理钩子移除 + if (in_array($notice_method, ['hook', 'both'])) { + $this->disable_selected_notices($selected_notices); + } + + // 处理 CSS 隐藏 + if (in_array($notice_method, ['css', 'both'])) { + $this->apply_notice_css($selected_notices); + } + } +} + +/** + * 应用通知 CSS 隐藏 + */ +private function apply_notice_css($selected_notices) { + $selectors = []; + foreach ($selected_notices as $type) { + switch ($type) { + case 'error': + $selectors[] = '.notice-error,.error'; + break; + case 'warning': + $selectors[] = '.notice-warning'; + break; + case 'success': + $selectors[] = '.notice-success,.updated'; + break; + case 'info': + $selectors[] = '.notice-info'; + break; + case 'core': + $selectors[] = '.update-nag'; + break; + } + } + + if (!empty($selectors)) { + echo ''; + } +} + +/** + * 移除所有管理通知 + */ +private function disable_all_notices() { + remove_all_actions('admin_notices'); + remove_all_actions('all_admin_notices'); + remove_all_actions('user_admin_notices'); + remove_all_actions('network_admin_notices'); +} + +/** + * 禁用选定的通知类型 + */ +private function disable_selected_notices($types) { + if (in_array('core', $types)) { + remove_action('admin_notices', 'update_nag', 3); + remove_action('admin_notices', 'maintenance_nag', 10); + add_filter('pre_site_transient_update_core', '__return_null'); + add_filter('pre_site_transient_update_plugins', '__return_null'); + add_filter('pre_site_transient_update_themes', '__return_null'); + } + +} + + /** * 加载飞行模式 diff --git a/assets/css/setting.css b/assets/css/setting.css index f69d956..f64de46 100755 --- a/assets/css/setting.css +++ b/assets/css/setting.css @@ -82,7 +82,7 @@ margin-right: 0px; } -.wp_china_yes-field.wp_china_yes-field-radio, .wp_china_yes-field-checkbox, .wp_china_yes-field-group, .wp_china_yes-field-switcher, .wp_china_yes-field-text { +.wp_china_yes-field { padding: 8%; background-color: #ffffff; margin: 5% 0; @@ -90,10 +90,32 @@ box-shadow: 0 0 0 1px #ccd0d4, 0 1px 1px 1px rgba(0, 0, 0, .04); } +.wp_china_yes-field.wp_china_yes-field-content { + padding: 0; + background-color: rgba(255, 255, 255, 0); + margin: 0; + border-radius: 0; + box-shadow: unset; +} .wp_china_yes-field-checkbox .wp_china_yes--inline-list li, .wp_china_yes-field-radio .wp_china_yes--inline-list li { margin-right: 20px; } +.wp_china_yes-copyright p { + font-size: 12px; + color: #999; +} +.wp_china_yes-copyright { + float: left; + margin-top: 25px; + margin-bottom: 35px; + text-align: center; + width: 100%; + font-size: 12px; + zoom: 90%; + +} + .wp_china_yes-section { margin: 50px auto; max-width: 1000px; @@ -108,9 +130,8 @@ .wp_china_yes-field+.wp_china_yes-field { border-top: 0px solid #eee; } - -.wp_china_yes-field.wp_china_yes-field-content { - padding: 0px; +.wp_china_yes-field-fieldset .wp_china_yes-fieldset-content { + border: 0px solid #ccd0d4; } .wp_china_yes-section-title { diff --git a/assets/images/wpcy-logo.png b/assets/images/wpcy-logo.png new file mode 100755 index 0000000000000000000000000000000000000000..2f8f1323302f61d28b99dfd6ca012bb7bbaeabfe GIT binary patch literal 32163 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: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 eaCr0oC%^#Ztvv=C<7Qm|0000请先填写 RSS 源地址'); + return; + } + + button.prop("disabled", true); + result.html("测试中..."); + + $.post(ajaxurl, { + action: "test_rss_feed", + _ajax_nonce: '', + feed_url: feedUrl + }) + .done(function(response) { + result.html(response.success ? + '' + response.data + '' : + '' + response.data + '' + ); + }) + .fail(function() { + result.html('测试失败'); + }) + .always(function() { + button.prop("disabled", false); + }); + }); + }); diff --git a/changelog.txt b/changelog.txt old mode 100644 new mode 100755 diff --git a/composer.json b/composer.json old mode 100644 new mode 100755 diff --git a/composer.lock b/composer.lock old mode 100644 new mode 100755 diff --git a/copyright.txt b/copyright.txt old mode 100644 new mode 100755 index 558b6d2..df51603 --- a/copyright.txt +++ b/copyright.txt @@ -1,28 +1,36 @@ ------------------------------------------------------------------------------------------ -**Copyright © 2025 WenPai.cn (Guangzhou) Technology Co., Ltd.** ------------------------------------------------------------------------------------------ - -**Compliance Terms** -Everyone is free to use Wenpai open-source software. However, in China, when using Wenpai software, you must adhere to the GPL open-source license, respect the intellectual property rights of others, and prioritize compliance with Chinese laws in case of any conflicts. - -**Fork Declaration** -To ensure the long-term availability of various Wenpai (WordPress) infrastructure components, individuals with the necessary capabilities are welcome to establish their own service sources or fork Wenpai Leaf 🍃 (WPCY) to create their own versions. - -**The Only Requirement:** -While strictly adhering to the GPL license, you must respect all lawful rights of Wenpai Technology, including (but not limited to) copyrights, trademarks, patents, intellectual property, goodwill, and more. - ------------------------------------------------------------------------------------------ -**版权所有 © 2025 年 文派(广州)科技有限公司** ------------------------------------------------------------------------------------------ - -**合规条款** -任何人都可以自由使用文派开源软件,但在中国,当您使用文派软件时,您应在遵守 GPL 开源协议的同时,尊重他人的知识产权,同时有违背中国法律的情况时皆以中国法律为准。 - -**分叉声明** -为保障各项文派 (WordPress) 基础设施的长久可用性,欢迎有能力的人自建各类服务源以及分叉文派叶子🍃(WPCY)来制作您自己的版本; - -**唯一要求:** -在严格遵守 GPL 协议的前提下,尊重文派科技的各项合法权益,包括 (不限于) 版权、商标、专利、知识产权、商誉等… - - - +----------------------------------------------------------------------------------------- +**Copyright © 2025 WenPai.cn (Guangzhou) Technology Co., Ltd.** +----------------------------------------------------------------------------------------- + +**Compliance Terms** +Everyone is free to use WenPai open-source software.However, in China, when using WenPai software, +you must adhere to the GPL open-source license, respect the intellectual property rights of others, +and prioritize compliance with Chinese laws in case of any conflicts. + +**Fork Declaration** +To ensure the long-term availability of various Wenpai (WordPress) infrastructure components, +individuals with the necessary capabilities are welcome to establish their own service sources +or fork WenPai Leaf 🍃 WP-China-Yes (WPCY) to create their own versions. + +**The Only Requirement:** +While strictly adhering to the GPL license, you must respect all lawful rights of WenPai Technology, +including (but not limited to) copyrights, trademarks, patents, intellectual property, goodwill, and more. + +----------------------------------------------------------------------------------------- +**版权所有 © 2025 年 文派(广州)科技有限公司** +----------------------------------------------------------------------------------------- + +**合规条款** +任何人都可以自由使用文派开源软件,但在中国,当您使用文派软件时,您应在遵守 GPL 开源协议的同时, +尊重他人的知识产权,同时有违背中国法律的情况时皆以中国法律为准。 + +**分叉声明** +为保障各项文派 (WordPress) 基础设施的长久可用性, +欢迎有能力的人自建各类服务源以及分叉文派叶子🍃(WPCY)来制作您自己的版本; + +**唯一要求:** +在严格遵守 GPL 协议的前提下,尊重文派科技的各项合法权益, +包括 (不限于) 版权、商标、专利、知识产权、商誉等… + + + diff --git a/framework/classes/admin-options.class.php b/framework/classes/admin-options.class.php index 3a9cb9d..152624f 100755 --- a/framework/classes/admin-options.class.php +++ b/framework/classes/admin-options.class.php @@ -497,9 +497,19 @@ if ( ! class_exists( 'WP_CHINA_YES_Options' ) ) { echo '
'; echo '
'; - echo '
'; - echo '

'. $this->args['framework_title'] .'

'; - echo '
'; +echo '
'; +$hide_elements = !empty($this->options['hide_elements']) ? $this->options['hide_elements'] : []; +if (!in_array('hide_logo', $hide_elements)) { + $logo_url = !empty($this->options['header_logo']['url']) ? $this->options['header_logo']['url'] : plugins_url('wp-china-yes/assets/images/wpcy-logo.png'); + echo ''; +} +if (!in_array('hide_title', $hide_elements)) { + echo '

'. $this->args['framework_title'] .'

'; +} +if (!in_array('hide_version', $hide_elements)) { + echo '   v' . CHINA_YES_VERSION . ''; +} +echo '
'; echo '
'; @@ -572,6 +582,12 @@ if ( ! class_exists( 'WP_CHINA_YES_Options' ) ) { echo ''; + echo ''; + + echo '
'; } @@ -625,8 +641,13 @@ if ( ! class_exists( 'WP_CHINA_YES_Options' ) ) { echo '
'; + echo ''; + echo '
'; + echo '
'; echo ( $has_nav && $nav_type === 'normal' ) ? '
' : ''; diff --git a/templates/about-section.php b/templates/about-section.php new file mode 100755 index 0000000..ffbf1ed --- /dev/null +++ b/templates/about-section.php @@ -0,0 +1,48 @@ + +
+ +
+
+

开发 & 贡献者

+

100% 开源代码,诚邀您一起参与文派 (WordPress) 软件国产化进程,打造属于自己的开源自助建站程序。

+ + +
+
+
+
diff --git a/templates/maintenance-default.php b/templates/maintenance-default.php new file mode 100755 index 0000000..9f314bf --- /dev/null +++ b/templates/maintenance-default.php @@ -0,0 +1,20 @@ +// templates/maintenance-default.php + +> + + + + <?php echo esc_html($title); ?> + + + +
+

+
+ +
+
+ + diff --git a/templates/website-section.php b/templates/website-section.php new file mode 100755 index 0000000..9b31c7f --- /dev/null +++ b/templates/website-section.php @@ -0,0 +1,21 @@ + +
+
+
+

开源建站

+

文派寻鹿🦌(WP Deer)建站套件是由文派科技官方提供的企业建站产品集合,代码均为 100% GPL 开源,无任何加密隐藏。

+ +
+
+
+
+

SEO 优化技巧

WPXYZ.com ↗
+
+

网站政策合规

WPICP.com ↗
+
+

软件开发工具

WPSDK.com ↗
+
+
+
diff --git a/templates/welcome-section.php b/templates/welcome-section.php new file mode 100755 index 0000000..b3f8783 --- /dev/null +++ b/templates/welcome-section.php @@ -0,0 +1,56 @@ + +
+
+
+

原生体验

+

文派叶子🍃(WP-China-Yes)是一款不可多得的 WordPress 系统底层优化和生态基础设施软件。

+ +
+
+

特色功能

+ +

* 100% 兼容 WP 程序及分支发行版本,更多优秀插件待您体验。

+
+
+
+
+

网站加速

+

优化加速插件多如牛毛,为何文派叶子如此与众不同?

进一步了解 ↗
+
+

翻译推送

+

高质量翻译中文本地化翻译由文派开源官方提供,欢迎参与改进。

本地化改进 ↗
+
+

广告屏蔽

+

呈现清爽整洁的网站后台,清除侵入式后台广告、无用信息。

获取广告规则 ↗
+
+
+
+

加入我们

+

关注文派茶馆 WPTEA.com 公众号以及订阅我们的时事通讯即可接收独家内容、提示和更新。

+
+ +
+
+
diff --git a/wp-china-yes.php b/wp-china-yes.php index 9f05e67..d45f19b 100755 --- a/wp-china-yes.php +++ b/wp-china-yes.php @@ -1,10 +1,10 @@