比较预保存的POST_TITLE和后保存的POST_TITLE

时间:2015-03-07 作者:Programmer Dan

我正在Wordpress产品网站上实现一个库存更新程序,该网站通过其自定义api与第三方网站集成。我们将有很多人更新第三方网站,我需要在我们的产品网站上设置自动更新,以便对第三方网站上的库存所做的更改反映在我们的产品网站上。

我几乎所有的东西都很有魅力(cron job等),但我在更新post\\u标题时遇到了一些困难。保存给定帖子(产品帖子类型)时,Wordpress正在清理帖子标题。我希望能够在第三方网站上更新产品名称,然后将新值自动保存到我们的产品网站。我正在使用wp\\u update\\u post来完成以下任务:

$updatedPostId= wp_update_post(
    array(
        \'ID\' => $thisId,
        \'post_title\' => $newTitle
    )
);
我的问题在于,如果不需要的话,我不想重新保存每个产品帖子的post\\u标题(目前,这使我的cron作业的运行时间增加了一倍多)。因此,我试图将$newTitle与Wordpress中当前的标题进行比较。我正在使用php函数“strcmp”进行此操作:

if(
    ($newTitle!=\'\')&&
    (strcmp($newTitle, get_the_title($thisId))!=0)
)
如果该语句的计算结果为true,那么我调用上面显示的wp\\u update\\u post。我的问题是,来自第三方网站的产品名称的价值评估不等于Wordpress产品网站post\\u标题中的许多产品(网站上有大约2000个产品,其中大约100个产品未通过此检查)。我查看了标题本身,在大多数情况下,它们看起来都是一样的:

Eg:
    From 3rd party:  Arnold Iron Whey [2 LBS] [Cookies & Cream]
    From Wordpress:  Arnold Iron Whey [2 LBS] [Cookies & Cream]

(Note: My text editor highlights the ampersand and the space immediately after it
in the 3rd-party product name but not in the one from Wordpress) 
不过strcmp的计算结果并不是零,所以我知道它们之间有一些只有计算机才能理解的不同之处。太糟糕了,我看不见的字符。

因此,我需要对第三方网站上的产品名称进行“清理”,以便在通过strcmp时,其评估结果与已清理的Wordpress post\\u标题相同。要做到这一点,我需要做什么?我找到了一个选项(sanitize\\u text\\u field),可以消除大约20个此类误报,但我已经为此工作了大约半天,我还没有找到一个有效的答案。

现在,随着我每次运行cron\\u作业,这大约100种产品的post\\u标题都被一次又一次地保存下来,我宁愿避免这样做。如果可能的话。

1 个回复
最合适的回答,由SO网友:Programmer Dan 整理而成

嗯,我从来没有得到任何关于这方面的输入,最终使用了sanitize\\u title函数,它的限制性比我想要的要大(处理URL中要使用的标题--本质上是为帖子返回一个slug),但这是我能找到的最好的解决方案。通过从Wordpress到sanitize\\u title运行第三方产品名称和post\\u title,然后将它们与strcmp进行比较,我已经非常接近能够有效地比较这两个字符串。诚然,这可能会遗漏一些小的差异,比如标点符号的变化,但它会得到重要的差异(文本),同时不会再次要求我不断地不必要地重新保存这些名称。

结束