从内容中提取TLD并分配给自定义字段

时间:2016-02-21 作者:Tai

我试图在帖子中获取TLD的第一个实例,并将其插入到自定义字段中。例如,使用帖子:

嗨,我是鲍勃。我的网站是http://bob.com 你可以在[email protected]

我想在自定义字段“user\\u domain”中插入“bob.com”,我正在使用“publish\\u post”操作,这样当用户发布帖子时,它会自动将找到的域分配给自定义字段。

我已经尝试了几个小时,得出了以下结论:

    $content = strtolower($content);
function filterdomain($content) {
$founddomain = preg_match(\'/^[-a-z0-9]+\\.[a-z]{2,6}$/\', $content);
return $content;
      add_post_meta($post[\'ID\'], \'user_domain\', $founddomain);
}
add_filter(\'content_save_pre\',\'filterdomain\');
add_action(\'publish_post\', \'filterdomain\');
这(正如你可能看到的)不起作用。任何帮助都将不胜感激。

1 个回复
SO网友:Doug Wollison

首先,你的return 语句是在您实际添加元数据之前,所以钩子是在它可以这样做之前终止的。记住这一点return 结束它所在的函数,所以只把它放在最末端或你想让它短路的地方。

第二,你的正则表达式有点不合适;您不应该使用^和$标记,因为您试图在文本中的任何位置匹配域名。

以下是一种可能会起作用的模式:

/(?<=^|\\/|\\s)([\\w\\-\\.]+\\.\\w+)(?=^|\\/|\\s)/

这将匹配bob.com, 但不是[email protected] 因为(?<=)(?=) 位告诉它只考虑前面/后面有字符串开头/结尾、正斜杠或空白字符的匹配。您可能需要摆弄这些列表,以确保它不会意外地抓取其他内容,或丢失由HTML等其他内容包围的有效条目。

相关推荐

GET_POSTS查询大约需要40秒来执行

我在get\\u帖子中有一个元查询,它需要花很长时间才能完成。它工作得很好,但只是时间太长了。我有一个名为event. 在每个event 发布后,有自定义元数据:post\\U sort\\U日期(事件日期YmdHis 格式,用于排序)我需要做的是获取下一个事件,该事件相对于$year 和$month 变量。所以如果$year = 2021 和$month = 10 (2021 10月)然后应该在2021 11月或之后找到第一个事件。我下面的查询很好,但很慢。执行大约需要40秒,我不知道为什么。$next