我已经制作了一个wordpress插件来查找和替换数据库中的关键字,其中admin提供了查找和替换的关键字,然后MYSQL查询执行DB中的更改。
但我想知道如何避免重复的slu ..
例如:
好像有两个帖子有以下slu ::
然后管理员运行查询并想要用“first”替换“second”。 然后结果将是:
update wp_posts set `post_name` = replace(post_name, 'second','first') where post_type='post'
有没有办法让slu the独一无二?
答案 0 :(得分:1)
此更新查询与派生表一起使用,以检查更改是否会创建重复的slug。如果愿意的话,可以在现有的slug中附加一个数字,用于复制。
UPDATE
wp_posts p,
(SELECT
REPLACE(post_name,'second', 'first') AS post_name
, COUNT(post_name) AS num_dupes
FROM
wp_posts WHERE post_type = 'post'
GROUP BY
REPLACE(post_name, 'second', 'first')) d
SET p.post_name = CONCAT(REPLACE(p.post_name, 'second', 'first'),
CASE WHEN num_dupes > 1 THEN num_dupes - 1 ELSE '' END)
WHERE
p.post_type='post' AND
p.post_name = d.post_name
在我看来,这是比在post_name字段上使用唯一约束更好的解决方案,因为a)您不需要对wordpress数据库进行自定义DML更改,并且b)您可以防止出现重复的问题,并且在错误发生之前必须处理错误。