解决 WP 的 Slug 重复问题

你是否遇到了页面的 Slug 被自动加 -2 的问题?

在设置 TranslatePress 插件中,发现一些客户的站点使用了 Custom Permalinks 插件

它的作用是将 Permalink 设置为任意形式,这在将其它非 WP 站点转化为 WP 站点时尤为有用,比如可以创建一个页面,然后将它的 Permalink 设置为旧网站的某个分类,通常我们会将旧 URL 301 跳转到新 URL,但有了这个插件,很多 URL 可以维持不变。

一切都非常好,直到其它插件也引入新 URL 时,比如多语言插件 TranslatePress 在域名后加入 /es/ 这样的语言代码来区分,就会出现循环跳转问题。

另外由于它将自定义链接存入自定义字段 custom_permalinks 中,没有排重机制,如果使用中没注意,会有两个页面的 Permalink 一样的情况(其中一个显示为为待编辑的状态)。或者有些 Permalink 结尾有斜杠,有些没有。

为了解决 TranslatePress 和 Custom Permalinks 插件的冲突,自然想到如果 slug 和 Custom Permalink 不同,则将 custom_permalink 同步到 slug,这样禁用了 Custom Permalink 插件后,slug 就是之前设置的 Custom Permalink,页面的链接不会发生改变,需要解决的问题有:

  1. Custom Permalink 后带有斜杠,需要去掉后对比 slug
  2. Custom Permalink 中有重复
  3. Custom Permalink 中有多层级 URL,比如 product/anodizied-aluminum-solar-frame/
  4. Custom Permalink 修改成 Slug 后,可能与现有其它页面的 Slug 重复

在解决这些问题时发现,现有页面的 Slug 已经与图片重复,所以如果将 custom_permalink 同步到 Slug,就会造成链接打开后是图片,所以先要解决现有页面 Slug 与图片重复的问题,通常的做法是删除图片,重新上传,释放出图片占用的 Slug,然后修改页面 Slug 为图片占用的 slug。

批量解决通常会将图片现有 Slug 后面加上 -image 来释放,我选择把页面和图片的 Slug 进行交换,值得注意的有两点:

  1. attached 的图片,Permalink 中间是它所属的 post 的 Slug,所以图片和 页面在数据库中可以有相同的 Post Name,交换不一定能成功,比如 black-aluminum-extrusion-2 和 black-aluminum-extrusion 交换,图片的 black-aluminum-extrusion 会变成 black-aluminum-extrusion-2-2,待进一步实验。
  2. 有些页面本身已多次重复,需要逐步交换,比如 industrial-aluminum-profile-3-2 先和 industrial-aluminum-profile-3 交换,再和 industrial-aluminum-profile 交换。

以上问题都解决以后:

  1. 将多层级 URL 跳转到对应 Slug
  2. custom_permalink 中本身有数字的,如 t-slot-aluminum-profile-2 不要把 slug t-slot-aluminum-profile 同步成带数字的

Custom Permalink 中有重复的,可以选择不处理,因为如果 Slug 重复,WP 会自动为后一个加上数字。

 

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

或许还会想看: