如何使用JS动态地重新启动WordPress插件?

时间:2022-02-07 作者:van

我在我的Wordpress站点上实现了一个PJAX(推送状态AJAX)库来处理页面转换,当页面内容更新时,除了Wordpress插件之外,所有内容都按预期加载。

这是因为我已经使用jS重新初始化了所有其他内容,但我一直在研究如何根据需要重新初始化Wordpress插件,而无需重新加载页面。

在页面之间切换时,PJAX库调用:

reinitWPPlugins();
触发此功能的:

function reinitWPPlugins(){
   // reinit Wordpress Plugins <- this is what I need help with
}
有没有办法强制某些插件重新初始化?也许是WP ajax挂钩?甚至调用函数中的PHP代码段。php?

1 个回复
SO网友:van

Figured it out, 对于任何其他遇到这个问题的人来说,这里是它的自上而下。插件本身正在使用DOMContentLoaded (正如@JacobPeattie), 在插件的初始化脚本中。

所以我创建了一个没有DOMContentLoaded 函数包装器,并将其转储到服务器上另一个文件名下的永久文件夹中(reinitPlugin.js).

那么什么时候reinitGallery(); 被Barba解雇了。js转换,我使用.remove() 并仅在需要呈现插件内容的页面上重新添加核心样式和脚本标记(/gallery).

简单地对初始化脚本执行相同的“交换/替换”操作无法正常工作,没有控制台错误,根本没有触发,文件本身在DOM中更新,只是没有骰子。由于Barba。js作为PJAX,我决定尝试.ajax() 函数加载脚本并将其包装到setTimeout() 确保它在其他脚本渲染完毕后加载,瞧。

Working Code:

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);
    }
}

相关推荐

未从cPanel PHP版本值中选择WordPress PHP版本/信息

在我的WordPress仪表板中,我收到一个错误,我的PHP版本需要更新到v7.4,因为它当前显示的是v5.6.40。事实上,我已经进入了这个网站的cPanel,并将PHP版本更新为7.4,以及其他一些选项值。据我所见,它似乎根本没有从WordPress中获得任何这些变化,就像在Tools > Site Health > Info > Server, 这些值都不符合cPanel PHP版本更改。我正在运行WordPress 5.8.3,但非常感谢您的帮助,因为WordPress在站点运行