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

时间:2018-05-17 作者:Alexander

我正在尝试在Elementor中创建基本的小部件。遵循开发人员文档创建新小部件时,会引发以下错误:

致命错误:找不到类“Elementor\\Widget\\u Base”

这是我的代码(大部分是从官方文件复制的)

Main plugin extension class:

<?php
/**
 * Plugin Name: Deo Elementor Extension
 * Description: Custom Elementor extension.
 * Plugin URI:  https://elementor.com/
 * Version:     1.0.0
 * Author:      DeoThemes
 * Author URI:  https://elementor.com/
 * Text Domain: deo-elementor-extension
 */

if ( ! defined( \'ABSPATH\' ) ) {
    exit; // Exit if accessed directly.
}

/**
 * Main Elementor Test Extension Class
 *
 * The main class that initiates and runs the plugin.
 *
 * @since 1.0.0
 */
final class Elementor_Test_Extension {

    /**
     * Plugin Version
     *
     * @since 1.0.0
     *
     * @var string The plugin version.
     */
    const VERSION = \'1.0.0\';

    /**
     * Minimum Elementor Version
     *
     * @since 1.0.0
     *
     * @var string Minimum Elementor version required to run the plugin.
     */
    const MINIMUM_ELEMENTOR_VERSION = \'2.0.0\';

    /**
     * Minimum PHP Version
     *
     * @since 1.0.0
     *
     * @var string Minimum PHP version required to run the plugin.
     */
    const MINIMUM_PHP_VERSION = \'7.0\';

    /**
     * Instance
     *
     * @since 1.0.0
     *
     * @access private
     * @static
     *
     * @var Elementor_Test_Extension The single instance of the class.
     */
    private static $_instance = null;

    /**
     * Instance
     *
     * Ensures only one instance of the class is loaded or can be loaded.
     *
     * @since 1.0.0
     *
     * @access public
     * @static
     *
     * @return Elementor_Test_Extension An instance of the class.
     */
    public static function instance() {

        if ( is_null( self::$_instance ) ) {
      self::$_instance = new self();
        }
        return self::$_instance;

    }

    /**
     * Constructor
     *
     * @since 1.0.0
     *
     * @access public
     */
    public function __construct() {

        add_action( \'init\', [ $this, \'i18n\' ] );
        add_action( \'plugins_loaded\', [ $this, \'init\' ] );

    }

    /**
     * Load Textdomain
     *
     * Load plugin localization files.
     *
     * Fired by `init` action hook.
     *
     * @since 1.0.0
     *
     * @access public
     */
    public function i18n() {

        load_plugin_textdomain( \'elementor-test-extension\' );

    }

    /**
     * Initialize the plugin
     *
     * Load the plugin only after Elementor (and other plugins) are loaded.
     * Checks for basic plugin requirements, if one check fail don\'t continue,
     * if all check have passed load the files required to run the plugin.
     *
     * Fired by `plugins_loaded` action hook.
     *
     * @since 1.0.0
     *
     * @access public
     */
    public function init() {

        // Check if Elementor installed and activated
        if ( ! did_action( \'elementor/loaded\' ) ) {
            add_action( \'admin_notices\', [ $this, \'admin_notice_missing_main_plugin\' ] );
            return;
        }

        // Check for required Elementor version
        if ( ! version_compare( ELEMENTOR_VERSION, self::MINIMUM_ELEMENTOR_VERSION, \'>=\' ) ) {
            add_action( \'admin_notices\', [ $this, \'admin_notice_minimum_elementor_version\' ] );
            return;
        }

        // Check for required PHP version
        if ( version_compare( PHP_VERSION, self::MINIMUM_PHP_VERSION, \'<\' ) ) {
            add_action( \'admin_notices\', [ $this, \'admin_notice_minimum_php_version\' ] );
            return;
        }

        // Include plugin files
    $this->includes();

    // Register widgets
     add_action( \'elementor/widgets/widgets_registered\', [ $this, \'register_widgets\' ] );

    }

    /**
     * Admin notice
     *
     * Warning when the site doesn\'t have Elementor installed or activated.
     *
     * @since 1.0.0
     *
     * @access public
     */
    public function admin_notice_missing_main_plugin() {

        if ( isset( $_GET[\'activate\'] ) ) unset( $_GET[\'activate\'] );

        $message = sprintf(
            /* translators: 1: Plugin name 2: Elementor */
            esc_html__( \'"%1$s" requires "%2$s" to be installed and activated.\', \'elementor-test-extension\' ),
            \'<strong>\' . esc_html__( \'Elementor Test Extension\', \'elementor-test-extension\' ) . \'</strong>\',
            \'<strong>\' . esc_html__( \'Elementor\', \'elementor-test-extension\' ) . \'</strong>\'
        );

        printf( \'<div class="notice notice-warning is-dismissible"><p>%1$s</p></div>\', $message );

    }

    /**
     * Admin notice
     *
     * Warning when the site doesn\'t have a minimum required Elementor version.
     *
     * @since 1.0.0
     *
     * @access public
     */
    public function admin_notice_minimum_elementor_version() {

        if ( isset( $_GET[\'activate\'] ) ) unset( $_GET[\'activate\'] );

        $message = sprintf(
            /* translators: 1: Plugin name 2: Elementor 3: Required Elementor version */
            esc_html__( \'"%1$s" requires "%2$s" version %3$s or greater.\', \'elementor-test-extension\' ),
            \'<strong>\' . esc_html__( \'Elementor Test Extension\', \'elementor-test-extension\' ) . \'</strong>\',
            \'<strong>\' . esc_html__( \'Elementor\', \'elementor-test-extension\' ) . \'</strong>\',
             self::MINIMUM_ELEMENTOR_VERSION
        );

        printf( \'<div class="notice notice-warning is-dismissible"><p>%1$s</p></div>\', $message );

    }

    /**
     * Admin notice
     *
     * Warning when the site doesn\'t have a minimum required PHP version.
     *
     * @since 1.0.0
     *
     * @access public
     */
    public function admin_notice_minimum_php_version() {

        if ( isset( $_GET[\'activate\'] ) ) unset( $_GET[\'activate\'] );

        $message = sprintf(
            /* translators: 1: Plugin name 2: PHP 3: Required PHP version */
            esc_html__( \'"%1$s" requires "%2$s" version %3$s or greater.\', \'elementor-test-extension\' ),
            \'<strong>\' . esc_html__( \'Elementor Test Extension\', \'elementor-test-extension\' ) . \'</strong>\',
            \'<strong>\' . esc_html__( \'PHP\', \'elementor-test-extension\' ) . \'</strong>\',
             self::MINIMUM_PHP_VERSION
        );

        printf( \'<div class="notice notice-warning is-dismissible"><p>%1$s</p></div>\', $message );

    }

    /**
     * Include Files
     *
     * Load required plugin core files.
     *
     * @since 1.0.0
     *
     * @access public
     */
    public function includes() {

        require_once( __DIR__ . \'/widgets/test-widget.php\' );
        //require_once( __DIR__ . \'/controls/test-control.php\' );

  }


  public function register_widgets() {

    \\Elementor\\Plugin::instance()->widgets_manager->register_widget_type( new \\Elementor_oEmbed_Widget() );

  }


}

Elementor_Test_Extension::instance();

Test widget class:

<?php

if ( ! defined( \'ABSPATH\' ) ) {
    exit; // Exit if accessed directly.
}

class Elementor_oEmbed_Widget extends \\Elementor\\Widget_Base {

    /**
     * Get widget name.
     *
     * Retrieve oEmbed widget name.
     *
     * @since 1.0.0
     * @access public
     *
     * @return string Widget name.
     */
    public function get_name() {
        return \'oembed\';
    }

    /**
     * Get widget title.
     *
     * Retrieve oEmbed widget title.
     *
     * @since 1.0.0
     * @access public
     *
     * @return string Widget title.
     */
    public function get_title() {
        return __( \'oEmbed\', \'plugin-name\' );
    }

    /**
     * Get widget icon.
     *
     * Retrieve oEmbed widget icon.
     *
     * @since 1.0.0
     * @access public
     *
     * @return string Widget icon.
     */
    public function get_icon() {
        return \'fa fa-code\';
    }

    /**
     * Get widget categories.
     *
     * Retrieve the list of categories the oEmbed widget belongs to.
     *
     * @since 1.0.0
     * @access public
     *
     * @return array Widget categories.
     */
    public function get_categories() {
        return [ \'general\' ];
    }

    /**
     * Register oEmbed widget controls.
     *
     * Adds different input fields to allow the user to change and customize the widget settings.
     *
     * @since 1.0.0
     * @access protected
     */
    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();

    }

    /**
     * Render oEmbed widget output on the frontend.
     *
     * Written in PHP and used to generate the final HTML.
     *
     * @since 1.0.0
     * @access protected
     */
    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>\';

    }

}

2 个回复
最合适的回答,由SO网友:Frank 整理而成

我也有同样的问题。获取$此->包含();退出init方法,并将其放入register\\u widgets方法:

public function init() {

   ...

   // Include plugin files
   // $this->includes(); // <-- remove this

}

public function register_widgets() {

    $this->includes(); // <- put it here
    \\Elementor\\Plugin::instance()->widgets_manager->register_widget_type( new \\Elementor_oEmbed_Widget() );

}

SO网友:Thrinadh Kumpatla

转到/var/www/wordpress/wp-content/themes/ReservoirLabs_v2

和打开functions.php 文件

和评论require( get_template_directory()

结束

相关推荐