Edit File by line
/home/zeestwma/richards.../wp-conte.../plugins/elemento.../includes/base
File: element-base.php
<?php
[0] Fix | Delete
namespace Elementor;
[1] Fix | Delete
[2] Fix | Delete
use Elementor\Core\Breakpoints\Manager as Breakpoints_Manager;
[3] Fix | Delete
[4] Fix | Delete
if ( ! defined( 'ABSPATH' ) ) {
[5] Fix | Delete
exit; // Exit if accessed directly.
[6] Fix | Delete
}
[7] Fix | Delete
[8] Fix | Delete
/**
[9] Fix | Delete
* Elementor element base.
[10] Fix | Delete
*
[11] Fix | Delete
* An abstract class to register new Elementor elements. It extended the
[12] Fix | Delete
* `Controls_Stack` class to inherit its properties.
[13] Fix | Delete
*
[14] Fix | Delete
* This abstract class must be extended in order to register new elements.
[15] Fix | Delete
*
[16] Fix | Delete
* @since 1.0.0
[17] Fix | Delete
* @abstract
[18] Fix | Delete
*/
[19] Fix | Delete
abstract class Element_Base extends Controls_Stack {
[20] Fix | Delete
[21] Fix | Delete
/**
[22] Fix | Delete
* Child elements.
[23] Fix | Delete
*
[24] Fix | Delete
* Holds all the child elements of the element.
[25] Fix | Delete
*
[26] Fix | Delete
* @access private
[27] Fix | Delete
*
[28] Fix | Delete
* @var Element_Base[]
[29] Fix | Delete
*/
[30] Fix | Delete
private $children;
[31] Fix | Delete
[32] Fix | Delete
/**
[33] Fix | Delete
* Element default arguments.
[34] Fix | Delete
*
[35] Fix | Delete
* Holds all the default arguments of the element. Used to store additional
[36] Fix | Delete
* data. For example WordPress widgets use this to store widget names.
[37] Fix | Delete
*
[38] Fix | Delete
* @access private
[39] Fix | Delete
*
[40] Fix | Delete
* @var array
[41] Fix | Delete
*/
[42] Fix | Delete
private $default_args = [];
[43] Fix | Delete
[44] Fix | Delete
/**
[45] Fix | Delete
* Is type instance.
[46] Fix | Delete
*
[47] Fix | Delete
* Whether the element is an instance of that type or not.
[48] Fix | Delete
*
[49] Fix | Delete
* @access private
[50] Fix | Delete
*
[51] Fix | Delete
* @var bool
[52] Fix | Delete
*/
[53] Fix | Delete
private $is_type_instance = true;
[54] Fix | Delete
[55] Fix | Delete
/**
[56] Fix | Delete
* Depended scripts.
[57] Fix | Delete
*
[58] Fix | Delete
* Holds all the element depended scripts to enqueue.
[59] Fix | Delete
*
[60] Fix | Delete
* @since 1.9.0
[61] Fix | Delete
* @access private
[62] Fix | Delete
*
[63] Fix | Delete
* @var array
[64] Fix | Delete
*/
[65] Fix | Delete
private $depended_scripts = [];
[66] Fix | Delete
[67] Fix | Delete
/**
[68] Fix | Delete
* Depended styles.
[69] Fix | Delete
*
[70] Fix | Delete
* Holds all the element depended styles to enqueue.
[71] Fix | Delete
*
[72] Fix | Delete
* @since 1.9.0
[73] Fix | Delete
* @access private
[74] Fix | Delete
*
[75] Fix | Delete
* @var array
[76] Fix | Delete
*/
[77] Fix | Delete
private $depended_styles = [];
[78] Fix | Delete
[79] Fix | Delete
/**
[80] Fix | Delete
* Add script depends.
[81] Fix | Delete
*
[82] Fix | Delete
* Register new script to enqueue by the handler.
[83] Fix | Delete
*
[84] Fix | Delete
* @since 1.9.0
[85] Fix | Delete
* @access public
[86] Fix | Delete
*
[87] Fix | Delete
* @param string $handler Depend script handler.
[88] Fix | Delete
*/
[89] Fix | Delete
public function add_script_depends( $handler ) {
[90] Fix | Delete
$this->depended_scripts[] = $handler;
[91] Fix | Delete
}
[92] Fix | Delete
[93] Fix | Delete
/**
[94] Fix | Delete
* Add style depends.
[95] Fix | Delete
*
[96] Fix | Delete
* Register new style to enqueue by the handler.
[97] Fix | Delete
*
[98] Fix | Delete
* @since 1.9.0
[99] Fix | Delete
* @access public
[100] Fix | Delete
*
[101] Fix | Delete
* @param string $handler Depend style handler.
[102] Fix | Delete
*/
[103] Fix | Delete
public function add_style_depends( $handler ) {
[104] Fix | Delete
$this->depended_styles[] = $handler;
[105] Fix | Delete
}
[106] Fix | Delete
[107] Fix | Delete
/**
[108] Fix | Delete
* Get script dependencies.
[109] Fix | Delete
*
[110] Fix | Delete
* Retrieve the list of script dependencies the element requires.
[111] Fix | Delete
*
[112] Fix | Delete
* @since 1.3.0
[113] Fix | Delete
* @access public
[114] Fix | Delete
*
[115] Fix | Delete
* @return array Element scripts dependencies.
[116] Fix | Delete
*/
[117] Fix | Delete
public function get_script_depends() {
[118] Fix | Delete
return $this->depended_scripts;
[119] Fix | Delete
}
[120] Fix | Delete
[121] Fix | Delete
public function get_global_scripts() {
[122] Fix | Delete
return [ 'elementor-frontend' ];
[123] Fix | Delete
}
[124] Fix | Delete
[125] Fix | Delete
/**
[126] Fix | Delete
* Enqueue scripts.
[127] Fix | Delete
*
[128] Fix | Delete
* Registers all the scripts defined as element dependencies and enqueues
[129] Fix | Delete
* them. Use `get_script_depends()` method to add custom script dependencies.
[130] Fix | Delete
*
[131] Fix | Delete
* @since 1.3.0
[132] Fix | Delete
* @access public
[133] Fix | Delete
*/
[134] Fix | Delete
final public function enqueue_scripts() {
[135] Fix | Delete
$deprecated_scripts = [
[136] Fix | Delete
// Insert here when you have a deprecated script.
[137] Fix | Delete
];
[138] Fix | Delete
[139] Fix | Delete
foreach ( $this->get_script_depends() as $script ) {
[140] Fix | Delete
if ( isset( $deprecated_scripts[ $script ] ) ) {
[141] Fix | Delete
Utils::handle_deprecation( $script, $deprecated_scripts[ $script ]['version'], $deprecated_scripts[ $script ]['replacement'] );
[142] Fix | Delete
}
[143] Fix | Delete
[144] Fix | Delete
wp_enqueue_script( $script );
[145] Fix | Delete
}
[146] Fix | Delete
[147] Fix | Delete
foreach ( $this->get_global_scripts() as $script ) {
[148] Fix | Delete
wp_enqueue_script( $script );
[149] Fix | Delete
}
[150] Fix | Delete
}
[151] Fix | Delete
[152] Fix | Delete
/**
[153] Fix | Delete
* Get style dependencies.
[154] Fix | Delete
*
[155] Fix | Delete
* Retrieve the list of style dependencies the element requires.
[156] Fix | Delete
*
[157] Fix | Delete
* @since 1.9.0
[158] Fix | Delete
* @access public
[159] Fix | Delete
*
[160] Fix | Delete
* @return array Element styles dependencies.
[161] Fix | Delete
*/
[162] Fix | Delete
public function get_style_depends() {
[163] Fix | Delete
return $this->depended_styles;
[164] Fix | Delete
}
[165] Fix | Delete
[166] Fix | Delete
/**
[167] Fix | Delete
* Enqueue styles.
[168] Fix | Delete
*
[169] Fix | Delete
* Registers all the styles defined as element dependencies and enqueues
[170] Fix | Delete
* them. Use `get_style_depends()` method to add custom style dependencies.
[171] Fix | Delete
*
[172] Fix | Delete
* @since 1.9.0
[173] Fix | Delete
* @access public
[174] Fix | Delete
*/
[175] Fix | Delete
final public function enqueue_styles() {
[176] Fix | Delete
foreach ( $this->get_style_depends() as $style ) {
[177] Fix | Delete
wp_enqueue_style( $style );
[178] Fix | Delete
}
[179] Fix | Delete
}
[180] Fix | Delete
[181] Fix | Delete
/**
[182] Fix | Delete
* @since 1.0.0
[183] Fix | Delete
* @deprecated 2.6.0
[184] Fix | Delete
* @access public
[185] Fix | Delete
* @static
[186] Fix | Delete
*/
[187] Fix | Delete
final public static function add_edit_tool() {}
[188] Fix | Delete
[189] Fix | Delete
/**
[190] Fix | Delete
* @since 2.2.0
[191] Fix | Delete
* @deprecated 2.6.0
[192] Fix | Delete
* @access public
[193] Fix | Delete
* @static
[194] Fix | Delete
*/
[195] Fix | Delete
final public static function is_edit_buttons_enabled() {
[196] Fix | Delete
return get_option( 'elementor_edit_buttons' );
[197] Fix | Delete
}
[198] Fix | Delete
[199] Fix | Delete
/**
[200] Fix | Delete
* Get default child type.
[201] Fix | Delete
*
[202] Fix | Delete
* Retrieve the default child type based on element data.
[203] Fix | Delete
*
[204] Fix | Delete
* Note that not all elements support children.
[205] Fix | Delete
*
[206] Fix | Delete
* @since 1.0.0
[207] Fix | Delete
* @access protected
[208] Fix | Delete
* @abstract
[209] Fix | Delete
*
[210] Fix | Delete
* @param array $element_data Element data.
[211] Fix | Delete
*
[212] Fix | Delete
* @return Element_Base
[213] Fix | Delete
*/
[214] Fix | Delete
abstract protected function _get_default_child_type( array $element_data );
[215] Fix | Delete
[216] Fix | Delete
/**
[217] Fix | Delete
* Before element rendering.
[218] Fix | Delete
*
[219] Fix | Delete
* Used to add stuff before the element.
[220] Fix | Delete
*
[221] Fix | Delete
* @since 1.0.0
[222] Fix | Delete
* @access public
[223] Fix | Delete
*/
[224] Fix | Delete
public function before_render() {}
[225] Fix | Delete
[226] Fix | Delete
/**
[227] Fix | Delete
* After element rendering.
[228] Fix | Delete
*
[229] Fix | Delete
* Used to add stuff after the element.
[230] Fix | Delete
*
[231] Fix | Delete
* @since 1.0.0
[232] Fix | Delete
* @access public
[233] Fix | Delete
*/
[234] Fix | Delete
public function after_render() {}
[235] Fix | Delete
[236] Fix | Delete
/**
[237] Fix | Delete
* Get element title.
[238] Fix | Delete
*
[239] Fix | Delete
* Retrieve the element title.
[240] Fix | Delete
*
[241] Fix | Delete
* @since 1.0.0
[242] Fix | Delete
* @access public
[243] Fix | Delete
*
[244] Fix | Delete
* @return string Element title.
[245] Fix | Delete
*/
[246] Fix | Delete
public function get_title() {
[247] Fix | Delete
return '';
[248] Fix | Delete
}
[249] Fix | Delete
[250] Fix | Delete
/**
[251] Fix | Delete
* Get element icon.
[252] Fix | Delete
*
[253] Fix | Delete
* Retrieve the element icon.
[254] Fix | Delete
*
[255] Fix | Delete
* @since 1.0.0
[256] Fix | Delete
* @access public
[257] Fix | Delete
*
[258] Fix | Delete
* @return string Element icon.
[259] Fix | Delete
*/
[260] Fix | Delete
public function get_icon() {
[261] Fix | Delete
return 'eicon-columns';
[262] Fix | Delete
}
[263] Fix | Delete
[264] Fix | Delete
public function get_help_url() {
[265] Fix | Delete
return 'https://go.elementor.com/widget-' . $this->get_name();
[266] Fix | Delete
}
[267] Fix | Delete
[268] Fix | Delete
public function get_custom_help_url() {
[269] Fix | Delete
return '';
[270] Fix | Delete
}
[271] Fix | Delete
[272] Fix | Delete
/**
[273] Fix | Delete
* Whether the reload preview is required.
[274] Fix | Delete
*
[275] Fix | Delete
* Used to determine whether the reload preview is required or not.
[276] Fix | Delete
*
[277] Fix | Delete
* @since 1.0.0
[278] Fix | Delete
* @access public
[279] Fix | Delete
*
[280] Fix | Delete
* @return bool Whether the reload preview is required.
[281] Fix | Delete
*/
[282] Fix | Delete
public function is_reload_preview_required() {
[283] Fix | Delete
return false;
[284] Fix | Delete
}
[285] Fix | Delete
[286] Fix | Delete
/**
[287] Fix | Delete
* @since 2.3.1
[288] Fix | Delete
* @access protected
[289] Fix | Delete
*/
[290] Fix | Delete
protected function should_print_empty() {
[291] Fix | Delete
return true;
[292] Fix | Delete
}
[293] Fix | Delete
[294] Fix | Delete
/**
[295] Fix | Delete
* Whether the element returns dynamic content.
[296] Fix | Delete
*
[297] Fix | Delete
* Set to determine whether to cache the element output or not.
[298] Fix | Delete
*
[299] Fix | Delete
* @since 3.22.0
[300] Fix | Delete
* @access protected
[301] Fix | Delete
*
[302] Fix | Delete
* @return bool Whether to cache the element output.
[303] Fix | Delete
*/
[304] Fix | Delete
protected function is_dynamic_content(): bool {
[305] Fix | Delete
return true;
[306] Fix | Delete
}
[307] Fix | Delete
[308] Fix | Delete
/**
[309] Fix | Delete
* Get child elements.
[310] Fix | Delete
*
[311] Fix | Delete
* Retrieve all the child elements of this element.
[312] Fix | Delete
*
[313] Fix | Delete
* @since 1.0.0
[314] Fix | Delete
* @access public
[315] Fix | Delete
*
[316] Fix | Delete
* @return Element_Base[] Child elements.
[317] Fix | Delete
*/
[318] Fix | Delete
public function get_children() {
[319] Fix | Delete
if ( null === $this->children ) {
[320] Fix | Delete
$this->init_children();
[321] Fix | Delete
}
[322] Fix | Delete
[323] Fix | Delete
return $this->children;
[324] Fix | Delete
}
[325] Fix | Delete
[326] Fix | Delete
/**
[327] Fix | Delete
* Get default arguments.
[328] Fix | Delete
*
[329] Fix | Delete
* Retrieve the element default arguments. Used to return all the default
[330] Fix | Delete
* arguments or a specific default argument, if one is set.
[331] Fix | Delete
*
[332] Fix | Delete
* @since 1.0.0
[333] Fix | Delete
* @access public
[334] Fix | Delete
*
[335] Fix | Delete
* @param array $item Optional. Default is null.
[336] Fix | Delete
*
[337] Fix | Delete
* @return array Default argument(s).
[338] Fix | Delete
*/
[339] Fix | Delete
public function get_default_args( $item = null ) {
[340] Fix | Delete
return self::get_items( $this->default_args, $item );
[341] Fix | Delete
}
[342] Fix | Delete
[343] Fix | Delete
/**
[344] Fix | Delete
* Get panel presets.
[345] Fix | Delete
*
[346] Fix | Delete
* Used for displaying the widget in the panel multiple times, but with different defaults values,
[347] Fix | Delete
* icon, title etc.
[348] Fix | Delete
*
[349] Fix | Delete
* @since 3.16.0
[350] Fix | Delete
* @access public
[351] Fix | Delete
*
[352] Fix | Delete
* @return array
[353] Fix | Delete
*/
[354] Fix | Delete
public function get_panel_presets() {
[355] Fix | Delete
return [];
[356] Fix | Delete
}
[357] Fix | Delete
[358] Fix | Delete
/**
[359] Fix | Delete
* Add new child element.
[360] Fix | Delete
*
[361] Fix | Delete
* Register new child element to allow hierarchy.
[362] Fix | Delete
*
[363] Fix | Delete
* @since 1.0.0
[364] Fix | Delete
* @access public
[365] Fix | Delete
* @param array $child_data Child element data.
[366] Fix | Delete
* @param array $child_args Child element arguments.
[367] Fix | Delete
*
[368] Fix | Delete
* @return Element_Base|false Child element instance, or false if failed.
[369] Fix | Delete
*/
[370] Fix | Delete
public function add_child( array $child_data, array $child_args = [] ) {
[371] Fix | Delete
if ( null === $this->children ) {
[372] Fix | Delete
$this->init_children();
[373] Fix | Delete
}
[374] Fix | Delete
[375] Fix | Delete
$child_type = $this->get_child_type( $child_data );
[376] Fix | Delete
[377] Fix | Delete
if ( ! $child_type ) {
[378] Fix | Delete
return false;
[379] Fix | Delete
}
[380] Fix | Delete
[381] Fix | Delete
$child = Plugin::$instance->elements_manager->create_element_instance( $child_data, $child_args, $child_type );
[382] Fix | Delete
[383] Fix | Delete
if ( $child ) {
[384] Fix | Delete
$this->children[] = $child;
[385] Fix | Delete
}
[386] Fix | Delete
[387] Fix | Delete
return $child;
[388] Fix | Delete
}
[389] Fix | Delete
[390] Fix | Delete
/**
[391] Fix | Delete
* Add link render attributes.
[392] Fix | Delete
*
[393] Fix | Delete
* Used to add link tag attributes to a specific HTML element.
[394] Fix | Delete
*
[395] Fix | Delete
* The HTML link tag is represented by the element parameter. The `url_control` parameter
[396] Fix | Delete
* needs to be an array of link settings in the same format they are set by Elementor's URL control.
[397] Fix | Delete
*
[398] Fix | Delete
* Example usage:
[399] Fix | Delete
*
[400] Fix | Delete
* `$this->add_link_attributes( 'button', $settings['link'] );`
[401] Fix | Delete
*
[402] Fix | Delete
* @since 2.8.0
[403] Fix | Delete
* @access public
[404] Fix | Delete
*
[405] Fix | Delete
* @param array|string $element The HTML element.
[406] Fix | Delete
* @param array $url_control Array of link settings.
[407] Fix | Delete
* @param bool $overwrite Optional. Whether to overwrite existing
[408] Fix | Delete
* attribute. Default is false, not to overwrite.
[409] Fix | Delete
*
[410] Fix | Delete
* @return Element_Base Current instance of the element.
[411] Fix | Delete
*/
[412] Fix | Delete
public function add_link_attributes( $element, array $url_control, $overwrite = false ) {
[413] Fix | Delete
$attributes = [];
[414] Fix | Delete
[415] Fix | Delete
if ( ! empty( $url_control['url'] ) ) {
[416] Fix | Delete
$allowed_protocols = array_merge( wp_allowed_protocols(), [ 'skype', 'viber' ] );
[417] Fix | Delete
[418] Fix | Delete
$attributes['href'] = esc_url( $url_control['url'], $allowed_protocols );
[419] Fix | Delete
}
[420] Fix | Delete
[421] Fix | Delete
if ( ! empty( $url_control['is_external'] ) ) {
[422] Fix | Delete
$attributes['target'] = '_blank';
[423] Fix | Delete
}
[424] Fix | Delete
[425] Fix | Delete
if ( ! empty( $url_control['nofollow'] ) ) {
[426] Fix | Delete
$attributes['rel'] = 'nofollow';
[427] Fix | Delete
}
[428] Fix | Delete
[429] Fix | Delete
if ( ! empty( $url_control['custom_attributes'] ) ) {
[430] Fix | Delete
// Custom URL attributes should come as a string of comma-delimited key|value pairs.
[431] Fix | Delete
$attributes = array_merge( $attributes, Utils::parse_custom_attributes( $url_control['custom_attributes'] ) );
[432] Fix | Delete
}
[433] Fix | Delete
[434] Fix | Delete
if ( $attributes ) {
[435] Fix | Delete
$this->add_render_attribute( $element, $attributes, null, $overwrite );
[436] Fix | Delete
}
[437] Fix | Delete
[438] Fix | Delete
return $this;
[439] Fix | Delete
}
[440] Fix | Delete
[441] Fix | Delete
/**
[442] Fix | Delete
* Print element.
[443] Fix | Delete
*
[444] Fix | Delete
* Used to generate the element final HTML on the frontend and the editor.
[445] Fix | Delete
*
[446] Fix | Delete
* @since 1.0.0
[447] Fix | Delete
* @access public
[448] Fix | Delete
*/
[449] Fix | Delete
public function print_element() {
[450] Fix | Delete
$element_type = $this->get_type();
[451] Fix | Delete
[452] Fix | Delete
if ( $this->should_render_shortcode() ) {
[453] Fix | Delete
$unique_id = apply_filters( 'elementor/element_cache/unique_id', '' );
[454] Fix | Delete
[455] Fix | Delete
echo '[elementor-element k="' . esc_attr( $unique_id ) . '" data="' . esc_attr( base64_encode( wp_json_encode( $this->get_raw_data() ) ) ) . '"]';
[456] Fix | Delete
return;
[457] Fix | Delete
}
[458] Fix | Delete
[459] Fix | Delete
/**
[460] Fix | Delete
* Before frontend element render.
[461] Fix | Delete
*
[462] Fix | Delete
* Fires before Elementor element is rendered in the frontend.
[463] Fix | Delete
*
[464] Fix | Delete
* @since 2.2.0
[465] Fix | Delete
*
[466] Fix | Delete
* @param Element_Base $this The element.
[467] Fix | Delete
*/
[468] Fix | Delete
do_action( 'elementor/frontend/before_render', $this );
[469] Fix | Delete
[470] Fix | Delete
/**
[471] Fix | Delete
* Before frontend element render.
[472] Fix | Delete
*
[473] Fix | Delete
* Fires before Elementor element is rendered in the frontend.
[474] Fix | Delete
*
[475] Fix | Delete
* The dynamic portion of the hook name, `$element_type`, refers to the element type.
[476] Fix | Delete
*
[477] Fix | Delete
* @since 1.0.0
[478] Fix | Delete
*
[479] Fix | Delete
* @param Element_Base $this The element.
[480] Fix | Delete
*/
[481] Fix | Delete
do_action( "elementor/frontend/{$element_type}/before_render", $this );
[482] Fix | Delete
[483] Fix | Delete
ob_start();
[484] Fix | Delete
[485] Fix | Delete
if ( $this->has_own_method( '_print_content', self::class ) ) {
[486] Fix | Delete
Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( '_print_content', '3.1.0', __CLASS__ . '::print_content()' );
[487] Fix | Delete
[488] Fix | Delete
$this->_print_content();
[489] Fix | Delete
} else {
[490] Fix | Delete
$this->print_content();
[491] Fix | Delete
}
[492] Fix | Delete
[493] Fix | Delete
$content = ob_get_clean();
[494] Fix | Delete
[495] Fix | Delete
$should_render = ( ! empty( $content ) || $this->should_print_empty() );
[496] Fix | Delete
[497] Fix | Delete
/**
[498] Fix | Delete
* Should the element be rendered for frontend
[499] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function