致命错误:找不到类'Elementor \ Widget_Base'

时间:2019-03-12 16:13:14

标签: php elementor

我正在尝试从插件中将新的小部件添加到elementor。我已经按照文档介绍了如何创建元素或小部件:https://developers.elementor.com/creating-a-new-widget/

但是问题是它不起作用。 1号当我使用自动加载时,它没有显示任何错误 2号但是,当我使用require_once时,会显示一个致命错误:Fatal error: Class 'Elementor\Widget_Base' not found

我的小部件代码

<?php
namespace WPEVENTCAL\extensions\elementor;

class widget extends \Elementor\Widget_Base {

    public function get_name() {
        return 'Aembed';
    }

    public function get_title() {
        return __( 'oEmbed', 'plugin-name' );
    }

    public function get_icon() {
        return 'fa fa-code';
    }

    public function get_categories() {
        return [ 'basic' ];
    }

    protected function _register_controls() {

        $this->start_controls_section(
            'content_section',
            [
                'label' => __( 'Content', 'plugin-name' ),
                'tab' => \Elementor\Controls_Manager::TAB_CONTENT,
            ]
        );

        $this->add_control(
            'url',
            [
                'label' => __( 'URL to embed', 'plugin-name' ),
                'type' => \Elementor\Controls_Manager::TEXT,
                'input_type' => 'url',
                'placeholder' => __( 'https://your-link.com', 'plugin-name' ),
            ]
        );

        $this->end_controls_section();

    }

    protected function render() {

        $settings = $this->get_settings_for_display();

        $html = wp_oembed_get( $settings['url'] );

        echo '<div class="oembed-elementor-widget">';

        echo ( $html ) ? $html : $settings['url'];

        echo '</div>';

    }   

}

我的文件夹结构

-Main plugin file -extension -elementor -widget.php - index.php

index.php中,我打电话给require_once( 'extensions/elementor/widget.php' );

它抛出该错误:Fatal error: Class 'Elementor\Widget_Base' not found

但是当我在索引中使用自动加载功能时,它没有给出任何错误,也没有显示小部件

use WPEVENTCAL\extensions\elementor\index;
function autoload($class = '') {
    if (!strstr($class, 'WPEVENTCAL')) {
        return;
    }
    $result = str_replace('WPEVENTCAL\\', '', $class);
    $result = str_replace('\\', '/', $result);
    require $result . '.php';
}

可能是什么问题>?

1 个答案:

答案 0 :(得分:0)

开始时,不会加载Elementor类。因此,请使用init WordPress钩子,在该函数中,需要文件并按照以下代码中的建议创建一个对象。

function load_elementor_widget() {
    require('your-php-code-that-extends-elementor-widget-class');

    \Elementor\Plugin::instance()->widgets_manager->register_widget_type( new \Elementor\My_Widget_1() );
}
add_action('init', load_elementor_widget())

请查看本教程链接,以帮助您了解: https://develowp.com/build-a-custom-elementor-widget/