我试图在帖子中获取TLD的第一个实例,并将其插入到自定义字段中。例如,使用帖子:
嗨,我是鲍勃。我的网站是http://bob.com 你可以在bob@bob.com
我想在自定义字段“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\');
这(正如你可能看到的)不起作用。任何帮助都将不胜感激。
泰
SO网友:Doug Wollison
首先,你的return
语句是在您实际添加元数据之前,所以钩子是在它可以这样做之前终止的。记住这一点return
结束它所在的函数,所以只把它放在最末端或你想让它短路的地方。
第二,你的正则表达式有点不合适;您不应该使用^和$标记,因为您试图在文本中的任何位置匹配域名。
以下是一种可能会起作用的模式:
/(?<=^|\\/|\\s)([\\w\\-\\.]+\\.\\w+)(?=^|\\/|\\s)/
这将匹配
bob.com
, 但不是
bob@bob.com
因为
(?<=)
和
(?=)
位告诉它只考虑前面/后面有字符串开头/结尾、正斜杠或空白字符的匹配。您可能需要摆弄这些列表,以确保它不会意外地抓取其他内容,或丢失由HTML等其他内容包围的有效条目。