在一个新的wordpress网站上,我意识到,有时在测试帖子的评论功能时,不会出现“你的评论是一种温和的评论”的消息。
发布评论时,页面刷新时的url包含新评论包装div的锚点。在该div中,通常会显示一条消息“您的评论正在等待审核”,而不是在普通用户发表评论时显示评论。
但是,当出现此问题时,虽然锚仍然位于返回页面的url中,但整个注释元素不在html中。这意味着锚定点不存在,因此当页面加载时,它不会跳到最后一个注释点,而是停留在最顶端。
可靠地重复这个问题非常困难。首先有一种预感,这种情况只发生在某些浏览器上。然后,当我意识到从php返回的html只是缺少刚刚做出的注释(或者至少是它的包装器和等待消息)时,我意识到必须要做一些非常基本的事情。
我的直觉是,这是因为我的测试消息(通常只包含几个单词或字符,并不是真正准确的消息表示)被Askimet捕获(是的,它已安装并正在运行)并标记为垃圾邮件。我发现我的一些测试被标记为垃圾邮件,因此我得出结论,这可能是等待审核消息没有出现的原因。
然而,我也肯定没有让消息出现,我所做的测试评论被askimet清除为ok。所以我不确定我的假设是否完全正确。
是否有人知道此消息的内部工作原理,并能确认此消息可能不会出现的原因?
SO网友:AdamJones
我通过在JS/Jquery中处理这一切来解决这个问题。
在jQuery document ready子句中,我在页面加载中查找特定类型的锚,如果存在,我假设消息刚刚发布。然后,我使用jQuery在页面顶部显示一条漂亮的小警报消息。
出于下面示例代码的目的,我使用了一个标准的JS警报函数调用来显示消息,这样您就可以更改它并创建自己的消息显示函数。
$(document).ready(function() {
// check for comment posts
if(window.location.hash) {
var urlHash=window.location.hash;
if(urlHash.indexOf(\'#comment-\') === 0) {
alert("Thank you for submitting your comment. It will be reviewed and set live as soon as possible.);
}
}
});