Неустранимая ошибка: класс Elementor \ Widget_Base не найден.

Я пытаюсь добавить новый виджет из моего плагина в 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';
}

в чем может быть проблема>?


person Tick Twitch    schedule 12.03.2019    source источник
comment
Проблема в том, чтобы найти Elementor \ Widget_Base, вы уверены, что загрузили его через автозагрузчик? у вас в приложении есть основной автозагрузчик?   -  person Oras    schedule 12.03.2019
comment
@Oras Когда он загружается через автозагрузчик, он не загружается, но когда я использую require_once, он загружается и показывает эту фатальную ошибку   -  person Tick Twitch    schedule 12.03.2019


Ответы (1)


Сначала класс Elementor не загружается. Поэтому используйте обработчики 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/

person Prashantkumar K B    schedule 08.04.2020