<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>网站搭建 on heyaohua's Blog</title><link>https://blog.heyaohua.com/tags/%E7%BD%91%E7%AB%99%E6%90%AD%E5%BB%BA/</link><description>Recent content in 网站搭建 on heyaohua's Blog</description><image><title>heyaohua's Blog</title><url>https://blog.heyaohua.com/og-image.png</url><link>https://blog.heyaohua.com/og-image.png</link></image><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Mon, 08 Sep 2025 12:00:00 +0800</lastBuildDate><atom:link href="https://blog.heyaohua.com/tags/%E7%BD%91%E7%AB%99%E6%90%AD%E5%BB%BA/index.xml" rel="self" type="application/rss+xml"/><item><title>WordPress 双语网站搭建指南</title><link>https://blog.heyaohua.com/posts/2025/09/wordpress-multilingual-setup/</link><pubDate>Mon, 08 Sep 2025 12:00:00 +0800</pubDate><guid>https://blog.heyaohua.com/posts/2025/09/wordpress-multilingual-setup/</guid><description>基于您的需求，我推荐使用 Polylang，理由： - 免费且功能强大 - 支持中英文双语 - 兼容性好 - 社区活跃</description><content:encoded><![CDATA[<h2 id="-多语言方案对比">🌍 多语言方案对比</h2>
<h3 id="1-wpml-wordpress-multilingual-plugin---付费功能最强">1. WPML (WordPress Multilingual Plugin) - 付费，功能最强</h3>
<ul>
<li><strong>优点</strong>：功能完整，兼容性好，支持所有主题和插件</li>
<li><strong>缺点</strong>：需要付费（$39+/年）</li>
<li><strong>适合</strong>：商业网站，预算充足</li>
</ul>
<h3 id="2-polylang---免费推荐">2. Polylang - 免费，推荐</h3>
<ul>
<li><strong>优点</strong>：免费，轻量，易用，兼容性好</li>
<li><strong>缺点</strong>：高级功能需要付费</li>
<li><strong>适合</strong>：个人网站，中小型项目</li>
</ul>
<h3 id="3-qtranslate-xt---免费">3. qTranslate-XT - 免费</h3>
<ul>
<li><strong>优点</strong>：完全免费，简单易用</li>
<li><strong>缺点</strong>：兼容性一般，更新不频繁</li>
<li><strong>适合</strong>：简单的双语需求</li>
</ul>
<h3 id="4-weglot---付费自动翻译">4. Weglot - 付费，自动翻译</h3>
<ul>
<li><strong>优点</strong>：自动翻译，无需手工维护</li>
<li><strong>缺点</strong>：需要付费，翻译质量一般</li>
<li><strong>适合</strong>：快速上线需求</li>
</ul>
<h2 id="-推荐方案polylang--手动配置">🚀 推荐方案：Polylang + 手动配置</h2>
<p>基于您的需求，我推荐使用 <strong>Polylang</strong>，理由：</p>
<ul>
<li>免费且功能强大</li>
<li>支持中英文双语</li>
<li>兼容性好</li>
<li>社区活跃</li>
</ul>
<h2 id="-安装和配置步骤">📋 安装和配置步骤</h2>
<h3 id="步骤1安装polylang插件">步骤1：安装Polylang插件</h3>
<h4 id="方法a通过wordpress后台安装推荐">方法A：通过WordPress后台安装（推荐）</h4>
<ol>
<li>登录WordPress后台：http://localhost:8080/wp-admin</li>
<li>进入 <code>插件</code> → <code>安装插件</code></li>
<li>搜索 &ldquo;Polylang&rdquo;</li>
<li>安装并激活</li>
</ol>
<h4 id="方法b手动下载安装">方法B：手动下载安装</h4>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#6272a4"># 下载Polylang插件</span>
</span></span><span style="display:flex;"><span><span style="color:#8be9fd;font-style:italic">cd</span> /Users/heyaohua/Server/WordPress_Docker
</span></span><span style="display:flex;"><span>docker <span style="color:#8be9fd;font-style:italic">exec</span> wordpress_app bash -c <span style="color:#f1fa8c">&#34;
</span></span></span><span style="display:flex;"><span><span style="color:#f1fa8c">cd /var/www/html/wp-content/plugins &amp;&amp;
</span></span></span><span style="display:flex;"><span><span style="color:#f1fa8c">wget https://downloads.wordpress.org/plugin/polylang.latest-stable.zip &amp;&amp;
</span></span></span><span style="display:flex;"><span><span style="color:#f1fa8c">unzip polylang.latest-stable.zip &amp;&amp;
</span></span></span><span style="display:flex;"><span><span style="color:#f1fa8c">rm polylang.latest-stable.zip
</span></span></span><span style="display:flex;"><span><span style="color:#f1fa8c">&#34;</span>
</span></span></code></pre></div><h3 id="步骤2配置语言">步骤2：配置语言</h3>
<ol>
<li>激活插件后，进入 <code>设置</code> → <code>语言</code></li>
<li>添加语言：</li>
<li><strong>中文</strong>：中文 (zh_CN)</li>
<li><strong>英文</strong>：English (en_US)</li>
<li>设置默认语言（推荐中文）</li>
<li>选择URL结构：</li>
<li><strong>子目录</strong>：<code>yoursite.com/zh/</code> 和 <code>yoursite.com/en/</code>（推荐）</li>
<li><strong>子域名</strong>：<code>zh.yoursite.com</code> 和 <code>en.yoursite.com</code></li>
<li><strong>参数</strong>：<code>yoursite.com/?lang=zh</code></li>
</ol>
<h3 id="步骤3配置菜单和小工具">步骤3：配置菜单和小工具</h3>
<ol>
<li><strong>创建菜单</strong>：</li>
<li>进入 <code>外观</code> → <code>菜单</code></li>
<li>为每种语言创建单独的菜单</li>
<li></li>
</ol>
<p>在菜单页面右上角选择语言</p>
<ol start="5">
<li></li>
</ol>
<p><strong>配置小工具</strong>：</p>
<ol start="6">
<li>进入 <code>外观</code> → <code>小工具</code></li>
<li>为不同语言配置不同的小工具</li>
</ol>
<h3 id="步骤4创建双语内容">步骤4：创建双语内容</h3>
<ol>
<li><strong>页面/文章</strong>：</li>
<li>创建内容时选择语言</li>
<li>使用&quot;+&ldquo;按钮创建其他语言版本</li>
<li></li>
</ol>
<p>建立页面/文章之间的翻译关系</p>
<ol start="5">
<li></li>
</ol>
<p><strong>分类和标签</strong>：</p>
<ol start="6">
<li>在分类/标签页面为每个分类创建翻译版本</li>
</ol>
<h2 id="-主题优化">🎨 主题优化</h2>
<h3 id="支持多语言的主题推荐">支持多语言的主题推荐</h3>
<ol>
<li><strong>Astra</strong>（免费 + 付费）</li>
<li><strong>OceanWP</strong>（免费 + 付费）</li>
<li><strong>GeneratePress</strong>（免费 + 付费）</li>
<li><strong>Twenty Twenty-Four</strong>（WordPress默认主题）</li>
</ol>
<h3 id="主题配置">主题配置</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span>// 在主题的functions.php中添加语言切换器
</span></span><span style="display:flex;"><span>function add_language_switcher() {
</span></span><span style="display:flex;"><span>    if (function_exists(&#39;pll_the_languages&#39;)) {
</span></span><span style="display:flex;"><span>        echo &#39;<span style="color:#ff79c6">&lt;div</span> <span style="color:#50fa7b">class=</span><span style="color:#f1fa8c">&#34;language-switcher&#34;</span><span style="color:#ff79c6">&gt;</span>&#39;;
</span></span><span style="display:flex;"><span>        pll_the_languages(array(
</span></span><span style="display:flex;"><span>            &#39;show_flags&#39; =&gt; 1,
</span></span><span style="display:flex;"><span>            &#39;show_names&#39; =&gt; 1,
</span></span><span style="display:flex;"><span>            &#39;display_names_as&#39; =&gt; &#39;name&#39;
</span></span><span style="display:flex;"><span>        ));
</span></span><span style="display:flex;"><span>        echo &#39;<span style="color:#ff79c6">&lt;/div&gt;</span>&#39;;
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><h2 id="-高级配置">🔧 高级配置</h2>
<h3 id="1-自定义url结构">1. 自定义URL结构</h3>
<p>在WordPress根目录的 <code>.htaccess</code> 文件中配置：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span># Polylang URL重写规则
</span></span><span style="display:flex;"><span><span style="color:#ff79c6">&lt;IfModule</span> mod_rewrite.c<span style="color:#ff79c6">&gt;</span>
</span></span><span style="display:flex;"><span>RewriteEngine On
</span></span><span style="display:flex;"><span>RewriteBase /
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span># 中文页面
</span></span><span style="display:flex;"><span>RewriteRule ^zh/(.*)$ /index.php?lang=zh&amp;$1 [QSA,L]
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span># 英文页面
</span></span><span style="display:flex;"><span>RewriteRule ^en/(.*)$ /index.php?lang=en&amp;$1 [QSA,L]
</span></span><span style="display:flex;"><span><span style="color:#ff79c6">&lt;/IfModule&gt;</span>
</span></span></code></pre></div><h3 id="2-语言检测和重定向">2. 语言检测和重定向</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-php" data-lang="php"><span style="display:flex;"><span><span style="color:#6272a4">// 在functions.php中添加自动语言检测
</span></span></span><span style="display:flex;"><span><span style="color:#ff79c6">function</span> <span style="color:#50fa7b">auto_language_redirect</span>() {
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">if</span> (<span style="color:#ff79c6">!</span>is_admin() <span style="color:#ff79c6">&amp;&amp;</span> function_exists(<span style="color:#f1fa8c">&#39;pll_current_language&#39;</span>)) {
</span></span><span style="display:flex;"><span>        <span style="color:#8be9fd;font-style:italic">$current_lang</span> <span style="color:#ff79c6">=</span> pll_current_language();
</span></span><span style="display:flex;"><span>        <span style="color:#8be9fd;font-style:italic">$browser_lang</span> <span style="color:#ff79c6">=</span> substr(<span style="color:#8be9fd;font-style:italic">$_SERVER</span>[<span style="color:#f1fa8c">&#39;HTTP_ACCEPT_LANGUAGE&#39;</span>], <span style="color:#bd93f9">0</span>, <span style="color:#bd93f9">2</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        <span style="color:#ff79c6">if</span> (<span style="color:#ff79c6">empty</span>(<span style="color:#8be9fd;font-style:italic">$current_lang</span>) <span style="color:#ff79c6">&amp;&amp;</span> <span style="color:#8be9fd;font-style:italic">$browser_lang</span> <span style="color:#ff79c6">==</span> <span style="color:#f1fa8c">&#39;en&#39;</span>) {
</span></span><span style="display:flex;"><span>            wp_redirect(home_url(<span style="color:#f1fa8c">&#39;/en/&#39;</span>));
</span></span><span style="display:flex;"><span>            <span style="color:#ff79c6">exit</span>;
</span></span><span style="display:flex;"><span>        } <span style="color:#ff79c6">elseif</span> (<span style="color:#ff79c6">empty</span>(<span style="color:#8be9fd;font-style:italic">$current_lang</span>)) {
</span></span><span style="display:flex;"><span>            wp_redirect(home_url(<span style="color:#f1fa8c">&#39;/zh/&#39;</span>));
</span></span><span style="display:flex;"><span>            <span style="color:#ff79c6">exit</span>;
</span></span><span style="display:flex;"><span>        }
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>add_action(<span style="color:#f1fa8c">&#39;template_redirect&#39;</span>, <span style="color:#f1fa8c">&#39;auto_language_redirect&#39;</span>);
</span></span></code></pre></div><h3 id="3-seo优化">3. SEO优化</h3>
<p>安装Yoast SEO插件，与Polylang完全兼容：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#6272a4"># 安装Yoast SEO</span>
</span></span><span style="display:flex;"><span>docker <span style="color:#8be9fd;font-style:italic">exec</span> wordpress_app bash -c <span style="color:#f1fa8c">&#34;
</span></span></span><span style="display:flex;"><span><span style="color:#f1fa8c">cd /var/www/html/wp-content/plugins &amp;&amp;
</span></span></span><span style="display:flex;"><span><span style="color:#f1fa8c">wget https://downloads.wordpress.org/plugin/wordpress-seo.latest-stable.zip &amp;&amp;
</span></span></span><span style="display:flex;"><span><span style="color:#f1fa8c">unzip wordpress-seo.latest-stable.zip &amp;&amp;
</span></span></span><span style="display:flex;"><span><span style="color:#f1fa8c">rm wordpress-seo.latest-stable.zip
</span></span></span><span style="display:flex;"><span><span style="color:#f1fa8c">&#34;</span>
</span></span></code></pre></div><h2 id="-双语网站结构示例">🌐 双语网站结构示例</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>网站首页
</span></span><span style="display:flex;"><span>├── 中文版 (yoursite.com/zh/)
</span></span><span style="display:flex;"><span>│   ├── 关于我们 (/zh/about/)
</span></span><span style="display:flex;"><span>│   ├── 产品服务 (/zh/services/)
</span></span><span style="display:flex;"><span>│   ├── 新闻动态 (/zh/news/)
</span></span><span style="display:flex;"><span>│   └── 联系我们 (/zh/contact/)
</span></span><span style="display:flex;"><span>├── 英文版 (yoursite.com/en/)
</span></span><span style="display:flex;"><span>│   ├── About Us (/en/about/)
</span></span><span style="display:flex;"><span>│   ├── Services (/en/services/)
</span></span><span style="display:flex;"><span>│   ├── News (/en/news/)
</span></span><span style="display:flex;"><span>│   └── Contact (/en/contact/)
</span></span><span style="display:flex;"><span>└── 语言切换器（全站可见）
</span></span></code></pre></div><h2 id="-移动端优化">📱 移动端优化</h2>
<ol>
<li><strong>响应式设计</strong>：确保语言切换器在移动端正常显示</li>
<li><strong>性能优化</strong>：使用缓存插件（WP Rocket, W3 Total Cache）</li>
<li><strong>图片优化</strong>：使用WebP格式，配置CDN</li>
</ol>
<h2 id="-安全考虑">🔒 安全考虑</h2>
<ol>
<li><strong>备份策略</strong>：多语言网站数据更复杂，定期备份</li>
<li><strong>插件更新</strong>：及时更新Polylang和相关插件</li>
<li><strong>权限管理</strong>：为不同语言版本设置合适的编辑权限</li>
</ol>
<h2 id="-常用代码片段">📊 常用代码片段</h2>
<h3 id="获取当前语言">获取当前语言</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-php" data-lang="php"><span style="display:flex;"><span><span style="color:#8be9fd;font-style:italic">$current_language</span> <span style="color:#ff79c6">=</span> pll_current_language();
</span></span><span style="display:flex;"><span><span style="color:#ff79c6">echo</span> <span style="color:#8be9fd;font-style:italic">$current_language</span>; <span style="color:#6272a4">// 输出: zh 或 en
</span></span></span></code></pre></div><h3 id="获取页面翻译">获取页面翻译</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-php" data-lang="php"><span style="display:flex;"><span><span style="color:#8be9fd;font-style:italic">$translations</span> <span style="color:#ff79c6">=</span> pll_get_post_translations(<span style="color:#8be9fd;font-style:italic">$post_id</span>);
</span></span><span style="display:flex;"><span><span style="color:#ff79c6">foreach</span> (<span style="color:#8be9fd;font-style:italic">$translations</span> <span style="color:#ff79c6">as</span> <span style="color:#8be9fd;font-style:italic">$lang</span> <span style="color:#ff79c6">=&gt;</span> <span style="color:#8be9fd;font-style:italic">$post_id</span>) {
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">echo</span> pll_get_post(<span style="color:#8be9fd;font-style:italic">$post_id</span>, <span style="color:#8be9fd;font-style:italic">$lang</span>);
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><h3 id="条件显示内容">条件显示内容</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>if (pll_current_language() == &#39;zh&#39;) {
</span></span><span style="display:flex;"><span>    echo &#39;中文内容&#39;;
</span></span><span style="display:flex;"><span>} elseif (pll_current_language() == &#39;en&#39;) {
</span></span><span style="display:flex;"><span>    echo &#39;English Content&#39;;
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><h3 id="语言切换菜单">语言切换菜单</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>// 显示旗帜和语言名称
</span></span><span style="display:flex;"><span>pll_the_languages(array(
</span></span><span style="display:flex;"><span>    &#39;show_flags&#39; =&gt; 1,
</span></span><span style="display:flex;"><span>    &#39;show_names&#39; =&gt; 1,
</span></span><span style="display:flex;"><span>    &#39;hide_current&#39; =&gt; 1
</span></span><span style="display:flex;"><span>));
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>// 仅显示旗帜
</span></span><span style="display:flex;"><span>pll_the_languages(array(
</span></span><span style="display:flex;"><span>    &#39;show_flags&#39; =&gt; 1,
</span></span><span style="display:flex;"><span>    &#39;show_names&#39; =&gt; 0
</span></span><span style="display:flex;"><span>));
</span></span></code></pre></div><h2 id="-问题排查">🛠️ 问题排查</h2>
<h3 id="常见问题">常见问题</h3>
<ol>
<li><strong>URL不正确</strong>：检查固定链接设置</li>
<li><strong>翻译丢失</strong>：重新建立翻译关联</li>
<li><strong>SEO问题</strong>：配置hreflang标签</li>
<li><strong>性能问题</strong>：使用缓存插件</li>
</ol>
<h3 id="调试代码">调试代码</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span>// 调试当前语言信息
</span></span><span style="display:flex;"><span>function debug_polylang_info() {
</span></span><span style="display:flex;"><span>    if (function_exists(&#39;pll_current_language&#39;)) {
</span></span><span style="display:flex;"><span>        echo &#39;<span style="color:#ff79c6">&lt;div</span> <span style="color:#50fa7b">style=</span><span style="color:#f1fa8c">&#34;position:fixed;top:0;right:0;background:red;color:white;padding:10px;&#34;</span><span style="color:#ff79c6">&gt;</span>&#39;;
</span></span><span style="display:flex;"><span>        echo &#39;当前语言: &#39; . pll_current_language() . &#39;<span style="color:#ff79c6">&lt;br&gt;</span>&#39;;
</span></span><span style="display:flex;"><span>        echo &#39;默认语言: &#39; . pll_default_language() . &#39;<span style="color:#ff79c6">&lt;br&gt;</span>&#39;;
</span></span><span style="display:flex;"><span>        echo &#39;所有语言: &#39; . implode(&#39;, &#39;, pll_languages_list()) . &#39;<span style="color:#ff79c6">&lt;br&gt;</span>&#39;;
</span></span><span style="display:flex;"><span>        echo &#39;<span style="color:#ff79c6">&lt;/div&gt;</span>&#39;;
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>add_action(&#39;wp_footer&#39;, &#39;debug_polylang_info&#39;);
</span></span></code></pre></div><h2 id="-内容管理策略">📈 内容管理策略</h2>
<h3 id="1-翻译工作流程">1. 翻译工作流程</h3>
<ol>
<li><strong>创建中文内容</strong>（主语言）</li>
<li><strong>创建英文翻译页面</strong></li>
<li><strong>建立翻译关联</strong></li>
<li><strong>检查链接和菜单</strong></li>
<li><strong>SEO优化</strong></li>
</ol>
<h3 id="2-内容同步">2. 内容同步</h3>
<ul>
<li>使用翻译管理插件</li>
<li>建立内容更新检查清单</li>
<li>定期审核双语内容一致性</li>
</ul>
<h3 id="3-团队协作">3. 团队协作</h3>
<ul>
<li>为翻译人员创建单独账户</li>
<li>设置语言特定的编辑权限</li>
<li>使用协作插件管理翻译进度</li>
</ul>
<hr>
<p>💡 <strong>下一步建议</strong>：</p>
<ol>
<li>先登录WordPress后台安装Polylang插件</li>
<li>按照上述步骤配置中英文双语</li>
<li>创建测试页面验证功能</li>
<li>根据需要调整主题和样式</li>
</ol>
]]></content:encoded></item></channel></rss>