2017-05-07 95 views
5

我为Divi构建器开发了一个自定义简单模块。它在后端和前端编辑器中正确显示。Divi Builder自定义模块

问题是它在后端或前端编辑器中根本不会保存。当我将它放入后端编辑器并保存该文章时,它将在重新加载后端编辑器后丢失!

这里是我模块类:

class My_Custom_Module extends ET_Builder_Module 
{ 
    public function init() 
    { 
     $this->name = __('My Custom Module', 'wpl'); 
     $this->slug = 'CUSTOM_SLUG'; 
    } 
} 

new My_Custom_Module(); 

我跟着这篇文章https://jonathanbossenger.com/building-your-own-divi-builder-modules/How to create custom Divi module?,并且我发现由谷歌的一些其他物品。

我已经试过把一些字段放在get_fields函数中,但它也没有帮助。

另外要确保它不是冲突,我禁用了所有其他插件,但它没有修复,因此它与冲突无关。

+0

有教程下评论更新,你检查一下: UPDATE:在准备这篇文章,我发现我的自定义模块并不总是加载到页面生成器中。我无法弄清楚为什么直到我发现Divi Page Builder缓存如何工作。所以一定要检查一下。 – IqbalBary

+0

是的,我检查了它。 – Hossein

+0

我自己找到了解决方案。请检查我自己的答案。 – Hossein

回答

5

我终于自己发现了这个问题,我在这里分享它来帮助其他人,如果他们面临同样的问题。

问题中的简单模块不会保存,因为它的slug,它缺少et_pb_前缀。当我将$this->slug = 'custom_module'更改为$this->slug = 'et_pb_custom_module'时,它工作正常。

我没有在他们的文档中看到这个规则,但我希望他们在某处提到它。

下面是一个简单的迪维自定义模块的工作代码:

function custom_divi_register_modules() 
{ 
    if(class_exists('ET_Builder_Module')) 
    { 
     class custom_divi_module extends ET_Builder_Module 
     { 
      public function init() 
      { 
       $this->name = __('Custom Module', 'et_builder'); 
       $this->slug = 'et_pb_custom_module'; 
       $this->fb_support = true; 
      } 
     } 

     new custom_divi_module; 
    } 
} 
add_action('et_builder_ready', 'custom_divi_register_modules'); 
+0

确认...自定义模块的段落需要在段落中有一个“et_pb_”前缀,以便Divi保存模块。不知道为什么或如何正确工作,但如果您正在构建自定义Divi模块,这是重要的信息。 – braican

+0

我在线学习了一个教程来创建一个自定义模块,但得到一个致命错误,指出'ET_Builder_Module_Type_PostBased'类不存在。将自定义模块类封装在函数中并通过钩子调用:'add_action('et_builder_ready','custom_divi_register_modules');'修复了我遇到的问题 – Matthew

+0

@Hossein您可以在上面的工作示例中发布更多代码吗?该代码段确实注册了模块,并在构建器中显示,但我正在寻找一个简单的示例,其中显示了如何在构建器中设置字段值并将其显示在页面中。 – aalaap

-1

这不会发生。 WordPress中的其他插件可能会导致冲突。我会做的是做一个全新的WordPress的安装,应用Divi主题,尝试保存模块。如果它确实保存。然后,您可以通过逐个安装插件来隔离问题并知道哪个插件导致问题。

+0

感谢您的赏金! –

+0

嗨罗德尼,你的欢迎,虽然你的回答并没有解决问题。我自己发现了这个问题。你可以检查我自己的答案。 – Hossein