我正在开发一个供我自己使用的插件,我想摆脱顶部出现的所有烦人的wordpress消息,包括更新,错误,信息等。鉴于插件的菜单页面是由生成的明显事实PHP,我尝试用PHP代码删除这些消息,根据我的研究是这样的:
function remove_core_updates(){
global $wp_version;return(object) array('last_checked'=> time(),'version_checked'=> $wp_version,);
}
add_filter('pre_site_transient_update_core','remove_core_updates');
add_filter('pre_site_transient_update_plugins','remove_core_updates');
add_filter('pre_site_transient_update_themes','remove_core_updates');
我在插件php文件的顶部添加了此内容并应删除通知,但仍会显示某些插件的错误消息。除此之外,上面的代码删除了我在仪表板中访问的所有菜单页面的更新通知。这是我不想要的。
作为一种解决方法,我编写了一个能够实现我想要的功能:
function remove_wp_messages(selector) {
var child = document.querySelector(selector),
parent = child.parentNode,
index = Array.prototype.indexOf.call(parent.children, child);
for (var i = 1; i < Number(index + 1); i++) {
var elements = document.querySelector("#wpbody-content > :nth-child(" + i + ")");
while (elements.firstChild) {
elements.removeChild(elements.firstChild);
elements.style.display = "none";
}
}
}
window.onload = remove_wp_messages("#wpbody-content > link");
鉴于我添加到菜单页面的第一个html元素是外部样式表link
, javascript函数高于returns
link
的索引从元素中移除所有子节点直到link
,因此循环。这是问题,我不仅要删除子元素,还要删除父元素,这相当于删除插件内容之上的通知。我试过更换:
elements.style.display = "none";
有了这个:
elements.remove();
没有运气。我不明白的是,父元素被隐藏,但我用remove()
替换它删除我的内容而不是通知。为什么?我对php和javascript建议持开放态度。
解
根据@PetrSr的回答,我的代码现在看起来像这样:
function remove_wp_messages(selector) {
var child = document.querySelector(selector),
parent = child.parentNode,
index = Array.prototype.indexOf.call(parent.children, child);
for (var i = Number(index); i > 0; i--) {
document.querySelector("#wpbody-content > :nth-child(" + i + ")").remove();
}
}
非常简单。
答案 0 :(得分:1)
向后循环这些元素可以解决您的问题:
for (var i = Number(index); i > 0; i--) {
//your code
}
当你删除DOM元素时,你不能循环前进,因为删除element1后,element2成为第一个元素。如果然后删除第二个元素,实际上是删除了原来的element3。等