Registering elements in PHP
Plugin.php file should have the following structure to load the php template files of the newly added elements
namespace MyPlugin;
use MyPlugin\Editor;
use MyPlugin\Frontend;
// Prevent direct access
if ( ! defined( 'ABSPATH' ) ) {
return;
}
class Plugin {
public static $instance = null;
private $version = null;
private $project_root_path = null;
private $project_root_url = null;
public $plugin_data = [];
public $plugin_file = null;
public function __construct( $path ) {
$this->plugin_file = $path;
$this->project_root_path = trailingslashit( dirname( $path ) );
$this->project_root_url = plugin_dir_url( $path );
$this->plugin_data = get_plugin_data( $path );
$this->version = $this->plugin_data['Version'];
self::$instance = $this;
}
public function register_elements( $elements_manager ) {
$default_elements = [
'MyElement',
];
foreach ( $default_elements as $element_name ) {
$file_path = Utils::get_file_path( 'includes/Elements/' . trailingslashit( $element_name ) . $element_name . '.php' );
if ( is_file( $file_path ) ) {
include $file_path;
// Normalize class name
$class_name = str_replace( '-', '_', $element_name );
$class_name = __NAMESPACE__ . '\\Elements\\' . $class_name;
$elements_manager->register_element( new $class_name() );
}
}
}
public $elements_manager = null;
public function add_elements_categories( $categories ) {
$my_plugin_category = [
[
'id' => 'category_id',
'name' => __( 'My Category', 'text-domain' ),
'priority' => 10,
],
]
return array_merge( $categories, $my_plugin_category );
}
public function init() {
add_filter( 'zionbuilder/elements/categories', [ $this, 'add_elements_categories' ] );
add_action( 'zionbuilder/elements_manager/register_elements', [ $this, 'register_elements' ] );
add_action( 'zionbuilder/editor/before_scripts', [ $this, 'enqueue_scripts' ] );
$this->editor = new Editor();
$this->frontend = new Frontend();
}
public function __clone() {
// Cloning instances of the class is forbidden.
_doing_it_wrong( __FUNCTION__, esc_html__( 'Something went wrong.', 'text-domain' ), '2.0.0' );
}
public function __wakeup() {
_doing_it_wrong( __FUNCTION__, esc_html__( 'Something went wrong.', 'text-domain' ), '2.0.0' );
}
public static function instance() {
return self::$instance;
}
public function enqueue_scripts() {
wp_localize_script(
'my-plugin-companion-elements-script',
'MyPluginRestConfig',
[
'nonce' => wp_create_nonce( 'wp_rest' ),
'rest_root' => esc_url_raw( rest_url() ),
]
);
}
public function get_root_path() {
return $this->project_root_path;
}
public function get_plugin_file() {
return $this->plugin_file;
}
public function get_root_url() {
return $this->project_root_url;
}
public function get_version() {
return $this->version;
}
public function get_plugin_data( $type ) {
if ( isset( $this->plugin_data[$type] ) ) {
return $this->plugin_data[$type];
}
return null;
}
}
Last updated
Was this helpful?