inspector.php (3383B)
1 <?php 2 namespace Elementor\Core\Debug; 3 4 use Elementor\Settings; 5 use Elementor\Tools; 6 7 if ( ! defined( 'ABSPATH' ) ) { 8 exit; // Exit if accessed directly 9 } 10 11 class Inspector { 12 13 protected $is_enabled = false; 14 15 protected $log = []; 16 17 /** 18 * @since 2.1.2 19 * @access public 20 */ 21 public function __construct() { 22 $is_debug = ( defined( 'WP_DEBUG' ) && WP_DEBUG ); 23 $option = get_option( 'elementor_enable_inspector', null ); 24 25 $this->is_enabled = is_null( $option ) ? $is_debug : 'enable' === $option; 26 27 if ( $this->is_enabled ) { 28 add_action( 'admin_bar_menu', [ $this, 'add_menu_in_admin_bar' ], 201 ); 29 } 30 31 add_action( 'elementor/admin/after_create_settings/' . Tools::PAGE_ID, [ $this, 'register_admin_tools_fields' ], 50 ); 32 } 33 34 /** 35 * @since 2.1.3 36 * @access public 37 */ 38 public function is_enabled() { 39 return $this->is_enabled; 40 } 41 42 /** 43 * @since 2.1.3 44 * @access public 45 */ 46 public function register_admin_tools_fields( Tools $tools ) { 47 $tools->add_fields( Settings::TAB_GENERAL, 'tools', [ 48 'enable_inspector' => [ 49 'label' => esc_html__( 'Debug Bar', 'elementor' ), 50 'field_args' => [ 51 'type' => 'select', 52 'std' => $this->is_enabled ? 'enable' : '', 53 'options' => [ 54 '' => esc_html__( 'Disable', 'elementor' ), 55 'enable' => esc_html__( 'Enable', 'elementor' ), 56 ], 57 'desc' => esc_html__( 'Debug Bar adds an admin bar menu that lists all the templates that are used on a page that is being displayed.', 'elementor' ), 58 ], 59 ], 60 ] ); 61 } 62 63 /** 64 * @since 2.1.2 65 * @access public 66 */ 67 public function parse_template_path( $template ) { 68 // `untrailingslashit` for windows path style. 69 if ( 0 === strpos( $template, untrailingslashit( ELEMENTOR_PATH ) ) ) { 70 return 'Elementor - ' . basename( $template ); 71 } 72 73 if ( 0 === strpos( $template, get_stylesheet_directory() ) ) { 74 return wp_get_theme()->get( 'Name' ) . ' - ' . basename( $template ); 75 } 76 77 $plugins_dir = dirname( ELEMENTOR_PATH ); 78 if ( 0 === strpos( $template, $plugins_dir ) ) { 79 return ltrim( str_replace( $plugins_dir, '', $template ), '/\\' ); 80 } 81 82 return str_replace( WP_CONTENT_DIR, '', $template ); 83 } 84 85 /** 86 * @since 2.1.2 87 * @access public 88 */ 89 public function add_log( $module, $title, $url = '' ) { 90 if ( ! $this->is_enabled ) { 91 return; 92 } 93 94 if ( ! isset( $this->log[ $module ] ) ) { 95 $this->log[ $module ] = []; 96 } 97 98 $this->log[ $module ][] = [ 99 'title' => $title, 100 'url' => $url, 101 ]; 102 } 103 104 /** 105 * @since 2.1.2 106 * @access public 107 */ 108 public function add_menu_in_admin_bar( \WP_Admin_Bar $wp_admin_bar ) { 109 if ( empty( $this->log ) ) { 110 return; 111 } 112 113 $wp_admin_bar->add_node( [ 114 'id' => 'elementor_inspector', 115 'title' => esc_html__( 'Elementor Debugger', 'elementor' ), 116 ] ); 117 118 foreach ( $this->log as $module => $log ) { 119 $module_id = sanitize_key( $module ); 120 121 $wp_admin_bar->add_menu( [ 122 'id' => 'elementor_inspector_' . $module_id, 123 'parent' => 'elementor_inspector', 124 'title' => $module, 125 ] ); 126 127 foreach ( $log as $index => $row ) { 128 $url = $row['url']; 129 130 unset( $row['url'] ); 131 132 $wp_admin_bar->add_menu( [ 133 'id' => 'elementor_inspector_log_' . $module_id . '_' . $index, 134 'parent' => 'elementor_inspector_' . $module_id, 135 'href' => $url, 136 'title' => implode( ' > ', $row ), 137 'meta' => [ 138 'target' => '_blank', 139 ], 140 ] ); 141 } 142 } 143 } 144 }