Website 2.0 开发日记(66)
2026年10月17日|中英文动态文章系统整理与三个中文页面建成
项目: PhD Win Acupuncture Clinic — Website 2.0
涉及系统: WordPress / Elementor / Polylang / Code Snippets
开发阶段: 中英文文章列表系统建设与语言筛选代码整理
一、今天完成了什么
今天完成了 Website 2.0 多语言文章系统的一项重要工作:
- 检查安装 Polylang 后出现的分类重复与语言关联问题。
- 通过实际文章测试,确认 Blog 不需要依靠普通 Categories 中的 English 分类来筛选英文文章。
- 检查并清理动态文章列表 PHP 中已经不再需要的旧语言分类代码。
- 验证英文 Blog、Case Studies、Patient Testimonials 三个页面正常运行。
- 建成对应的三个中文页面,并成功动态抓取中文文章。
最终结果:六个中英文文章列表页面均已成功抓取相应语言的文章。
二、Polylang 安装后的分类问题
安装 Polylang 后,在 WordPress 的 Categories 中发现部分中文分类出现重复记录。
例如:
| 原有 Slug | 后来出现的 Slug |
|---|---|
dr-huang-reflections-zh |
dr-huang-reflections-zh-zh |
teresa-tcm-reflections-zh |
teresa-tcm-reflections-zh-zh |
chinese-zh |
chinese-zh-zh |
这些分类的文章数量(Count)不同,有些原有分类显示为 0,而另一条分类关联了文章。
需要注意:带第二个 -zh 的 Slug 是后来出现的,但其具体生成机制尚未完全核实。
目前处理决定:
暂时保留全部分类,不直接删除,也不批量修改文章的分类关系。待多语言系统稳定后,再统一整理重复分类及翻译关联。
三、实际测试:English 分类是否仍然参与文章抓取
选取一篇已经显示在英文 Blog 中的 Teresa Clinical Reflection 03 文章进行测试。
操作:
- 在文章编辑页面取消普通 Categories 中的
English勾选。 - 保留
Teresa's TCM Clinical Reflections系列分类。 - 不修改文章的 Polylang English 语言设置。
- 保存文章,重新打开英文 Blog。
测试结果:
该文章仍然正常显示在 Blog 动态列表中。
说明目前 Blog 的文章筛选不依赖每篇文章是否勾选普通 English 分类。
随后检查 PHP,确认真正使用的语言筛选方式为 Polylang 的 lang 参数。
四、PHP 动态抓取代码整理
后台修改入口:
WordPress → Snippets → Website 2.0 – Blog Listing
Snippet ID: 12
Shortcode 名称: website20_listing
原 PHP 中存在两段早期建立的语言分类检查代码。
第一段是通过普通 WordPress 分类 Slug 查找分类 ID:
$language_categories = [
'en' => [get_category_by_slug('english')?->term_id],
'zh' => [get_category_by_slug('chinese-zh')?->term_id],
];
第二段检查相应语言分类是否存在:
if (empty($language_categories[$lang])) {
return '<p>Blog language filter is not configured yet.</p>';
}
这两段代码原本是为了在尚未完成正式多语言系统时,防止中英文文章混合显示。
但安装 Polylang 后,文章查询已经使用:
$args['lang'] = $lang;
因此,旧分类 ID 不再用于实际文章筛选,只剩下多余的存在性检查。
今天实际完成的修改:
- 删除原第 22–27 行的旧语言分类定义。
- 删除原第 43–48 行的旧分类检查。
- 保留
$args['lang'] = $lang;。 - 保留原有文章类型、日期排序、每页六篇、分页及卡片输出。
- 保留原有 CSS 和 Desktop / Tablet / Mobile 响应式设置。
注意:上述行号是修改前的行号。以后维护应按照代码内容查找,不应依赖旧行号。
修改后验证:
英文 Blog 六篇文章正常显示,Case Studies 和 Patient Testimonials 均未受到影响。
五、动态文章系统的最终工作逻辑
现在三个文章列表页面共用同一个 Shortcode 系统。
第一层:Post Type 决定文章类型
post:普通博客文章case_study:临床病例testimonial:患者反馈
第二层:Polylang 决定文章语言
en:英文zh:中文
第三层:Categories / 自定义分类管理文章系列
例如 Dr Win 的 Clinical Reflections、Teresa 的 TCM Clinical Reflections、临床主题等。
普通 Categories 不再承担动态列表的中英文语言筛选任务。
这样可以将文章类型、语言和内容分类分别管理,减少系统之间的重复设置。
六、三个中文页面建成
今天在已有英文页面基础上,建立了三个对应的中文页面,沿用英文版的 Elementor 结构、文章卡片布局和动态列表系统。
| 中文页面 | Shortcode |
|---|---|
| 博客 | [website20_listing type="post" lang="zh"] |
| 临床病案 | [website20_listing type="case_study" lang="zh"] |
| 患者反馈 | [website20_listing type="testimonial" lang="zh"] |
三个中文页面均已成功抓取中文文章。
中文版不需要另外建立 PHP 系统,只需要在 Shortcode 中指定 lang="zh"。
英文页面继续使用 lang="en"。
七、六个页面的统一维护参数
| 页面 | Type | Language |
|---|---|---|
| English Blog | post |
en |
| 中文博客 | post |
zh |
| English Case Studies | case_study |
en |
| 中文临床病案 | case_study |
zh |
| English Patient Testimonials | testimonial |
en |
| 中文患者反馈 | testimonial |
zh |
以后新增文章时:
文章必须选择正确的 Post Type 和 Polylang 语言。所属临床系列、Clinical Topics、Clinical Hubs 等分类按内容需要设置。
符合条件的已发布文章由相应动态列表自动查询,不需要逐篇手工添加到页面。
八、以后在哪里修改
修改文章抓取逻辑:
WordPress → Snippets → Website 2.0 – Blog Listing(ID 12)
修改文章列表的语言或类型:
Pages → 对应页面 → Edit with Elementor → Shortcode Widget
修改页面标题、说明及布局:
Pages → 对应页面 → Edit with Elementor
修改文章语言:
Posts / Case Studies / Testimonials → Edit → Polylang Language
整理分类:
Posts → Categories,或相应自定义文章类型的分类管理页面。
注意:修改共享 PHP 会同时影响六个页面。以后修改后,应至少测试英文和中文各一个页面,并检查三个文章类型是否正常。
九、尚未完成的后续工作
- 整理 Polylang 启用后出现的重复分类,确认正确的语言归属与翻译关联。
- 进一步核对中英文页面之间的 Polylang 翻译关系、Slug 和语言切换。
- 完善中文页面在 Header、Homepage 和其他导航位置的链接。
- 以后统一检查六个页面的分页、移动端显示及新增文章自动收录情况。
这些工作不影响今天已经验证成功的动态文章抓取功能。
十、本阶段最终结论
今天最重要的成果,不只是建立了三个中文页面,而是完成了 Website 2.0 中英文文章列表的统一技术基础。
一个 PHP 动态系统,三种文章类型,两种语言,六个页面。
文章类型由 WordPress 管理,语言由 Polylang 管理,内容系列由分类系统管理。
英文和中文不需要分别维护两套抓取程序。
这为 Website 2.0 后续扩展中文网站、临床文章、病例与患者反馈提供了可以持续维护的基础。
阶段状态:核心功能完成并通过中英文抓取测试;分类整理与多语言导航仍待后续完善。
《Website 2.0 开发日记》的补充记录:
2026年10月17日|Posts 分类清理完成
完成中英文临床文章系列分类整理,统一中文 Slug 命名,删除重复及不再需要的语言分类。经英文和中文 Blog 实际检查,全部六篇文章正常显示,未发现漏抓。
至此,Blog 的中英文分类整理与动态抓取验证可以正式结束。后续不需要再反复调整这些已经确认正确的设置。
《Website 2.0 开发日记》中,作为:2026年10月17日|动态文章自动抓取与分页功能验证完成
目前英文 Blog 的分页已通过实际测试。中文 Blog、Case Studies 和 Patient Testimonials 使用同一套 PHP 分页逻辑,后续文章超过六篇时,也可以分别验证。
今天我们把文章系统从分类整理、语言筛选,到自动抓取和分页,都推进到了一个比较成熟的阶段。
今天这一阶段已经可以结束,并值得补充到《Website 2.0 开发日记》:Polylang 自定义分类多语言管理启用成功,Conditions We Treat 动态系统测试正常。
Website 2.0 开发日记|Polylang 页面切换系统建立(67)
日期:2026-10-18
本阶段完成 Website 2.0 英文与简体中文核心内容页面的 Polylang 翻译关联及前台切换测试。
已确认:
- Blog ↔ 临床文章关联正确
- Case Studies ↔ 临床病案关联正确
- Patient Testimonials ↔ 患者反馈关联正确
- Polylang Language Switcher 已加入英文 Main Navigation
- 开启 Hide current language
- 不启用 Force link to front page
- 中文语言 Full Name 从“中文(中国)”简化为“中文”
- 前台能够从当前英文页面直接进入对应中文页面,而不是统一跳回中文首页
Header 最终方案:
- 主菜单中的 中文:Polylang 原生语言切换器
- 右侧独立区域:由原来的 🌐“中文站”改为 🔍 Search
- Search 功能暂未连接,后续单独建设
- 不修改现有 PHP、REST API、Shortcode 和页面 Elementor 结构
后台维护入口:
Appearance → Menus:管理 Language Switcher
Languages → Languages:管理语言名称、Locale、Code 等
Elementor Header → WordPress Menu → Style:管理菜单视觉样式
这一个模块现在可以封存。
下一步按原来的多语言建设顺序,应该开始检查 Clinical Topics、Clinical Hubs、Clinical Authors 的中英文翻译对应关系,而不是再回头修改这三个已经正常的页面。
Website 2.0 开发日记(68)
Polylang 中文网站基础框架与双语导航系统建设
日期:2026年10月18日
项目:Website 2.0|中英文双语网站建设
一、今天完成的主要工作
今天完成了 Website 2.0 中文网站基础框架的建设,实现了中英文页面关联、中文独立导航及中文文章动态展示。
中文网站不再独立重新设计,而是直接利用已经完成的英文 Website 2.0 结构,通过 Polylang 建立对应的中文版本。
主要建立和配置了以下中文页面及导航入口:
| 英文导航 | 中文导航 |
|---|---|
| Home | 首页 |
| About Our Clinic | 关于诊所 |
| Meet Our Team | 我们的团队 |
| Conditions We Treat | 治疗疾病 |
| Blog | 临床文章 |
| Book Appointment | 在线预约 |
其中,Meet Our Team 继续沿用原来确定的下拉导航结构,不另外建立团队总览页面。
中文菜单还可以连接已经建立的临床病案、患者反馈等中文栏目。
二、确定的双语网站技术结构
1. Polylang 管理中英文页面
英文页面和中文页面建立翻译关联。
新建中文页面时:
Pages → 找到英文页面 → 点击中文栏「+」→ 建立中文翻译页面。
如果显示蓝色铅笔,说明对应中文页面已经存在,可以直接编辑。
2. Elementor 复用英文页面布局
中文页面不重新设计。
从英文页面复制顶层 Container 或完整页面结构,粘贴到中文页面,保留原有的图片、排版和 Desktop、Tablet、Mobile 响应式设置。
今天已将英文首页五个 Screen 复制到中文首页。
中文首页:
- 页面名称:首页 – 中文
- Slug:
home-zh - Language:中文
目前页面框架已建立,具体中文内容以后逐屏翻译。
3. 中英文共用 Header #94
这是今天确认的重要结果。
原有 Elementor Header #94 保持不变,通过 Polylang 的双语菜单位置,中文页面已经能够正常显示中文导航。
不需要为了中文网站重新设计整个 Header。
三、中文导航菜单配置
后台位置:
Appearance → Menus
已经建立两个菜单:
| 菜单名称 | 语言 |
|---|---|
| Main Navigation | English |
| Main Navigation ZH | 中文 |
菜单位置:
- Primary Menu English → Main Navigation
- Primary Menu 中文 → Main Navigation ZH
中文主导航已经在前台测试成功。
Language Switcher 配置:
- Displays language names:开启
- Displays flags:关闭
- Hides the current language:开启
- Displays as a dropdown:关闭
- Forces link to front page:关闭
- Hides languages with no translation:关闭
导航最后显示 English,方便用户切换语言。
四、中文文章动态展示系统
今天也验证了原有 PHP + Shortcode + Elementor 动态列表系统能够用于中文文章。
例如 Teresa 中医临床思考:
中文分类 Slug:
teresa-tcm-reflections-zh
成功运行的 Shortcode:
[website20_listing type="post" lang="zh" category="teresa-tcm-reflections-zh"]
维护注意事项:
Shortcode 中的 category 必须与实际中文 Category Slug 一致,否则可能显示「暂无文章」。
文章只需正常发表到 Posts,并正确设置中文语言及分类,即可自动进入相应中文列表页面,不需要重复发表。
五、目前仍需完成的工作
Header 两项局部调整:
- 中文页面显示中文诊所 Logo,英文页面保留英文 Logo。
- 中文页面将 Search 改成「搜索」,英文页面保持 Search。
由于中英文共用 Header #94,修改时必须避免影响英文版本。
其他后续工作:
- 逐屏翻译中文首页及其他页面内容。
- 检查中文导航、按钮与内部链接。
- 完善团队个人页面及对应中文链接。
- 检查 Desktop、Tablet、Mobile 的中文显示。
- 检查中英文页面之间的语言切换是否准确。
- 继续发布并整理中文临床文章。
六、阶段总结
Website 2.0 中文网站的基础框架已经形成。
今天最重要的成果,是打通了:
英文页面 → Polylang 中文页面 → 中文导航 → Elementor 页面展示 → 中文文章动态抓取。
这意味着以后建设中文网站,主要工作将从技术框架搭建转向内容翻译、页面完善和链接检查。
已经完成的英文网站可以继续作为中文网站的设计母版,避免重复施工。
下一阶段不需要重新规划整个中文网站,而是在现有框架上逐步完成内容与细节。
当前阶段:中文网站框架基本完成,进入内容完善与局部优化阶段。
黄博士Website 2.0开发日记(69)
我们把今天确定的方案保留下来,今后维护时可以直接参考。
Header #94 — 定稿记录
2026年10月19日
| 项目 | 最终方案 |
|---|---|
| Header 模板 | 中英文共用 #94 |
| 导航菜单 | Polylang 自动切换 |
| 英文 Logo | logo-en |
| 中文 Logo | logo-zh |
| 英文 Search | search-en |
| 中文 Search | search-zh |
| 手机版本 | 独立简化设计 |
| 语言控制 | PHP Snippet + Polylang |
| 代码管理 | Code Snippets |
以后维护需要记住两个位置:
-
Elementor → Header #94 → Advanced → CSS Classes:管理组件的语言标记。
-
Snippets → Website 2.0 – Header Language Switching:管理中英文自动显示规则。
现有的 Desktop、Tablet、Mobile 响应式布局继续保留。
下一阶段
Header 暂时不再调整。中文网站首页接下来可以逐屏检查内容、文字翻译、按钮链接及页面布局。
我们的工作原则不变:已经完成的模块尽量不动,逐步完善整个中文网站。
Website 2.0 开发日记(70)
中英文搜索系统的设计、排查与最终定稿
日期:2026年10月21—22日
项目:PhD Win Acupuncture Clinic — Website 2.0
涉及模块:Header #94、WordPress Search、PHP Snippets、Shortcode、Elementor、Polylang、Clinical Topics、Tags
项目状态:中英文搜索功能测试成功,阶段性定稿。
一、搜索系统的设计目标
Website 2.0 的搜索系统不是单纯寻找某一篇文章,而是帮助患者按照自己的症状、疾病名称和临床问题查找资料。
患者通常搜索“肩痛”“头痛”“手麻”“腰痛”“网球肘”,而不会先区分这些内容属于 Blog、Case Study 还是 Patient Review。
因此,网站搜索需要把三种临床内容整合起来:
- Posts:Blog、Clinical Reflections、临床科普。
- Case Studies:病例分析和临床病例。
- Testimonials:Patient Reviews、Patient Stories。
同时要求:
- 支持中文和英文搜索。
- 通过 Clinical Topics 和 Tags 查找相关文章。
- 保留标题、正文和摘要的常规搜索。
- 排除 Pages 等无关内容。
- 中文搜索保持中文,英文搜索保持英文。
- Header 搜索输入框和按钮保持简洁、稳定。
二、早期尝试及遇到的问题
最初使用 Elementor 自带的 Search Widget,并尝试通过组件设置和 Custom CSS 控制搜索框及按钮。
期间主要遇到以下问题:
第一,输入框和按钮的显示不稳定。
修改 Width、Padding、Font Size 等设置后,有些改变没有实际效果。
第二,中文搜索曾经跳转到英文页面。
中文搜索结果出现英文提示,甚至不能正确显示已经发表的中文文章。
第三,搜索范围不完整。
最初主要搜索 Blog,不能稳定找到 Case Studies 和 Testimonials。
第四,扩大搜索范围后又出现无关内容。
选择 All 后,普通 Pages 等内容也进入搜索结果。
第五,Clinical Topics 和 Tags 无法直接作为搜索关键词。
例如文章已经归类为“肘疼”,但直接输入该词仍可能找不到文章。
这些问题使我们多次调整 Elementor Search、Query、CSS、语言设置和搜索结果模板。
最后认识到:问题不仅在搜索框的外观,而在于搜索表单、数据查询和页面布局混在一起处理。
三、最终技术方案
经过多轮测试,最终采用:
PHP Snippet + Shortcode + Elementor Flexbox + CSS
各部分职责明确:
PHP Snippet
负责生成 WordPress 标准搜索表单,控制搜索范围及扩展搜索匹配规则。
Shortcode
通过 Shortcode 将 PHP 功能嵌入 Elementor 页面。
最终使用的搜索表单调用方式:
[website20_search]
Elementor
负责 Header 中搜索区域的位置和容器布局。
CSS
负责输入框、按钮的尺寸和外观。
Polylang
负责中英文语言环境,确保搜索保持当前语言。
这套方案避免了完全依赖 Elementor Search Widget 内部机制的问题。
最终技术决定:功能由 PHP 控制,Shortcode 负责调用,Elementor 负责显示。
四、Header 搜索框和按钮的关键设置
维护入口:
WordPress → Elementor → Header #94
在 Structure 中找到放置 Shortcode 的 Flexbox。
最初输入框显示过窄,后来发现不是简单调整 CSS 就能解决的问题。
真正的限制来自 Shortcode 外层 Flexbox。
最终确认的桌面端尺寸:
| 设置 | 最终参数 |
|---|---|
| Flexbox Width | 250px |
| Flexbox Min Width | 250px |
| Shortcode | [website20_search] |
| 搜索框和按钮 | 由 PHP 输出及 CSS 控制 |
原来的外层 Flexbox 只有 110px,导致输入框空间不足。
虽然尝试将 CSS 中的搜索输入框宽度扩大到 180px,但实际显示没有改善。
后来修改外层 Flexbox 的 Width 和 Min Width,搜索框及按钮才恢复正常。
维护注意:以后搜索框大小出现问题,先检查外层 Flexbox,再检查 CSS,不要首先修改 PHP 搜索功能。
五、中英文搜索的实现
网站使用 Polylang 管理英文和中文。
Header #94 为中英文共用模板。
原来通过以下 CSS Classes 控制不同语言的显示:
logo-enlogo-zhsearch-ensearch-zh
后续搜索表单改用 Shortcode 实现。
中文搜索曾出现跳转到英文结果页的问题。
经过检查搜索表单提交地址、Polylang 当前语言和 PHP 代码,最终使搜索能够保持正确语言。
测试确认:
- 中文首页输入中文关键词,进入中文搜索结果。
- 英文首页输入英文关键词,进入英文搜索结果。
- 按 Enter 可以提交搜索。
- 点击 Search 按钮同样可以提交。
中英文 Header、导航及搜索结果的语言保持正常。
六、搜索文章类型的限定
最初只搜索普通 Posts。
后来尝试 All,虽然扩大了结果范围,但也包含了大量普通 Pages。
最终采用 PHP 代码限定搜索范围,只保留三种文章类型:
$query->set('post_type', array(
'post',
'case_study',
'testimonial'
));
文章类型对应关系:
| 网站栏目 | Post Type Slug |
|---|---|
| Blog / Clinical Reflections | post |
| Case Studies | case_study |
| Patient Reviews / Stories | testimonial |
这样既能统一搜索三类文章,也避免把普通 Pages 混入结果。
七、Clinical Topics 和 Tags 关键词搜索
进一步测试发现,患者最常用的搜索方式是输入症状或疾病关键词。
例如:
肩痛、肘疼、手麻、头痛、失眠、网球肘、坐骨神经痛。
但 WordPress 默认搜索主要匹配标题、正文和摘要,不会自动搜索自定义 Taxonomy 的名称。
我们检查后确认:
Clinical Topics Taxonomy Slug:
clinical_topic
WordPress Tags Taxonomy:
post_tag
Blog 和 Testimonials 等内容已经设置了 Clinical Topics 和 Tags。
因此没有必要重新建立分类系统。
最终通过独立 PHP 搜索增强逻辑,将分类名称匹配加入原来的文章搜索。
搜索原则:
文章内容匹配 OR Clinical Topics 匹配 OR Tags 匹配。
注意不能简单添加 tax_query,否则可能与正文搜索形成 AND 条件,使结果减少。
目前优先使用 Clinical Topics 和 Tags,不单独扩展 Rank Math Focus Keywords。
八、最终 Snippets 及维护入口
后台入口:WordPress → Snippets
主要涉及以下功能:
1. Website 2.0 – Header Language Switching
管理 Header 英文和中文组件的显示。
使用 Polylang 当前语言识别。
2. Website 2.0 – Standard Search Form
负责 WordPress 标准搜索表单及有关搜索范围控制。
Shortcode:
[website20_search]
3. Website 2.0 – Clinical Keyword Search
扩展搜索范围,使 Clinical Topics 和 Tags 的关键词能够参与匹配。
以上模块应分开管理,避免重复注册 Shortcode 或重复修改搜索条件。
如果将来出现问题,应先检查相关 Snippet 是否启用,再检查具体代码。
九、搜索结果页面
维护位置:Elementor → Search Results Template
使用 Archive Posts Widget 显示搜索结果。
主要配置及设计包括:
- 三列文章展示。
- 文章封面位于上方。
- 显示标题和 Excerpt。
- 支持 Read More。
- 搜索结果根据查询动态更新。
以后可以继续统一 Search Results 与 Blog Listing 的视觉样式。
但页面排版与搜索查询逻辑应当分开处理。
不要为了改变搜索结果布局而修改搜索功能的 PHP 代码。
十、最终测试
2026年10月21—22日完成中英文搜索测试。
| 功能 | 最终结果 |
|---|---|
| 英文 Blog | 正常 |
| 中文 Blog | 正常 |
| 英文 Case Studies | 正常 |
| 中文 Case Studies | 测试成功 |
| 英文 Patient Reviews | 正常 |
| 中文 Patient Reviews | 正常 |
| Clinical Topics 搜索 | 测试成功 |
| Tags 搜索 | 测试成功 |
| 中文搜索语言保持 | 正常 |
| 英文搜索语言保持 | 正常 |
| 搜索按钮 | 正常 |
| Enter 提交 | 正常 |
| 输入框显示 | 正常 |
另外,英文搜索 Teresa Shen,也能够找到标题包含该姓名的相关 Clinical Reflections。
这证明作者姓名出现在可搜索内容时,也能作为搜索入口。
但不能据此认为系统已经直接检索了 Clinical Authors 分类。
最终结论:中英文搜索已达到本阶段预期,可以暂时定稿。
十一、为什么这次走了很多弯路?
回顾整个过程,最大的原因是没有在一开始明确区分三个问题:
功能问题:搜索表单如何提交、WordPress 如何执行搜索。
数据问题:搜索哪些文章类型、哪些关键词、如何过滤语言。
布局问题:输入框和按钮如何在 Header 中显示。
最初过于依赖 Elementor Widget 设置和 CSS,试图同时解决所有问题。
但 CSS 无法改变 WordPress 的查询逻辑,Elementor 的组件尺寸又受到父级容器约束。
因此,某些调整反复测试仍然失败。
直到采用 PHP + Shortcode + Elementor 的分层方案,问题才逐渐得到解决。
这一经验应成为 Website 2.0 今后开发的参考。
十二、未来开发的技术复用原则
这是本次开发最重要的经验。
Website 2.0 已经使用并验证了多个可复用的动态功能:
- Blog Listing Shortcode。
- Conditions Hub 动态临床内容系统。
- 中英文标准搜索 Shortcode。
- Clinical Topics 和 Tags 查询。
- Polylang 中英文切换。
以后建设类似功能,应当先检查现有系统是否能够复用,而不是重新尝试不同的 Elementor Widget。
特别是涉及以下功能:
- 按医生自动筛选文章。
- 按临床主题显示文章。
- 统一展示不同 Post Types。
- 分类查询。
- 中英文动态列表。
- 个人专页文章展示。
应优先评估:
一个 PHP Snippet + 一个可配置的 Shortcode + Elementor 容器布局。
但并不是所有页面都必须使用代码。简单静态内容仍然可以直接使用 Elementor。
出现问题时的排查顺序
- 先确认原有功能是否仍然正常。
- 判断问题属于功能、数据查询还是布局。
- 检查是否已有成功的 PHP 或 Shortcode 可以复用。
- 如果连续多次调整没有效果,重新评估技术方向。
- 尽量独立新增功能,不随意修改已经稳定运行的模块。
- 测试成功后记录关键代码、参数和后台入口。
这样可以减少重复试验,也降低以后网站维护的难度。
十三、下一阶段的应用
我们下一步计划建立 Teresa Shen 和 Dr Win Huang 个人专页的动态临床文章展示。
每位医生分别展示:
- Clinical Reflections
- Case Studies
- Patient Reviews / Stories
这些内容将通过 Clinical Authors 等已建立的数据分类进行归属筛选。
计划继续采用本次验证的技术方式:
PHP Snippet + Shortcode + Elementor
目标是一个统一代码系统,支持两位医生、三种文章类型及中英文页面。
新增文章以后,只要设置正确的作者和分类,就能够自动显示在个人专页中。
不需要再为每篇文章手工创建卡片。
最终总结
这次搜索模块虽然经历了多次失败和反复修改,但最终建立了一套适合 Website 2.0 内容结构的搜索方案。
更重要的是,我们形成了以后可以持续复用的技术路线:
PHP 负责功能,Shortcode 负责连接,Elementor 负责显示,Polylang 负责语言,Clinical Topics 和 Tags 负责临床内容组织。
网站建设不是不断增加新插件和新代码,而是逐步建立一套可靠、简单、能够长期维护的系统。
阶段状态:搜索系统完成,正式转入后续内容建设及个人专页开发。
Website 2.0 维护日记|2026年10月22日(71)
首页第二屏 Clinical Expertise(临床专长) 两个入口已完成设置。直接使用 Teresa 和 Dr Win 个人专页中已有的专长区块,通过锚点定位,无需另建页面或重复内容。
第一屏 About Our Team 用于进入个人专页、了解医生;第二屏 Clinical Expertise 直接进入相应医生的专长区块。
| 个人专页 | 专长区块 ID |
|---|---|
| Teresa Shen | teresa-expertise |
| Dr Win Huang | win-expertise |
设置位置:个人专页 → Elementor → 选中专长区块外层容器 → General → Settings → ID。填写 ID 时不加 #,不要填入 Style → Classes。
首页 Teresa’s Expertise 的 Link 为:
/meet-our-team/teresa-shen/#teresa-expertise
Dr Win 的首页入口也已按同样方法连接到其个人专页,链接末尾为 #win-expertise。
保存后,点击首页入口直接显示相应专长区块;上下滑动仍可浏览完整个人专页。Teresa 入口已测试,定位效果符合预期,本项建设收尾。
Website 2.0 开发日记(72)
中文“治疗疾病”页面——中英文转换与动态连接维护记录
日期:2026年10月24日
涉及系统:WordPress / Elementor / Polylang / Snippets / REST API
一、系统结构与管理位置
中文“治疗疾病”页面使用英文网站已经建立的 Clinical Hub 动态系统,没有重新创建独立的中文系统。
整套连接关系:
中文首页 → 中文“所有疾病”页面 → 中文 Clinical Topics → Frontend Controller → REST API → 中文文章。
以后管理这套系统,主要涉及四个位置:
| 管理位置 | 负责内容 |
| Elementor 中文页面 | 中文标题、疾病名称、点击属性、页面布局 |
| WordPress → Posts → Clinical Topics | 中英文疾病主题分类及 Slug |
| WordPress → Posts → Clinical Hubs | 九大疾病系统的中英文分类 |
| WordPress → Snippets | 动态切换、文章查询和右侧内容显示 |
二、后台 Clinical Topics:建立中英文对应分类
后台位置:
WordPress → Posts → Clinical Topics
英文 Clinical Topics 已经存在,中文版本通过 Polylang 建立。
具体方法:
- 进入 Clinical Topics 列表。
- 找到英文疾病主题。
- 点击中国国旗下面的 +。
- 填写中文 Name。
- 中文 Slug 使用英文 Slug 加 -zh。
- Language 选择中文。
- Translations 保留与英文主题的关联。
- 保存中文分类。
例如:
| 字段 | 英文 | 中文 |
| Name | Elbow Pain | 肘关节痛 |
| Slug | elbow-pain | elbow-pain-zh |
| Language | English | 中文 |
维护重点:
不要直接把英文 Clinical Topic 改成中文。
以后新增疾病主题时,先建立英文分类,再通过 Polylang 建立中文翻译,并检查两者关联。
中文文章应勾选中文 Clinical Topic,而不是英文 Clinical Topic。
三、后台 Clinical Hubs:九大疾病系统中英文分离
后台位置:
WordPress → Posts → Clinical Hubs
九大 Clinical Hubs 同样通过 Polylang 建立中英文对应分类。
例如:
英文:Musculoskeletal & Injuries
中文:肌肉骨骼与损伤
中文文章编辑页面中,应选择对应的中文 Clinical Hub。
注意:Clinical Hubs 与 Clinical Topics 是两个不同的分类系统。
Clinical Hubs 表示文章属于哪个疾病大系统。
Clinical Topics 表示文章属于哪个具体疾病主题。
以后文章没有出现在正确位置时,两项都需要检查。
四、Elementor:中文疾病主题怎样连接后台
编辑位置:
Pages → 中文“治疗疾病”页面 → Edit with Elementor
当前中文页面地址:
/zh/condition-we-treat-zh/
找到左侧九大疾病分类及下属具体 Clinical Topics。
每个可点击的疾病主题,都通过 Elementor 的属性连接到后台。
需要检查两个设置:
1. Advanced → CSS Classes
保留:
clinical-topic-trigger
这个 Class 用于让 JavaScript 识别疾病主题的点击事件。
2. Advanced → Attributes
英文页面原来的设置,例如:
data-clinical-topic|elbow-pain
中文页面修改为:
data-clinical-topic|elbow-pain-zh
这里的 elbow-pain-zh 必须与 WordPress 后台中文 Clinical Topic 的 Slug 完全一致。
这是本次中文动态连接最关键的修改。
仅仅把前台疾病名称翻译成中文是不够的。如果 Attributes 仍然指向英文 Slug,右侧就可能继续抓取英文文章。
以后新增一个中文疾病主题时,必须同时确认中文显示名称和 data-clinical-topic 的值。
五、Frontend Controller:右侧中文标题在哪里修改
后台位置:
WordPress → Snippets →
Website 2.0 – Clinical Topic Frontend Controller
这是管理右侧动态内容的主要代码。
本次关键修改位置在代码原第23–28行附近。
原来的标题生成方法:
const heading = document.createElement(‘h2’);
heading.textContent = topic
.split(‘-‘)
.map(word => word.charAt(0).toUpperCase() + word.slice(1))
.join(‘ ‘);
root.appendChild(heading);
原代码自动将 Slug 转换成英文标题。
例如:
elbow-pain-zh → Elbow Pain Zh
因此中文页面虽然能够抓取中文文章,但大标题仍然是英文。
修改后的方法:
const heading = document.createElement(‘h2’);
const trigger = Array.from(
document.querySelectorAll(‘.clinical-topic-trigger’)
).find(el =>
el.getAttribute(‘data-clinical-topic’) === topic
);
const topicName = trigger
? trigger.textContent.trim()
.replace(/[›→]/g, ”).trim()
: ”;
heading.textContent = topicName || topic
.replace(/-zh$/, ”)
.split(‘-‘)
.map(word =>
word.charAt(0).toUpperCase() + word.slice(1)
)
.join(‘ ‘);
root.appendChild(heading);
修改后的原理:
右侧疾病大标题直接读取左侧对应 Clinical Topic 的文字。
例如:
左侧显示“颈椎病” → 右侧标题显示“颈椎病”。
左侧显示“手肘痛” → 右侧标题显示“手肘痛”。
因此,以后要修改右侧中文疾病名称,通常只需要修改 Elementor 左侧的中文名称,不必再增加 JavaScript 标题翻译表。
六、Frontend Controller:三个栏目在哪里翻译
同一个 Snippet:
Website 2.0 – Clinical Topic Frontend Controller
在代码前部,const isChinese 附近设置语言判断,并在 sections 中定义三个栏目。
栏目对应关系:
| 文章类型 | 英文标题 | 中文标题 |
| case_study | Case Studies | 临床病例 |
| post | Clinical Reflections | 临床思考 |
| testimonial | Patient Reviews | 患者反馈 |
维护方法:
以后如果要把“临床病例”改成“真实病例”,或者把“患者反馈”改成“患者评价”,应进入 Frontend Controller 修改 sections 中对应的中文 title。
不要去 Elementor 中寻找这三个标题,因为它们是 JavaScript 动态生成的。
七、右侧文章抓取由哪里控制
涉及两个 Snippets:
1. Frontend Controller
负责读取:
data-clinical-topic
并发送 REST API 请求:
/wp-json/website20/v1/clinical-content
主要参数:
- topic:Clinical Topic Slug
- type:文章类型
2. Clinical Topic Query Content
负责 WordPress 后台实际文章查询,包括:
- 根据 Clinical Topic 分类查找文章
- 根据内容类型筛选 Posts / Case Studies / Testimonials
- 返回文章标题与文章链接
本次没有重新建设 REST API。
重要:目前截图所示的 Frontend Controller 请求只明确传递 topic 和 type,没有单独传递 lang 参数。
因此,当前中文文章抓取主要依赖中文 Topic Slug 和后台文章分类的正确对应。中英文严格隔离仍需要在后续测试中持续验证,不能仅凭栏目显示中文就认为语言过滤完全完成。
八、右侧 HTML 动态显示区域不要修改
Elementor → HTML Widget
原有代码:
<div id=”clinical-dynamic-content”></div>
这个 ID 是 Frontend Controller 定位右侧动态内容区域的依据。
英文、中文页面均保持相同的 HTML ID。
不要改成:
clinical-dynamic-content-zh
否则 JavaScript 可能找不到显示区域,导致右侧文章全部消失。
九、以后出现故障,在哪里检查
| 出现的问题 | 首先检查的位置 |
| 左侧疾病名称仍是英文 | Elementor 对应主题的文字 |
| 右侧标题出现 Elbow Pain Zh | Frontend Controller 的 heading.textContent |
| 点击疾病没有反应 | Elementor 的 CSS Class、Attributes |
| 中文页面抓取英文文章 | data-clinical-topic、中文 Slug、文章分类、REST API 查询 |
| 中文文章不显示 | 文章是否已发布、是否勾选正确的中文 Clinical Topic |
| 三个栏目名称仍是英文 | Frontend Controller 的 isChinese 和 sections |
| 右侧完全空白 | HTML ID、Frontend Controller 是否启用、浏览器控制台错误 |
| 出现 No articles available yet. | Frontend Controller 中的空结果提示文字 |
十、后续维护原则
- 前台文字在 Elementor 修改。
- 疾病分类、Slug 和翻译关联在 Clinical Topics / Clinical Hubs 管理。
- 右侧动态标题和栏目名称在 Frontend Controller 修改。
- 文章筛选与返回结果在 Clinical Topic Query Content 检查。
- 英文与中文共用现有动态架构,但分别使用各自的 Clinical Topic Slug。
以后修改之前,先备份相应 Snippet,尽量只改变需要调整的代码段,避免影响已经运行正常的英文网站。
维护核心:页面文字、分类 Slug、点击属性、动态标题、REST API 查询,是五个不同的管理环节。出现问题时,应先确定属于哪个环节,再到对应位置修改。
Website 2.0 开发日记(73)
中文首页疾病导航连接与默认文章隐藏
日期:2026年10月24日
涉及:中文首页、Conditions We Treat、Clinical Topics、Frontend Controller
一、中文首页九大疾病分类链接
修改位置:
WordPress → Pages → 中文首页 → Edit with Elementor
打开 Structure(结构):
Main Card 01–09 → Flexbox → General → Settings → Link
九大分类的每张卡片都有自己的链接。
以“肌肉骨骼与损伤”为例:
/condition-we-treat-zh/#hub-musculoskeletal
链接分为两部分:
- condition-we-treat-zh:进入中文“治疗疾病”页面。
- #hub-musculoskeletal:定位到对应疾病大类。
重要设置:
目前 Local 网站的 Polylang 已能自动识别中文页面,实际跳转地址会出现 /zh/。
因此,已测试成功的链接不需要在最前面手动再加 /zh/。
九大分类分别保留各自原有的 #hub-… 锚点。
以后某个大类跳转错误,首先检查该卡片的 Link 和目标页面的锚点 ID。
二、中文首页每个大类下方的六个 Clinical Topics
修改位置:
中文首页 → Edit with Elementor → Structure
找到:
Main Card → Secondary Panel → 对应 Clinical Topic 的 Heading
左侧进入:
General → Settings → Link
以“胃痛”为例:
原来的英文链接:
/condition-we-treat/?topic=stomach-pain
修改为中文链接:
/condition-we-treat-zh/?topic=stomach-pain-zh
需要修改两个位置:
- 页面 Slug:condition-we-treat → condition-we-treat-zh
- Topic 参数:stomach-pain → stomach-pain-zh
?topic= 本身不变。
中文 Topic Slug 必须与后台 Posts → Clinical Topics 中实际保存的中文 Slug 一致。
作用:
患者从中文首页点击具体疾病后,进入中文“治疗疾病”页面,Frontend Controller 读取 ?topic= 参数,自动显示对应的中文疾病标题和文章。
以后新增或修改首页疾病入口,直接在 Heading 的 Link 中操作,不需要修改 REST API。
三、中文“治疗疾病”页面的动态连接
修改位置:
Pages → 中文“治疗疾病” → Edit with Elementor
地址:
/zh/condition-we-treat-zh/
每个具体疾病主题需要保留:
CSS Classes
clinical-topic-trigger
Advanced → Attributes
例如:
data-clinical-topic|stomach-pain-zh
这里控制的是患者在“治疗疾病”页面点击左侧具体主题后,右侧显示哪一组文章。
注意区分:
- 首页 Heading 的 Link:负责跨页面跳转。
- 治疗疾病页面的 Attributes:负责点击后的动态内容切换。
两处的中文 Topic Slug 应一致。
四、取消中文页面默认出现英文 Shoulder Pain
修改位置:
WordPress → Snippets →
Website 2.0 – Clinical Topic Frontend Controller
找到代码最后的初始加载逻辑,原来约第97–109行。
旧代码在没有指定 Topic 时自动执行:
loadTopic(‘shoulder-pain’);
因此,从中文首页点击九大分类进入时,右侧自动出现原来的英文肩痛内容。
修改办法:
将原来的初始加载判断整段替换为:
if (requestedTopic) {
const target = Array.from(
document.querySelectorAll(‘.clinical-topic-trigger’)
).find(el =>
el.getAttribute(‘data-clinical-topic’) === requestedTopic
);
if (target) {
loadTopic(requestedTopic);
} else if (!isChinese) {
loadTopic(‘shoulder-pain’);
}
} else if (!isChinese) {
loadTopic(‘shoulder-pain’);
}
修改原理:
- 中文页面没有 ?topic=:不自动加载任何疾病文章。
- 中文页面有有效的 ?topic=…-zh:自动加载指定中文文章。
- 英文页面:保留原来的默认 Shoulder Pain。
这里取消的是自动加载行为,不是隐藏整个右侧 Container。
必须保留动态内容区域:
<div id=”clinical-dynamic-content”></div>
这样患者以后点击具体 Clinical Topic,文章仍能正常出现。
注意:以上为本次确定的修改方案。维护记录中应以实际保存并测试成功的 Snippet 为最终依据。
五、最终页面预期
入口 A:中文首页九大疾病分类
点击大类 → 中文“治疗疾病”页面 → 左侧展开对应分类 → 右侧不出现默认 Shoulder Pain。
原有“准备您的下一步”“在线预约”“临床评估”等 Elementor 内容继续保留。
入口 B:中文首页具体 Clinical Topic
点击“胃痛”等主题 → 中文“治疗疾病”页面 → 自动显示该疾病中文标题及对应文章。
入口 C:治疗疾病页面内点击具体主题
通过 data-clinical-topic 切换右侧内容,不重新加载整个页面。
六、以后维修在哪里检查
| 问题 | 检查位置 |
| 首页九大分类进入错误页面 | Main Card → Flexbox → Link |
| 九大分类不能定位到对应位置 | Link 中的 #hub-… 与目标锚点 |
| 首页具体疾病跳到英文页面 | Secondary Panel → Heading → Link |
| 具体疾病抓取错误文章 | ?topic= 参数及后台中文 Slug |
| 页面内部点击疾病没有反应 | CSS Class、data-clinical-topic |
| 中文页面自动出现英文肩痛 | Frontend Controller 最后的默认加载逻辑 |
| 点击具体疾病后右侧没有文章 | Frontend Controller、中文文章分类、REST API |
| 右侧所有内容消失 | 检查 clinical-dynamic-content 是否存在,以及 JavaScript 是否报错 |
七、维护原则
九大分类通过 #hub-… 定位,具体 Clinical Topics 通过 ?topic=…-zh 加载文章。
两种入口使用同一个中文“治疗疾病”页面,但作用不同。
维护时尽量只修改对应的 Elementor 链接或 Frontend Controller 初始加载逻辑,不改动已经正常工作的文章查询系统。
修改 Snippet 前,先复制保存当前正常版本;修改后同时测试中文大类入口、中文 Topic 入口和英文页面。
中文微信:nzacupunctureclinic
Leave a reply