语言基础结构-zibll教程分享社区-zibll子比主题-WordPress主题模板-zibll子比主题

语言基础结构

以下是一个基础版 WordPress 多国语言插件的实现方案,包含核心功能和技术要点:

一、创建插件基础结构

1. 创建插件目录:`wp-content/plugins/multilang-plugin`

2. 主文件 `multilang-plugin.php`:

<?php
/*
Plugin Name: Multilanguage Plugin
Description: 多语言支持插件
Version: 1.0
Author: Your Name
*/

// 安全限制
if (!defined('ABSPATH')) exit;

define('MLP_PATH', plugin_dir_path(__FILE__));
define('MLP_URL', plugin_dir_url(__FILE__));

// 初始化插件
require_once MLP_PATH . 'includes/class-core.php';
MLP_Core::init();

二、核心功能类(includes/class-core.php)

class MLP_Core {
    private static $instance;
    private $current_lang;
    private $available_langs = ['en' => 'English', 'fr' => 'Français'];

    public static function init() {
        if (!isset(self::$instance)) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    public function __construct() {
        // 初始化语言设置
        add_action('init', [$this, 'setup_language']);
        
        // 注册翻译内容类型
        add_action('init', [$this, 'register_translation_post_type']);
        
        // 重写规则
        add_action('init', [$this, 'rewrite_rules']);
        add_filter('query_vars', [$this, 'register_query_vars']);
        
        // 模板重定向
        add_filter('template_include', [$this, 'language_template']);
        
        // 添加小工具
        add_action('widgets_init', [$this, 'register_widget']);
    }

    public function setup_language() {
        // 检测语言参数
        if (isset($_GET['lang']) && array_key_exists($_GET['lang'], $this->available_langs)) {
            $this->current_lang = $_GET['lang'];
            setcookie('mlp_language', $this->current_lang, time() + YEAR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN);
        } elseif (isset($_COOKIE['mlp_language'])) {
            $this->current_lang = $_COOKIE['mlp_language'];
        } else {
            $this->current_lang = $this->detect_browser_language();
        }
    }

    private function detect_browser_language() {
        $browser_lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
        return array_key_exists($browser_lang, $this->available_langs) ? $browser_lang : 'en';
    }

    // 其他方法...
}

三、实现核心功能

1. URL 重写规则:

public function rewrite_rules() {
    add_rewrite_rule(
        '^([a-z]{2})/(.*)?',
        'index.php?lang=$matches[1]&pagename=$matches[2]',
        'top'
    );
}

public function register_query_vars($vars) {
    $vars[] = 'lang';
    return $vars;
}

2. 语言模板系统

public function language_template($template) {
    global $wp_query;
    
    if ($wp_query->is_main_query() && $lang = get_query_var('lang')) {
        $new_template = locate_template(["lang-{$lang}.php", $template]);
        return $new_template ?: $template;
    }
    return $template;
}

3. 翻译关联系统:(使用元数据存储翻译关系)

class MLP_Translation {
    public static function get_translation($post_id, $lang) {
        return get_post_meta($post_id, "_mlp_translation_{$lang}", true);
    }

    public static function save_translation($original_id, $translated_id, $lang) {
        update_post_meta($original_id, "_mlp_translation_{$lang}", $translated_id);
        update_post_meta($translated_id, "_mlp_master_post", $original_id);
    }
}

四、语言切换小工具(includes/class-widget.php)

class MLP_Language_Switcher extends WP_Widget {
    public function __construct() {
        parent::__construct(
            'mlp_lang_switcher',
            __('Language Switcher', 'mlp'),
            ['description' => __('Display language selection menu', 'mlp')]
        );
    }

    public function widget($args, $instance) {
        $current_url = home_url($_SERVER['REQUEST_URI']);
        echo $args['before_widget'];
        
        foreach (MLP_Core::get_available_languages() as $code => $name) {
            $url = add_query_arg('lang', $code, $current_url);
            echo "<a href='{$url}' class='lang-item {$code}'>{$name}</a>";
        }
        
        echo $args['after_widget'];
    }
}

五、后台设置界面

1. 创建语言管理页面:

add_action('admin_menu', function() {
    add_options_page(
        __('Multilanguage Settings', 'mlp'),
        __('Multilanguage', 'mlp'),
        'manage_options',
        'mlp-settings',
        [$this, 'render_settings_page']
    );
});

2. 实现语言配置表单:

public function render_settings_page() {
    ?>
    <div class="wrap">
        <h2><?php _e('Language Settings', 'mlp'); ?></h2>
        <form method="post" action="options.php">
            <?php settings_fields('mlp_settings_group'); ?>
            <table class="form-table">
                <tr valign="top">
                    <th scope="row"><?php _e('Available Languages', 'mlp'); ?></th>
                    <td>
                        <div id="mlp-languages-list">
                            <?php foreach ($this->available_langs as $code => $name) : ?>
                            <div class="lang-item">
                                <input type="text" name="mlp_languages[<?php echo $code; ?>]" value="<?php echo $name; ?>">
                            </div>
                            <?php endforeach; ?>
                        </div>
                    </td>
                </tr>
            </table>
            <?php submit_button(); ?>
        </form>
    </div>
    <?php
}

六、扩展建议

1. 添加以下高级功能:

   – 自动机器翻译集成(Google Translate/Deepl API)

   – 语言专属菜单系统

   – 多语言SEO优化(hreflang标签)

   – 翻译记忆库系统

   – 前端语言编辑器

 

2. 性能优化:

// 使用对象缓存
wp_cache_set('mlp_translations', $translations);
$cached = wp_cache_get('mlp_translations');

// 数据库索引优化
add_filter('posts_join', function($join) {
    if ($lang = MLP_Core::get_current_lang()) {
        $join .= " INNER JOIN $wpdb->postmeta AS mlpmeta ON $wpdb->posts.ID = mlpmeta.post_id";
    }
    return $join;
});

七、使用示例

1. 在模板中获取翻译内容:

$translated_post_id = MLP_Translation::get_translation(get_the_ID(), 'fr');
if ($translated_post_id) {
    $translated_post = get_post($translated_post_id);
    echo apply_filters('the_content', $translated_post->post_content);
}

2.添加短代码支持:

add_shortcode('mlp_switcher', function($atts) {
    ob_start();
    MLP_Core::language_switcher();
    return ob_get_clean();
});

这个基础版本实现了:

1. 多语言URL路由

2. 浏览器语言自动检测

3. Cookie记忆功能

4. 翻译内容关联

5. 前端语言切换器

6. 基本后台管理

 

建议后续完善:

1. 增加导入/导出功能

2. 添加翻译状态指示器

3. 实现字符串翻译(.po文件支持)

4. 创建翻译工作流程系统

5. 添加多语言SEO元字段支持

 

实际开发时需注意:

1. 处理分类和标签的翻译

2. 兼容各种主题模板

3. 处理分页和归档页面

4. 与缓存插件的兼容性

5. 实现WP CLI支持

请登录后发表评论

    没有回复内容