首页 > 解决方案 > 如何在我的子主题中注册超过 1 个自定义 Elementor 小部件?

问题描述

我最近遵循了这个简单的教程,它允许我在我正在开发的 WordPress 网站上注册和使用我自己的自定义 Elementor 小部件。

https://develowp.com/build-a-custom-elementor-widget/

然而,我想不通的是如何调整这段代码,以便我可以注册多个不同的 elementor 小部件。现在发生的事情是,一旦我尝试注册第二个自定义 Elementor 小部件——第二个小部件完全覆盖了我的第一个小部件(无论是在后台的 Elementor 中,还是在网站的前端。

以下是我尝试在“my-widgets.php”文件中修改的几行代码(我在 functions.php 文件中引用了这些代码,就像在教程中一样):

    protected function __construct() {      
        require_once('rpp_contact_bar.php');
        require_once('rpp_newsletter_sign_up_bar.php');
        add_action( 'elementor/widgets/widgets_registered', [ $this, 'register_widgets' ] );
    }       

    public function register_widgets() {
        \Elementor\Plugin::instance()->widgets_manager->register_widget_type( new \Elementor\My_Widget_1() );
        \Elementor\Plugin::instance()->widgets_manager->register_widget_type( new \Elementor\My_Widget_2() );
    }

请注意,我的 2 个小部件 PHP 文件(在上面的代码中引用)使用类名“My_Widget_1”和“My_Widget_2”来扩展“Widget_Base”类。

我在这里想念什么?在子主题中注册多个不同的自定义 Elementor 小部件的正确方法是什么?

谢谢,---伊万

标签: phpwordpresselementor

解决方案


您的类(My_Widget_1My_Widget_2,在您的示例中)包含一个get_name()方法,该方法为您的两个小部件返回相同的名称。您应该更改其中一个,以便每个名称都是唯一的。

每个小部件都需要一些基本设置,例如在代码中标识小部件的唯一名称 [...]

“创建新小部件”,Elementor 开发人员


小部件似乎遵循与 PHP 中的函数名称相同的规则(即以字母或下划线开头,后跟字母、数字或下划线)。不过,我在文档中找不到任何提及的内容。

所以,我认为title-subtitle由于连字符 ( -),您的工作不正常。


推荐阅读