我在Wordpress站点上实现了一个PJAX (推态AJAX)库来处理页面转换,当页面内容被更新时,除了Wordpress插件之外,所有东西都按预期加载。
这是因为我已经用jS重新初始化了所有其他的东西,但是我在不费力地重新加载页面的情况下,只能在需要的情况下重新初始化Wordpress插件。
在页面之间更改时,PJAX库调用:
reinitWPPlugins();它触发此函数:
function reinitWPPlugins(){
// reinit Wordpress Plugins <- this is what I need help with
}有什么方法可以强制某些插件重新初始化吗?也许是WP ajax钩子?或者调用functions.php中的PHP片段?
发布于 2022-02-08 12:14:58
对任何遇到这个问题的人来说,这都是自上而下的结果。插件本身在插件的初始化脚本中使用DOMContentLoaded (正如@JacobPeattie指出的那样)。
因此,我创建了一个没有DOMContentLoaded函数包装器的初始化脚本的克隆,并将它以不同的文件名(reinitPlugin.js)转储到服务器上的一个永久文件夹中。
然后,当reinitGallery();从Barba.js转换中触发时,我使用.remove()从DOM中删除了CSS和jS,并且只在需要呈现插件内容的页面上重新追加核心样式和脚本标记(/gallery)。
简单地用初始化脚本进行相同的“交换/替换”没有正确工作,没有控制台错误,它根本没有触发,文件本身在DOM中被更新,只是没有骰子。由于Barba.js是PJAX,所以我决定尝试一个.ajax()函数来加载脚本,并将其包装在setTimeout()中,以确保在其他脚本呈现后加载脚本。
function reInitGallery() {
jQuery("#plugin-css").remove();
jQuery("#plugin-js").remove();
jQuery("#plugin-js-after").remove();
if (window.location.href.indexOf("gallery") > -1) {
// reinit css
jQuery('head').append('<link rel="stylesheet" id="plugin-css" href="/plugins/plugin/css/plugin.css" type="text/css" media="all" />');
// reinit js
var pluginReplacementScript = document.createElement('script');
fwds3dcovReplacementScript.type = 'text/javascript';
fwds3dcovReplacementScript.id = 'plugin-js';
fwds3dcovReplacementScript.src = '/wp-content/plugins/plugin/js/plugin.js';
document.body.appendChild(pluginReplacementScript);
// reinit js after
setTimeout(function() {
jQuery.ajax({
url: '/wp-content/plugins/plugin/js/reinitPlugin.js',
dataType: "script"
});
}, 300);
}
}https://wordpress.stackexchange.com/questions/402304
复制相似问题