ProShell v2.0
Dashboard
Server Info
Server: 158.106.128.192
PHP: 8.2.33
home
planet5
public_html
bansibaba.com
wp-includes
2026-09-15 13:09:52
Editing: module.php
Cancel
Save Changes
<?php namespace ElementorPro\Modules\GlobalWidget; use Elementor\Core\Documents_Manager; use Elementor\Element_Base; use Elementor\TemplateLibrary\Source_Local; use ElementorPro\Base\Module_Base; use ElementorPro\Plugin; if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly } class Module extends Module_Base { const TEMPLATE_TYPE = 'widget'; const WIDGET_TYPE_META_KEY = '_elementor_template_widget_type'; const INCLUDED_POSTS_LIST_META_KEY = '_elementor_global_widget_included_posts'; public function __construct() { parent::__construct(); $this->add_hooks(); } public function get_widgets() { return [ 'Global_Widget', ]; } public function get_name() { return 'global-widget'; } public function add_templates_localize_data( $settings ) { $elementor = Plugin::elementor(); $templates_manager = $elementor->templates_manager; $widgets_types = $elementor->widgets_manager->get_widget_types(); $widget_templates = array_filter( $templates_manager->get_source( 'local' )->get_items( [ 'type' => self::TEMPLATE_TYPE ] ), function( $template ) use ( $widgets_types ) { if ( empty( $template['widgetType'] ) || empty( $widgets_types[ $template['widgetType'] ] ) ) { return false; } // Open the stack in order to include the widget controls in initial editor config $widgets_types[ $template['widgetType'] ]->get_stack( false ); return true; } ); $widget_templates_content = []; foreach ( $widget_templates as $widget_template ) { $widget_templates_content[ $widget_template['template_id'] ] = [ 'elType' => 'widget', 'title' => $widget_template['title'], 'widgetType' => $widget_template['widgetType'], ]; } $settings = array_replace_recursive( $settings, [ 'widget_templates' => $widget_templates_content, 'i18n' => [ 'unlink' => __( 'Unlink', 'elementor-pro' ), 'cancel' => __( 'Cancel', 'elementor-pro' ), 'unlink_widget' => __( 'Unlink Widget', 'elementor-pro' ), 'global' => __( 'Global', 'elementor-pro' ), 'dialog_confirm_unlink' => __( 'This will make the widget stop being global. It\'ll be reverted into being just a regular widget.', 'elementor-pro' ), 'global_widget_save_title' => __( 'Save your widget as a global widget', 'elementor-pro' ), 'global_widget_save_description' => __( 'You\'ll be able to add this global widget to multiple areas on your site, and edit it from one single place.', 'elementor-pro' ), 'linked_to_global' => __( 'Linked to Global', 'elementor-pro' ), ], ] ); return $settings; } public function set_template_widget_type_meta( $post_id, $template_data ) { if ( self::TEMPLATE_TYPE === $template_data['type'] ) { update_post_meta( $post_id, self::WIDGET_TYPE_META_KEY, $template_data['content'][0]['widgetType'] ); } } public function on_template_update( $template_id, $template_data ) { if ( self::TEMPLATE_TYPE !== $template_data['type'] ) { return; } $this->delete_included_posts_css( $template_id ); } public function filter_template_data( $data ) { if ( self::TEMPLATE_TYPE === $data['type'] ) { $data['widgetType'] = get_post_meta( $data['template_id'], self::WIDGET_TYPE_META_KEY, true ); } return $data; } public function get_element_child_type( Element_Base $default_child_type, array $element_data ) { if ( isset( $element_data['templateID'] ) ) { $template_post = get_post( $element_data['templateID'] ); if ( ! $template_post || 'trash' === $template_post->post_status ) { return false; } } return $default_child_type; } public function is_post_type_support_elementor( $is_supported, $post_id, $post_type ) { if ( ! $is_supported || Source_Local::CPT !== $post_type ) { return $is_supported; } $is_widget_template = $this->is_widget_template( $post_id ); // FIX ME: Change `get_current_screen()` condition to better way. if ( $is_widget_template && function_exists( 'get_current_screen' ) ) { $screen = get_current_screen(); if ( ! empty( $screen->id ) && in_array( $screen->id, [ 'elementor_library', 'edit-elementor_library' ] ) ) { $is_supported = false; } } return $is_supported; } public function is_template_supports_export( $default_value, $template_id ) { return $default_value && ! $this->is_widget_template( $template_id ); } /** * TODO: Remove. On Elementor 2.3.3 it's handled by the Documents Manager. * * Remove user edit capabilities. * * Filters the user capabilities to disable editing in admin. * * @param array $allcaps An array of all the user's capabilities. * @param array $caps Actual capabilities for meta capability. * @param array $args Optional parameters passed to has_cap(), typically object ID. * * @return array */ public function remove_user_edit_cap( $allcaps, $caps, $args ) { $capability = $args[0]; if ( empty( $args[2] ) ) { return $allcaps; } global $pagenow; if ( ! in_array( $pagenow, [ 'post.php', 'edit.php' ], true ) ) { return $allcaps; } $post_id = $args[2]; if ( 'edit_post' !== $capability ) { return $allcaps; } $post = get_post( $post_id ); if ( ! $post ) { return $allcaps; } if ( Source_Local::CPT !== $post->post_type ) { return $allcaps; } if ( ! $this->is_widget_template( $post_id ) ) { return $allcaps; } $allcaps[ $caps[0] ] = false; return $allcaps; } public function is_widget_template( $template_id ) { $template_type = Source_Local::get_template_type( $template_id ); return self::TEMPLATE_TYPE === $template_type; } public function set_global_widget_included_posts_list( $post_id, $editor_data ) { $global_widget_ids = []; Plugin::elementor()->db->iterate_data( $editor_data, function( $element_data ) use ( &$global_widget_ids ) { if ( isset( $element_data['templateID'] ) ) { $global_widget_ids[] = $element_data['templateID']; } } ); foreach ( $global_widget_ids as $widget_id ) { $included_posts = get_post_meta( $widget_id, self::INCLUDED_POSTS_LIST_META_KEY, true ); if ( ! is_array( $included_posts ) ) { $included_posts = []; } $included_posts[ $post_id ] = true; update_post_meta( $widget_id, self::INCLUDED_POSTS_LIST_META_KEY, $included_posts ); } } private function delete_included_posts_css( $template_id ) { $including_post_ids = (array) get_post_meta( $template_id, self::INCLUDED_POSTS_LIST_META_KEY, true ); if ( empty( $including_post_ids ) ) { return; } foreach ( array_keys( $including_post_ids ) as $post_id ) { delete_post_meta( $post_id, '_elementor_css' ); } } /** * @param Documents_Manager $documents_manager */ public function register_documents( $documents_manager ) { $documents_manager->register_document_type( self::TEMPLATE_TYPE, Documents\Widget::get_class_full_name() ); } public function on_elementor_editor_init() { Plugin::elementor()->common->add_template( __DIR__ . '/views/panel-template.php' ); } private function add_hooks() { add_action( 'elementor/documents/register', [ $this, 'register_documents' ] ); add_action( 'elementor/template-library/after_save_template', [ $this, 'set_template_widget_type_meta' ], 10, 2 ); add_action( 'elementor/template-library/after_update_template', [ $this, 'on_template_update' ], 10, 2 ); add_action( 'elementor/editor/init', [ $this, 'on_elementor_editor_init' ] ); add_action( 'elementor/editor/after_save', [ $this, 'set_global_widget_included_posts_list' ], 10, 2 ); add_filter( 'elementor_pro/editor/localize_settings', [ $this, 'add_templates_localize_data' ] ); add_filter( 'elementor/template-library/get_template', [ $this, 'filter_template_data' ] ); add_filter( 'elementor/element/get_child_type', [ $this, 'get_element_child_type' ], 10, 2 ); add_filter( 'elementor/utils/is_post_support', [ $this, 'is_post_type_support_elementor' ], 10, 3 ); add_filter( 'user_has_cap', [ $this, 'remove_user_edit_cap' ], 10, 3 ); add_filter( 'elementor/template_library/is_template_supports_export', [ $this, 'is_template_supports_export' ], 10, 2 ); } }
Upload Files
Cancel
Upload
Create New
Cancel
Create
Change Permissions
Cancel
Save
Change Date
Cancel
Save
Rename Item
Cancel
Save
Confirm Delete
Are you sure you want to delete the selected items?
Cancel
Delete