首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用jS动态地恢复Wordpress插件?

问如何使用jS动态地恢复Wordpress插件?
EN

WordPress Development用户
提问于 2022-02-07 11:33:00
回答 1查看 165关注 0票数 0

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

这是因为我已经用jS重新初始化了所有其他的东西,但是我在不费力地重新加载页面的情况下,只能在需要的情况下重新初始化Wordpress插件。

在页面之间更改时,PJAX库调用:

代码语言:javascript
复制
reinitWPPlugins();

它触发此函数:

代码语言:javascript
复制
function reinitWPPlugins(){
   // reinit Wordpress Plugins <- this is what I need help with
}

有什么方法可以强制某些插件重新初始化吗?也许是WP ajax钩子?或者调用functions.php中的PHP片段?

EN

回答 1

WordPress Development用户

发布于 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()中,以确保在其他脚本呈现后加载脚本。

工作代码:

代码语言:javascript
复制
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);
    }
}
票数 0
EN
页面原文内容由WordPress Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://wordpress.stackexchange.com/questions/402304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档