@@ -29,199 +134,548 @@ $active_tab = isset($_GET['tab']) ? sanitize_text_field($_GET['tab']) : 'basic';
-
-
@@ -802,7 +2091,7 @@ jQuery(document).ready(function($) {
$('#post-conversion-options').hide();
}
});
-
+
// 控制浏览器重定向相关选项的显示/隐藏
$('select[name="wpcco_browser_redirect"]').change(function() {
if ($(this).val() == '0') {
@@ -811,19 +2100,19 @@ jQuery(document).ready(function($) {
$('.browser-redirect-dependent').show();
}
});
-
+
// 控制扩展语言模块的显示/隐藏
function toggleExtendedLanguages() {
var showMoreLangs = $('#wpcc_show_more_langs').is(':checked');
var extendedSection = $('.wpcc-extended-languages');
-
+
if (showMoreLangs) {
extendedSection.show();
} else {
extendedSection.hide();
}
}
-
+
// 检测是否使用Gutenberg编辑器
function isGutenbergActive() {
// 检查WordPress是否启用了Gutenberg编辑器
@@ -831,49 +2120,61 @@ jQuery(document).ready(function($) {
if (typeof wpccAdminData !== 'undefined' && wpccAdminData.isGutenbergActive !== undefined) {
return wpccAdminData.isGutenbergActive;
}
-
+
// 备用检测方法:检查是否存在Gutenberg相关的全局变量
- return (typeof wp !== 'undefined' && wp.blocks) ||
+ return (typeof wp !== 'undefined' && wp.blocks) ||
document.body.classList.contains('block-editor-page') ||
document.querySelector('.block-editor') !== null ||
(typeof window.wp !== 'undefined' && window.wp.blockEditor);
}
-
+
// 控制编辑器增强选项的启用/禁用
function toggleEditorEnhancementOptions() {
var isGutenberg = isGutenbergActive();
var quicktagsOption = $('input[name="wpcc_no_conversion_qtag"]').closest('tr');
var postConversionOption = $('input[name="wpcc_enable_post_conversion"]').closest('tr');
-
+
if (isGutenberg) {
// Gutenberg环境下只禁用快速标签功能,保留发表时转换功能
quicktagsOption.find('.wpcc-switch').addClass('wpcc-disabled');
quicktagsOption.find('input[type="checkbox"]').prop('disabled', true);
- quicktagsOption.find('.description').html('
');
-
+quicktagsOption.find('.description').html('');
+
// 发表时转换功能在区块编辑器下保持可用
postConversionOption.find('.wpcc-switch').removeClass('wpcc-disabled');
postConversionOption.find('input[type="checkbox"]').prop('disabled', false);
- postConversionOption.find('.description').html('');
+ postConversionOption.find('.description').html('');
} else {
// 经典编辑器环境下启用所有编辑器增强功能
quicktagsOption.find('.wpcc-switch').removeClass('wpcc-disabled');
quicktagsOption.find('input[type="checkbox"]').prop('disabled', false);
- quicktagsOption.find('.description').html('');
-
+quicktagsOption.find('.description').html('');
+
postConversionOption.find('.wpcc-switch').removeClass('wpcc-disabled');
postConversionOption.find('input[type="checkbox"]').prop('disabled', false);
- postConversionOption.find('.description').html('');
+ postConversionOption.find('.description').html('');
}
}
-
+
// 控制引擎相关选项的启用/禁用
function toggleEngineRelatedOptions() {
var engine = $('select[name="wpcc_engine"]').val();
var jpOption = $('#zh-jp-option');
var jpCheckbox = jpOption.find('input[type="checkbox"]');
var jpInput = jpOption.find('input[type="text"]');
-
+
if (engine === 'opencc') {
// OpenCC 引擎支持日式汉字
jpCheckbox.prop('disabled', false);
@@ -886,20 +2187,29 @@ jQuery(document).ready(function($) {
jpOption.find('.wpcc-engine-note').text('(不支持此引擎)').css('color', '#d63638');
}
}
-
+
+
+ // 联动:x-default 标签 -> 默认语言行显示/隐藏
+ function toggleSiteXDefault() {
+ var enabled = $('input[name="wpcc_enable_hreflang_x_default"]').is(':checked');
+ $('#wpcc-site-x-default-options').toggle(enabled);
+ }
+ $('input[name="wpcc_enable_hreflang_x_default"]').on('change', toggleSiteXDefault);
+
// 页面加载时检查
toggleExtendedLanguages();
toggleEngineRelatedOptions();
toggleEditorEnhancementOptions();
-
+ toggleSiteXDefault();
+
// 显示更多语言选项改变时
$('#wpcc_show_more_langs').change(function() {
toggleExtendedLanguages();
});
-
+
// 转换引擎改变时检查
$('select[name="wpcc_engine"]').change(function() {
toggleEngineRelatedOptions();
});
});
-
\ No newline at end of file
+
diff --git a/wp-chinese-converter.php b/wp-chinese-converter.php
index b5d39dc..ec4346d 100755
--- a/wp-chinese-converter.php
+++ b/wp-chinese-converter.php
@@ -6,7 +6,7 @@
* Author URI: https://wpcc.net
* Text Domain: wp-chinese-converter
* Domain Path: /languages
- * Version: 1.3.0
+* Version: 1.5
* License: GPLv3 or later
* License URI: http://www.gnu.org/licenses/gpl-3.0.html
*/
@@ -25,7 +25,7 @@
// 基础常量定义
define("wpcc_DEBUG", false);
-define("wpcc_VERSION", "1.3.0");
+define("wpcc_VERSION", "1.5");
// 插件URL常量
if (defined("WP_PLUGIN_URL")) {
@@ -60,8 +60,17 @@ use Overtrue\PHPOpenCC\OpenCC;
use Overtrue\PHPOpenCC\Strategy;
// 载入核心依赖
-require_once dirname(__FILE__) . "/includes/core/class-converter-factory.php";
-require_once dirname(__FILE__) . "/includes/core/class-module-manager.php";
+require_once dirname(__FILE__) .
+ "/includes/core/class-wpcc-exception-handler.php";
+require_once dirname(__FILE__) . "/includes/core/class-wpcc-utils.php";
+require_once dirname(__FILE__) .
+ "/includes/core/class-wpcc-language-config.php";
+require_once dirname(__FILE__) . "/includes/core/class-wpcc-converter-factory.php";
+require_once dirname(__FILE__) . "/includes/core/class-wpcc-module-manager.php";
+require_once dirname(__FILE__) . "/includes/core/class-wpcc-conversion-cache.php";
+require_once dirname(__FILE__) . "/includes/core/class-wpcc-config.php";
+require_once dirname(__FILE__) . "/includes/core/class-wpcc-presets.php";
+require_once dirname(__FILE__) . "/includes/core/class-wpcc-main.php";
require_once dirname(__FILE__) . "/includes/blocks/blocks-init.php";
// 加载JS和CSS资源
@@ -73,52 +82,31 @@ function wpcc_add_global_js()
"wpcc-variant",
plugins_url("/assets/dist/wpcc-variant.umd.js", __FILE__),
[],
- "1.1.0",
+ wpcc_VERSION,
);
wp_register_script(
"wpcc-block-script-ok",
plugins_url("/assets/js/wpcc-block-script-ok.js", __FILE__),
["wp-blocks", "wp-element", "wpcc-variant"],
- "1.3.0",
+ wpcc_VERSION,
);
wp_enqueue_script(["wpcc-variant", "wpcc-block-script-ok"]);
+ $use_permalink_type = 0;
+ if (is_array($wpcc_options) && isset($wpcc_options["wpcc_use_permalink"])) {
+ $use_permalink_type = (int) $wpcc_options["wpcc_use_permalink"];
+ }
wp_localize_script("wpcc-block-script-ok", "wpc_switcher_use_permalink", [
- "type" => $wpcc_options["wpcc_use_permalink"],
+ "type" => $use_permalink_type,
]);
}
-// 获取插件配置
-$wpcc_options = get_wpcc_option("wpcc_options");
-if (empty($wpcc_options)) {
- $wpcc_options = [
- "wpcc_search_conversion" => 1,
- "wpcc_used_langs" => [
- "zh-hans",
- "zh-hant",
- "zh-cn",
- "zh-hk",
- "zh-sg",
- "zh-tw",
- ],
- "wpcc_browser_redirect" => 0,
- "wpcc_auto_language_recong" => 0,
- "wpcc_flag_option" => 1,
- "wpcc_use_cookie_variant" => 0,
- "wpcc_use_fullpage_conversion" => 1,
- "wpcco_use_sitemap" => 1,
- "wpcc_trackback_plugin_author" => 0,
- "wpcc_add_author_link" => 0,
- "wpcc_use_permalink" => 0,
- "wpcc_no_conversion_tag" => "",
- "wpcc_no_conversion_ja" => 0,
- "wpcc_no_conversion_qtag" => 0,
- "wpcc_enable_post_conversion" => 0,
- "wpcc_post_conversion_target" => "zh-cn",
- "wpcc_engine" => "opencc", // alternative: mediawiki
- "nctip" => "",
- ];
-}
+// 初始化现代化架构
+$wpcc_main = WPCC_Main::get_instance();
+$wpcc_config = $wpcc_main->get_config();
+
+// 保持向后兼容性
+$wpcc_options = $wpcc_config->get_all_options();
// 加载站点地图模块
$modules_dir = __DIR__ . "/includes/modules/";
@@ -126,33 +114,37 @@ if (file_exists($modules_dir . "wpcc-sitemap.php")) {
require_once $modules_dir . "wpcc-sitemap.php";
}
+// 加载网络设置模块
+if (
+ is_multisite() &&
+ file_exists(__DIR__ . "/includes/network/wpcc-network-settings.php")
+) {
+ require_once __DIR__ . "/includes/network/wpcc-network-settings.php";
+ add_action("init", ["WPCC_Network_Settings", "init"]);
+}
+
+
// 容错处理 - 只有配置正确时才加载功能
if (
$wpcc_options != false &&
is_array($wpcc_options) &&
is_array($wpcc_options["wpcc_used_langs"])
) {
- // 加载核心功能模块
+ // 加载遗留的核心功能模块(为了向后兼容)
require_once dirname(__FILE__) . "/includes/wpcc-core.php";
+ // 确保核心初始化与查询变量已注册(保证变体参数与重写规则生效)
+ if (!has_action("init", "wpcc_init")) {
+ add_action("init", "wpcc_init");
+ }
+ if ( ! class_exists( 'WPCC_Main' ) ) {
+ add_filter("query_vars", "wpcc_insert_query_vars");
+ }
+
// 加载管理后台模块(仅在后台时加载)
if (is_admin()) {
require_once dirname(__FILE__) . "/includes/wpcc-admin.php";
}
-
- // 注册基础钩子
- add_action("wp_enqueue_scripts", "wpcc_add_global_js");
- add_filter("query_vars", "wpcc_insert_query_vars");
- add_action("init", "wpcc_init");
-
- // 调试模式下的重写规则刷新
- if (WP_DEBUG || (defined("wpcc_DEBUG") && wpcc_DEBUG == true)) {
- add_action("init", function () {
- global $wp_rewrite;
- $wp_rewrite->flush_rules();
- });
- add_action("wp_footer", "wpcc_debug");
- }
}
/**
@@ -169,11 +161,18 @@ function wpcc_mobile_exist($name)
*/
function get_wpcc_option($option_name, $default = false)
{
- if (is_multisite() && wpcc_mobile_exist("network")) {
- return get_site_option($option_name, $default);
- } else {
- return get_option($option_name, $default);
+ // 使用现代化的配置管理器
+ global $wpcc_main;
+ if ($wpcc_main && method_exists($wpcc_main, "get_config")) {
+ $config = $wpcc_main->get_config();
+ if ($option_name === "wpcc_options") {
+ return $config->get_all_options();
+ }
+ return $config->get_option($option_name, $default);
}
+
+ // 向后兼容
+ return get_option($option_name, $default);
}
/**
@@ -181,9 +180,7 @@ function get_wpcc_option($option_name, $default = false)
*/
function update_wpcc_option($option_name, $option_value)
{
- if (is_multisite() && wpcc_mobile_exist("network")) {
- return update_site_option($option_name, $option_value);
- } else {
- return update_option($option_name, $option_value);
- }
+ // 始终将站点级设置保存到当前站点的 options;
+ // 网络级设置在网络设置模块中使用 update_site_option 专门处理。
+ return update_option($option_name, $option_value);
}