将搜索和替换限制为类别

Posted

技术标签:

【中文标题】将搜索和替换限制为类别【英文标题】:Limiting Search and Replace to Category 【发布时间】:2013-12-08 21:03:55 【问题描述】:

我希望在主要网站上查找和替换某个关键字。

我通常会使用类似的东西

UPDATE wp_posts 
   SET post_content = REPLACE (post_content, 'Item to replace here', 'Replacement text here');  

但是,我不希望更新覆盖整个网站,我希望将其限制为仅一个类别。

谁能告诉我如何做到这一点?

【问题讨论】:

【参考方案1】:

更新:更准确地说,查询应该看起来

UPDATE wp_term_relationships r JOIN wp_posts p 
    ON r.object_id = p.id JOIN wp_terms t
    ON r.term_taxonomy_id = t.term_id JOIN wp_term_taxonomy x
    ON r.term_taxonomy_id = x.term_taxonomy_id
   SET p.post_content = REPLACE(post_content, 'Item to replace here', 'Replacement text here')
 WHERE t.name = 'My Category'
   AND x.taxonomy = 'category'
   AND x.parent = 0 -- top level category

注意:在更新任何内容之前:

1)您可以查看发布会影响哪些帖子

SELECT *
  FROM wp_term_relationships r JOIN wp_posts p 
    ON r.object_id = p.id JOIN wp_terms t
    ON r.term_taxonomy_id = t.term_id JOIN wp_term_taxonomy x
    ON r.term_taxonomy_id = x.term_taxonomy_id
 WHERE t.name = 'My Category'
   AND x.taxonomy = 'category'
   AND x.parent = 0  -- top level category

2) 确保您的 wordpress 数据库有可靠的备份

【讨论】:

完美运行彼得。非常感谢。 彼得,如果类别是子类别,这将如何改变?我尝试运行它,但一旦查询运行,它只会显示其上方一个类别的详细信息。 @Shakey 您是否有多个具有相同名称但不同父类别的子类别? 一点也不。我也有类似的想法,但根本没有其他同名的子类别。 彼得,还是一样。它显示正确的类别分类 ID、正确的名称和 slug。但它检索到的帖子属于上一个类别。所以子类别 46 有 500 个帖子,子类别 47 有 20 个帖子。如果我查询子类别 47 - 它返回 500 行,其中包含子类别 47 的所有帖子。如果这有意义的话。

以上是关于将搜索和替换限制为类别的主要内容,如果未能解决你的问题,请参考以下文章

Ransack 搜索表单将搜索替换为“占位符”

不区分大小写的搜索和替换为 sed

将聚合限制为弹性搜索中的热门内容

在 vim 搜索和替换中,换行符呈现为“^@”[重复]

php 将搜索限制为特定的帖子类型

当搜索字符串为空时,带有连接的搜索查询显示所有行