根据评论IP地址使用国家/地区国旗作为用户头像?

时间:2020-05-11 作者:SuperAtic

试图找到分配国家的方法flags 而是使用MisteryMan图标、Gravatar或用户头像。

关于从哪里开始,有什么帮助或建议吗?

1 个回复
SO网友:Rup

你需要加入get_avatar() 在某处有很多选择:

get\\u avatar()本身是可插拔的,因此您可以批量替换该函数,但它将<img> 标记,因此可能更容易挂钩get_avatar_url(), 它本身只是一个包装get_avatar_data(), 让get\\u avatar()仍然为您构建HTML,而挂接get\\u avatar\\u数据的明显点是pre_get_avatar_data 挂钩:

/**
 * Filters whether to retrieve the avatar URL early.
 *
 * Passing a non-null value in the \'url\' member of the return array will
 * effectively short circuit get_avatar_data(), passing the value through
 * the {@see \'get_avatar_data\'} filter and returning early.
 *
 * @since 4.2.0
 *
 * @param array $args        Arguments passed to get_avatar_data(), after processing.
 * @param mixed $id_or_email The Gravatar to retrieve. Accepts a user ID, Gravatar MD5 hash,
 *                           user email, WP_User object, WP_Post object, or WP_Comment object.
 */
$args = apply_filters( \'pre_get_avatar_data\', $args, $id_or_email );
这有点复杂,因为您需要处理许多不同类型的输入,但您可以借用调用下面的代码来实现这一点。在过滤器处理程序中,您需要确定用户、电子邮件或评论来自哪个国家,然后设置$args[\'url\'] 作为要使用的标志图像。

然而,这本身并不是那么简单:

注释可能是最简单的情况,因为您在WP\\u Comment对象中有注释者的IP地址;然后可以查找一次并将其存储为注释元,或者使用其他IP地址查找缓存方案;你不想因为每次页面加载时的每条评论都打电话给地理定位服务,按ID或WP\\U用户分类的用户可能也很好:你只需要在某个时候针对用户存储一个IP地址和国家/地区,然后再将其存储在用户元中就可以了,因为你可以查找作者用户,然后按上述步骤进行操作,但是如何处理电子邮件地址呢?您可以尝试查找一个用户并使用它,如果不匹配,也可以尝试添加注释,但您只想在可能的情况下执行一次,并缓存结果、成功或失败。也许是暂时的连载词典?但这并不是一个很好的解决方案