WordPress 设置文章 post_name 与 ID 同步

WordPress 设置文章 post_name 与 ID 同步

💡 原文中文,约1500字,阅读约需4分钟。
📝

内容提要

本文介绍如何让WordPress文章的post_name与ID同步,避免URL中出现中文。方法包括:用SQL语句批量更新已发布文章,执行UPDATE wp_posts SET post_name = ID;在主题functions.php中添加代码,通过save_post钩子,在发布或更新文章时自动将post_name设为ID,并可添加条件排除page等类型。

🔎

延伸解读

批量替换前的必要准备

文章提到用SQL语句批量更新已发布文章的post_name,但执行前务必先备份数据库。因为该操作会直接修改wp_posts表,一旦出错可能影响所有文章的固定链接。此外,如果网站已启用缓存或CDN,更新后需清除缓存,否则旧链接可能仍被访问。

自动同步的适用范围与限制

通过save_post钩子自动将post_name设为ID的代码,默认会影响所有文章类型,包括页面和自定义文章类型。如果只想应用于特定类型,需在函数内添加条件判断。文章以排除page为例,但其他类型如产品、作品等也可能需要类似处理,否则可能改变其URL结构。

对现有链接和SEO的潜在影响

将post_name改为ID后,原有包含中文或标题的URL会失效,导致旧链接无法访问。如果网站已被搜索引擎收录或存在外部链接,建议设置301重定向,避免流量损失。同时,新URL虽然简洁,但可能降低关键词相关性,需权衡用户体验与SEO效果。

❓

Q&A

WordPress 文章 post_name 默认是什么?为什么会出现中文 URL?

WordPress 文章的 post_name 如果不手动设置,默认会使用文章标题(title)作为 post_name。当使用 post_name 作为文章 URL 时,如果标题是中文,URL 中就会出现中文。

如何用 SQL 批量将已发布文章的 post_name 改为与 ID 相同?

执行 SQL 语句:UPDATE wp_posts SET post_name = ID; 其中 wp_posts 是 WordPress 数据库中的文章表。

怎样让 WordPress 在发布或更新文章时自动将 post_name 设置为 ID?

在主题的 functions.php 文件末尾添加代码:使用 save_post 钩子,在函数中获取文章对象,检查 post_name 是否与 ID 不同,如果不同则通过 wp_update_post 更新 post_name 为 ID。

自动同步 post_name 与 ID 的代码会影响页面(page)吗?如何排除页面?

默认会影响所有文章类型,包括页面和自定义文章类型。要排除页面,可以在函数内添加条件检查:如果 $post->post_type == 'page' 则直接 return。

除了页面,自动同步 post_name 与 ID 还能排除其他文章类型吗?

可以。在 set_postname_as_id 函数内添加适当的条件检查,例如判断 $post->post_type 是否等于特定类型,从而只对特定类型的文章应用同步。

修改 functions.php 后,需要做什么才能使自动同步生效?

保存并上传 functions.php 文件到 WordPress 主题文件夹。之后每当发布或更新文章时,WordPress 将检查并自动更新 post_name 为 ID。

🏷️

标签

➡️

继续阅读