WordPress 设置文章 post_name 与 ID 同步

WordPress 设置文章 post_name 与 ID 同步

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

内容提要

本文介绍如何让WordPress文章的post_name字段与ID同步:先用SQL语句批量更新已发布文章,再在主题functions.php中添加代码,使发布或更新文章时自动将post_name设为ID,避免URL出现中文;还可通过条件判断排除page等特定文章类型。

🔎

延伸解读

操作前务必备份数据库

文章直接给出批量更新 SQL 语句,但未提及备份。执行 UPDATE wp_posts 会一次性修改所有文章的 post_name,若操作失误或与现有固定链接冲突,可能导致大量链接失效。建议先备份数据库,并在测试环境验证,再在生产环境执行。

自动同步代码的潜在影响

将代码添加到 functions.php 后,每次保存文章都会触发 save_post 钩子,检查并更新 post_name。这会影响所有文章类型,包括页面和自定义文章类型。若网站有大量文章或频繁保存,可能增加数据库写入负担,需留意性能。

排除特定文章类型的条件判断

文章示例通过判断 $post->post_type == 'page' 来排除页面,避免页面 URL 被改为 ID。读者可根据需要修改条件,排除其他自定义文章类型。但需注意,条件判断应放在函数开头,确保在更新前返回,否则仍会执行更新。

URL 结构变化的后续影响

将 post_name 改为 ID 后,文章 URL 会变为数字形式,可能影响 SEO 和已有链接。若之前已收录或分享旧链接,需设置重定向。此外,固定链接设置需使用 %postname% 才能生效,否则修改 post_name 不会改变 URL。

❓

Q&A

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

使用SQL语句:UPDATE wp_posts SET post_name = ID; 其中wp_posts是文章表。

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

在主题的functions.php中添加代码,通过save_post钩子调用函数,检查post_name是否与ID不同,若不同则用wp_update_post更新。

如何避免WordPress文章URL中出现中文?

将文章的post_name设置为与ID相同,这样URL中就不会包含中文标题。

如何让post_name与ID同步只对文章生效,而不影响页面?

在set_postname_as_id函数中添加条件判断:if ( $post->post_type == 'page' ) { return; },这样页面类型就不会被修改。

修改post_name为ID的代码应该放在哪里?

放在WordPress主题文件夹中的functions.php文件末尾。

使用save_post钩子自动更新post_name会影响哪些文章类型?

默认会影响所有类型的文章,包括页面和自定义文章类型。可以通过条件检查限制只应用于特定类型。

🏷️

标签

➡️

继续阅读