Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用post_title MYSQL中的单词替换post_内容中的[keyword]_Php_Mysql_Sql_Wordpress - Fatal编程技术网

Php 用post_title MYSQL中的单词替换post_内容中的[keyword]

Php 用post_title MYSQL中的单词替换post_内容中的[keyword],php,mysql,sql,wordpress,Php,Mysql,Sql,Wordpress,我今天有点暴跳如雷,因为我已经尝试了好几个星期让我的网站完全正常运行 我有大约500篇标题为“XXXXX最佳酒店交易”的帖子,我在表中的每个帖子内容行中都有一个模板 模板中有[keyword]之类的词,我想用标题中的“XXX”替换“[keyword]” 这可能吗 例如: “post_title=伦敦最佳酒店交易” post_content=我们在[关键字]中有最优惠的酒店交易。“ 我想用London替换[关键字]。“在post_内容中 我也有一些我想受影响的某些帖子的搜索条件,它们如下: SEL

我今天有点暴跳如雷,因为我已经尝试了好几个星期让我的网站完全正常运行

我有大约500篇标题为“XXXXX最佳酒店交易”的帖子,我在表中的每个帖子内容行中都有一个模板

模板中有[keyword]之类的词,我想用标题中的“XXX”替换“[keyword]”

这可能吗

例如:

“post_title=伦敦最佳酒店交易”

post_content=我们在[关键字]中有最优惠的酒店交易。“

我想用London替换[关键字]。“在post_内容中

我也有一些我想受影响的某些帖子的搜索条件,它们如下:

SELECT *
wp\u帖子
其中
post_title
如“全球最佳酒店交易%” 和
post_状态
类似“草稿”

有什么建议吗?

  • 首先,您需要使用“/best hotel deals in(+.+?)$/i”等模式从post_title中提取title关键字,如果title关键字位于行末,则使用$

  • 然后,使用php将[keyword]替换为第一步中找到的关键字


至于您的搜索条件问题,我不理解您的问题,请详细说明。

您可以在SQL中对单个关键字进行更新,如下所示:

update
    wp_posts
set
    post_content = 
        concat(
            substr(post_content, 1, instr(post_content, '[Keyword]') - 1),
            substr(post_title, instr(post_title, 'Best hotel deals in ') + 20),
            substr(post_content, instr(post_content, '[Keyword]') + 9)
        )
where
    post_title like 'best hotel deals in%' and
    post_status = 'draft' and
    post_content like '%\\[keyword\\]%'
但是,请注意,如果您要处理多个关键字,这将很快变得混乱。您最好使用WordPress的内置模板工具,或者WordPress的众多插件之一,而不是直接在数据库中进行大量操作。方钉、圆孔等等。我最后用了这个:

    update wp_posts
set post_content = REPLACE(post_content,'[keyword]',trim(SUBSTR(post_title, 21))) 
where post_title like 'best hotel deals in%' and post_status = 'draft'`
像做梦一样工作


谢谢大家

@acgressionexp,我对sql完全是个业余爱好者,所以我不知道如何使用php正则表达式,但是,如果有帮助的话,我在CSV上有一个单独列出所有关键字的列表。真的需要一些帮助,有什么方法可以做到这一点吗?或者有人知道任何插件吗?嗨,jokeeffe,我仅有的关键词是[keyword],我只是有很多次。或者你的意思是,如果在“最佳酒店交易”之后有两个关键词,例如“北伦敦”,它可能会变得混乱?当你提到你在CSV文件中有一个关键词列表时,这让我觉得你在寻找替换多个关键词的方法。上述技术将适用于类似“北伦敦”的情况。我认为您可能会遇到问题的地方是,如果您想在[Location]中进行类似“Best[DealType]in[Location]”这样的替换--编写这样的通用模板机制可能不是您希望在SQL中执行的操作。我使用了上面的查询,我必须更改“[Keyword]”中的大写字母以正确应用它,但它只影响了1个“[关键字]”,我有6个“[关键字]”要在内容中替换。