Edit File by line
/home/zeestwma/richards.../wp-conte.../plugins/elemento.../includes/base
File: controls-stack.php
* Unregister an existing control and remove it from the stack.
[500] Fix | Delete
*
[501] Fix | Delete
* @since 1.4.0
[502] Fix | Delete
* @access public
[503] Fix | Delete
*
[504] Fix | Delete
* @param string $control_id Control ID.
[505] Fix | Delete
*
[506] Fix | Delete
* @return bool|\WP_Error
[507] Fix | Delete
*/
[508] Fix | Delete
public function remove_control( $control_id ) {
[509] Fix | Delete
return Plugin::$instance->controls_manager->remove_control_from_stack( $this->get_unique_name(), $control_id );
[510] Fix | Delete
}
[511] Fix | Delete
[512] Fix | Delete
/**
[513] Fix | Delete
* Update control in stack.
[514] Fix | Delete
*
[515] Fix | Delete
* Change the value of an existing control in the stack. When you add new
[516] Fix | Delete
* control you set the `$args` parameter, this method allows you to update
[517] Fix | Delete
* the arguments by passing new data.
[518] Fix | Delete
*
[519] Fix | Delete
* @since 1.4.0
[520] Fix | Delete
* @since 1.8.1 New `$options` parameter added.
[521] Fix | Delete
*
[522] Fix | Delete
* @access public
[523] Fix | Delete
*
[524] Fix | Delete
* @param string $control_id Control ID.
[525] Fix | Delete
* @param array $args Control arguments. Only the new fields you want
[526] Fix | Delete
* to update.
[527] Fix | Delete
* @param array $options Optional. Some additional options. Default is
[528] Fix | Delete
* an empty array.
[529] Fix | Delete
*
[530] Fix | Delete
* @return bool
[531] Fix | Delete
*/
[532] Fix | Delete
public function update_control( $control_id, array $args, array $options = [] ) {
[533] Fix | Delete
$is_updated = Plugin::$instance->controls_manager->update_control_in_stack( $this, $control_id, $args, $options );
[534] Fix | Delete
[535] Fix | Delete
if ( ! $is_updated ) {
[536] Fix | Delete
return false;
[537] Fix | Delete
}
[538] Fix | Delete
[539] Fix | Delete
$control = $this->get_controls( $control_id );
[540] Fix | Delete
[541] Fix | Delete
if ( Controls_Manager::SECTION === $control['type'] ) {
[542] Fix | Delete
$section_args = $this->get_section_args( $control_id );
[543] Fix | Delete
[544] Fix | Delete
$section_controls = $this->get_section_controls( $control_id );
[545] Fix | Delete
[546] Fix | Delete
foreach ( $section_controls as $section_control_id => $section_control ) {
[547] Fix | Delete
$this->update_control( $section_control_id, $section_args, $options );
[548] Fix | Delete
}
[549] Fix | Delete
}
[550] Fix | Delete
[551] Fix | Delete
return true;
[552] Fix | Delete
}
[553] Fix | Delete
[554] Fix | Delete
/**
[555] Fix | Delete
* Get stack.
[556] Fix | Delete
*
[557] Fix | Delete
* Retrieve the stack of controls.
[558] Fix | Delete
*
[559] Fix | Delete
* @since 1.9.2
[560] Fix | Delete
* @access public
[561] Fix | Delete
*
[562] Fix | Delete
* @return array Stack of controls.
[563] Fix | Delete
*/
[564] Fix | Delete
public function get_stack() {
[565] Fix | Delete
$stack = Plugin::$instance->controls_manager->get_element_stack( $this );
[566] Fix | Delete
[567] Fix | Delete
if ( null === $stack ) {
[568] Fix | Delete
$this->init_controls();
[569] Fix | Delete
[570] Fix | Delete
return Plugin::$instance->controls_manager->get_element_stack( $this );
[571] Fix | Delete
}
[572] Fix | Delete
[573] Fix | Delete
return $stack;
[574] Fix | Delete
}
[575] Fix | Delete
[576] Fix | Delete
/**
[577] Fix | Delete
* Get position information.
[578] Fix | Delete
*
[579] Fix | Delete
* Retrieve the position while injecting data, based on the element type.
[580] Fix | Delete
*
[581] Fix | Delete
* @since 1.7.0
[582] Fix | Delete
* @access public
[583] Fix | Delete
*
[584] Fix | Delete
* @param array $position {
[585] Fix | Delete
* The injection position.
[586] Fix | Delete
*
[587] Fix | Delete
* @type string $type Injection type, either `control` or `section`.
[588] Fix | Delete
* Default is `control`.
[589] Fix | Delete
* @type string $at Where to inject. If `$type` is `control` accepts
[590] Fix | Delete
* `before` and `after`. If `$type` is `section`
[591] Fix | Delete
* accepts `start` and `end`. Default values based on
[592] Fix | Delete
* the `type`.
[593] Fix | Delete
* @type string $of Control/Section ID.
[594] Fix | Delete
* @type array $fallback Fallback injection position. When the position is
[595] Fix | Delete
* not found it will try to fetch the fallback
[596] Fix | Delete
* position.
[597] Fix | Delete
* }
[598] Fix | Delete
*
[599] Fix | Delete
* @return bool|array Position info.
[600] Fix | Delete
*/
[601] Fix | Delete
final public function get_position_info( array $position ) {
[602] Fix | Delete
$default_position = [
[603] Fix | Delete
'type' => 'control',
[604] Fix | Delete
'at' => 'after',
[605] Fix | Delete
];
[606] Fix | Delete
[607] Fix | Delete
if ( ! empty( $position['type'] ) && 'section' === $position['type'] ) {
[608] Fix | Delete
$default_position['at'] = 'end';
[609] Fix | Delete
}
[610] Fix | Delete
[611] Fix | Delete
$position = array_merge( $default_position, $position );
[612] Fix | Delete
[613] Fix | Delete
if (
[614] Fix | Delete
( 'control' === $position['type'] && in_array( $position['at'], [ 'start', 'end' ], true ) ) ||
[615] Fix | Delete
( 'section' === $position['type'] && in_array( $position['at'], [ 'before', 'after' ], true ) )
[616] Fix | Delete
) {
[617] Fix | Delete
_doing_it_wrong( sprintf( '%s::%s', get_called_class(), __FUNCTION__ ), 'Invalid position arguments. Use `before` / `after` for control or `start` / `end` for section.', '1.7.0' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
[618] Fix | Delete
[619] Fix | Delete
return false;
[620] Fix | Delete
}
[621] Fix | Delete
[622] Fix | Delete
$target_control_index = $this->get_control_index( $position['of'] );
[623] Fix | Delete
[624] Fix | Delete
if ( false === $target_control_index ) {
[625] Fix | Delete
if ( ! empty( $position['fallback'] ) ) {
[626] Fix | Delete
return $this->get_position_info( $position['fallback'] );
[627] Fix | Delete
}
[628] Fix | Delete
[629] Fix | Delete
return false;
[630] Fix | Delete
}
[631] Fix | Delete
[632] Fix | Delete
$target_section_index = $target_control_index;
[633] Fix | Delete
[634] Fix | Delete
$registered_controls = $this->get_controls();
[635] Fix | Delete
[636] Fix | Delete
$controls_keys = array_keys( $registered_controls );
[637] Fix | Delete
[638] Fix | Delete
while ( Controls_Manager::SECTION !== $registered_controls[ $controls_keys[ $target_section_index ] ]['type'] ) {
[639] Fix | Delete
--$target_section_index;
[640] Fix | Delete
}
[641] Fix | Delete
[642] Fix | Delete
if ( 'section' === $position['type'] ) {
[643] Fix | Delete
++$target_control_index;
[644] Fix | Delete
[645] Fix | Delete
if ( 'end' === $position['at'] ) {
[646] Fix | Delete
while ( Controls_Manager::SECTION !== $registered_controls[ $controls_keys[ $target_control_index ] ]['type'] ) {
[647] Fix | Delete
if ( ++$target_control_index >= count( $registered_controls ) ) {
[648] Fix | Delete
break;
[649] Fix | Delete
}
[650] Fix | Delete
}
[651] Fix | Delete
}
[652] Fix | Delete
}
[653] Fix | Delete
[654] Fix | Delete
$target_control = $registered_controls[ $controls_keys[ $target_control_index ] ];
[655] Fix | Delete
[656] Fix | Delete
if ( 'after' === $position['at'] ) {
[657] Fix | Delete
++$target_control_index;
[658] Fix | Delete
}
[659] Fix | Delete
[660] Fix | Delete
$section_id = $registered_controls[ $controls_keys[ $target_section_index ] ]['name'];
[661] Fix | Delete
[662] Fix | Delete
$position_info = [
[663] Fix | Delete
'index' => $target_control_index,
[664] Fix | Delete
'section' => $this->get_section_args( $section_id ),
[665] Fix | Delete
];
[666] Fix | Delete
[667] Fix | Delete
if ( ! empty( $target_control['tabs_wrapper'] ) ) {
[668] Fix | Delete
$position_info['tab'] = [
[669] Fix | Delete
'tabs_wrapper' => $target_control['tabs_wrapper'],
[670] Fix | Delete
'inner_tab' => $target_control['inner_tab'],
[671] Fix | Delete
];
[672] Fix | Delete
}
[673] Fix | Delete
[674] Fix | Delete
return $position_info;
[675] Fix | Delete
}
[676] Fix | Delete
[677] Fix | Delete
/**
[678] Fix | Delete
* Get control key.
[679] Fix | Delete
*
[680] Fix | Delete
* Retrieve the key of the control based on a given index of the control.
[681] Fix | Delete
*
[682] Fix | Delete
* @since 1.9.2
[683] Fix | Delete
* @access public
[684] Fix | Delete
*
[685] Fix | Delete
* @param string $control_index Control index.
[686] Fix | Delete
*
[687] Fix | Delete
* @return int Control key.
[688] Fix | Delete
*/
[689] Fix | Delete
final public function get_control_key( $control_index ) {
[690] Fix | Delete
$registered_controls = $this->get_controls();
[691] Fix | Delete
[692] Fix | Delete
$controls_keys = array_keys( $registered_controls );
[693] Fix | Delete
[694] Fix | Delete
return $controls_keys[ $control_index ];
[695] Fix | Delete
}
[696] Fix | Delete
[697] Fix | Delete
/**
[698] Fix | Delete
* Get control index.
[699] Fix | Delete
*
[700] Fix | Delete
* Retrieve the index of the control based on a given key of the control.
[701] Fix | Delete
*
[702] Fix | Delete
* @since 1.7.6
[703] Fix | Delete
* @access public
[704] Fix | Delete
*
[705] Fix | Delete
* @param string $control_key Control key.
[706] Fix | Delete
*
[707] Fix | Delete
* @return false|int Control index.
[708] Fix | Delete
*/
[709] Fix | Delete
final public function get_control_index( $control_key ) {
[710] Fix | Delete
$controls = $this->get_controls();
[711] Fix | Delete
[712] Fix | Delete
$controls_keys = array_keys( $controls );
[713] Fix | Delete
[714] Fix | Delete
return array_search( $control_key, $controls_keys );
[715] Fix | Delete
}
[716] Fix | Delete
[717] Fix | Delete
/**
[718] Fix | Delete
* Get section controls.
[719] Fix | Delete
*
[720] Fix | Delete
* Retrieve all controls under a specific section.
[721] Fix | Delete
*
[722] Fix | Delete
* @since 1.7.6
[723] Fix | Delete
* @access public
[724] Fix | Delete
*
[725] Fix | Delete
* @param string $section_id Section ID.
[726] Fix | Delete
*
[727] Fix | Delete
* @return array Section controls
[728] Fix | Delete
*/
[729] Fix | Delete
final public function get_section_controls( $section_id ) {
[730] Fix | Delete
$section_index = $this->get_control_index( $section_id );
[731] Fix | Delete
[732] Fix | Delete
$section_controls = [];
[733] Fix | Delete
[734] Fix | Delete
$registered_controls = $this->get_controls();
[735] Fix | Delete
[736] Fix | Delete
$controls_keys = array_keys( $registered_controls );
[737] Fix | Delete
[738] Fix | Delete
while ( true ) {
[739] Fix | Delete
++$section_index;
[740] Fix | Delete
[741] Fix | Delete
if ( ! isset( $controls_keys[ $section_index ] ) ) {
[742] Fix | Delete
break;
[743] Fix | Delete
}
[744] Fix | Delete
[745] Fix | Delete
$control_key = $controls_keys[ $section_index ];
[746] Fix | Delete
[747] Fix | Delete
if ( Controls_Manager::SECTION === $registered_controls[ $control_key ]['type'] ) {
[748] Fix | Delete
break;
[749] Fix | Delete
}
[750] Fix | Delete
[751] Fix | Delete
$section_controls[ $control_key ] = $registered_controls[ $control_key ];
[752] Fix | Delete
}
[753] Fix | Delete
[754] Fix | Delete
return $section_controls;
[755] Fix | Delete
}
[756] Fix | Delete
[757] Fix | Delete
/**
[758] Fix | Delete
* Add new group control to stack.
[759] Fix | Delete
*
[760] Fix | Delete
* Register a set of related controls grouped together as a single unified
[761] Fix | Delete
* control. For example grouping together like typography controls into a
[762] Fix | Delete
* single, easy-to-use control.
[763] Fix | Delete
*
[764] Fix | Delete
* @since 1.4.0
[765] Fix | Delete
* @access public
[766] Fix | Delete
*
[767] Fix | Delete
* @param string $group_name Group control name.
[768] Fix | Delete
* @param array $args Group control arguments. Default is an empty array.
[769] Fix | Delete
* @param array $options Optional. Group control options. Default is an
[770] Fix | Delete
* empty array.
[771] Fix | Delete
*/
[772] Fix | Delete
final public function add_group_control( $group_name, array $args = [], array $options = [] ) {
[773] Fix | Delete
$group = Plugin::$instance->controls_manager->get_control_groups( $group_name );
[774] Fix | Delete
[775] Fix | Delete
if ( ! $group ) {
[776] Fix | Delete
wp_die( sprintf( '%s::%s: Group "%s" not found.', get_called_class(), __FUNCTION__, $group_name ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
[777] Fix | Delete
}
[778] Fix | Delete
[779] Fix | Delete
$group->add_controls( $this, $args, $options );
[780] Fix | Delete
}
[781] Fix | Delete
[782] Fix | Delete
/**
[783] Fix | Delete
* Get style controls.
[784] Fix | Delete
*
[785] Fix | Delete
* Retrieve style controls for all active controls or, when requested, from
[786] Fix | Delete
* a specific set of controls.
[787] Fix | Delete
*
[788] Fix | Delete
* @since 1.4.0
[789] Fix | Delete
* @since 2.0.9 Added the `settings` parameter.
[790] Fix | Delete
* @access public
[791] Fix | Delete
* @deprecated 3.0.0
[792] Fix | Delete
*
[793] Fix | Delete
* @param array $controls Optional. Controls list. Default is null.
[794] Fix | Delete
* @param array $settings Optional. Controls settings. Default is null.
[795] Fix | Delete
*
[796] Fix | Delete
* @return array Style controls.
[797] Fix | Delete
*/
[798] Fix | Delete
final public function get_style_controls( ?array $controls = null, ?array $settings = null ) {
[799] Fix | Delete
Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.0.0' );
[800] Fix | Delete
[801] Fix | Delete
$controls = $this->get_active_controls( $controls, $settings );
[802] Fix | Delete
[803] Fix | Delete
$style_controls = [];
[804] Fix | Delete
[805] Fix | Delete
foreach ( $controls as $control_name => $control ) {
[806] Fix | Delete
$control_obj = Plugin::$instance->controls_manager->get_control( $control['type'] );
[807] Fix | Delete
[808] Fix | Delete
if ( ! $control_obj instanceof Base_Data_Control ) {
[809] Fix | Delete
continue;
[810] Fix | Delete
}
[811] Fix | Delete
[812] Fix | Delete
$control = array_merge( $control_obj->get_settings(), $control );
[813] Fix | Delete
[814] Fix | Delete
if ( $control_obj instanceof Control_Repeater ) {
[815] Fix | Delete
$style_fields = [];
[816] Fix | Delete
[817] Fix | Delete
foreach ( $this->get_settings( $control_name ) as $item ) {
[818] Fix | Delete
$style_fields[] = $this->get_style_controls( $control['fields'], $item );
[819] Fix | Delete
}
[820] Fix | Delete
[821] Fix | Delete
$control['style_fields'] = $style_fields;
[822] Fix | Delete
}
[823] Fix | Delete
[824] Fix | Delete
if ( ! empty( $control['selectors'] ) || ! empty( $control['dynamic'] ) || ! empty( $control['style_fields'] ) ) {
[825] Fix | Delete
$style_controls[ $control_name ] = $control;
[826] Fix | Delete
}
[827] Fix | Delete
}
[828] Fix | Delete
[829] Fix | Delete
return $style_controls;
[830] Fix | Delete
}
[831] Fix | Delete
[832] Fix | Delete
/**
[833] Fix | Delete
* Get tabs controls.
[834] Fix | Delete
*
[835] Fix | Delete
* Retrieve all the tabs assigned to the control.
[836] Fix | Delete
*
[837] Fix | Delete
* @since 1.4.0
[838] Fix | Delete
* @access public
[839] Fix | Delete
*
[840] Fix | Delete
* @return array Tabs controls.
[841] Fix | Delete
*/
[842] Fix | Delete
final public function get_tabs_controls() {
[843] Fix | Delete
return $this->get_stack()['tabs'];
[844] Fix | Delete
}
[845] Fix | Delete
[846] Fix | Delete
/**
[847] Fix | Delete
* Add new responsive control to stack.
[848] Fix | Delete
*
[849] Fix | Delete
* Register a set of controls to allow editing based on user screen size.
[850] Fix | Delete
* This method registers one or more controls per screen size/device, depending on the current Responsive Control
[851] Fix | Delete
* Duplication Mode. There are 3 control duplication modes:
[852] Fix | Delete
* * 'off' - Only a single control is generated. In the Editor, this control is duplicated in JS.
[853] Fix | Delete
* * 'on' - Multiple controls are generated, one control per enabled device/breakpoint + a default/desktop control.
[854] Fix | Delete
* * 'dynamic' - If the control includes the `'dynamic' => 'active' => true` property - the control is duplicated,
[855] Fix | Delete
* once for each device/breakpoint + default/desktop.
[856] Fix | Delete
* If the control doesn't include the `'dynamic' => 'active' => true` property - the control is not duplicated.
[857] Fix | Delete
*
[858] Fix | Delete
* @since 1.4.0
[859] Fix | Delete
* @access public
[860] Fix | Delete
*
[861] Fix | Delete
* @param string $id Responsive control ID.
[862] Fix | Delete
* @param array $args Responsive control arguments.
[863] Fix | Delete
* @param array $options Optional. Responsive control options. Default is
[864] Fix | Delete
* an empty array.
[865] Fix | Delete
*/
[866] Fix | Delete
final public function add_responsive_control( $id, array $args, $options = [] ) {
[867] Fix | Delete
$args['responsive'] = [];
[868] Fix | Delete
[869] Fix | Delete
$active_breakpoints = Plugin::$instance->breakpoints->get_active_breakpoints();
[870] Fix | Delete
[871] Fix | Delete
$devices = Plugin::$instance->breakpoints->get_active_devices_list( [
[872] Fix | Delete
'reverse' => true,
[873] Fix | Delete
'desktop_first' => true,
[874] Fix | Delete
] );
[875] Fix | Delete
[876] Fix | Delete
if ( isset( $args['devices'] ) ) {
[877] Fix | Delete
$devices = array_intersect( $devices, $args['devices'] );
[878] Fix | Delete
[879] Fix | Delete
$args['responsive']['devices'] = $devices;
[880] Fix | Delete
[881] Fix | Delete
unset( $args['devices'] );
[882] Fix | Delete
}
[883] Fix | Delete
[884] Fix | Delete
$control_to_check = $args;
[885] Fix | Delete
[886] Fix | Delete
if ( ! empty( $options['overwrite'] ) ) {
[887] Fix | Delete
$existing_control = Plugin::$instance->controls_manager->get_control_from_stack( $this->get_unique_name(), $id );
[888] Fix | Delete
[889] Fix | Delete
if ( ! is_wp_error( $existing_control ) ) {
[890] Fix | Delete
$control_to_check = $existing_control;
[891] Fix | Delete
}
[892] Fix | Delete
}
[893] Fix | Delete
[894] Fix | Delete
$responsive_duplication_mode = Plugin::$instance->breakpoints->get_responsive_control_duplication_mode();
[895] Fix | Delete
$additional_breakpoints_active = Plugin::$instance->experiments->is_feature_active( 'additional_custom_breakpoints' );
[896] Fix | Delete
$control_is_dynamic = ! empty( $control_to_check['dynamic']['active'] );
[897] Fix | Delete
$is_frontend_available = ! empty( $control_to_check['frontend_available'] );
[898] Fix | Delete
$has_prefix_class = ! empty( $control_to_check['prefix_class'] );
[899] Fix | Delete
[900] Fix | Delete
// If the new responsive controls experiment is active, create only one control - duplicates per device will
[901] Fix | Delete
// be created in JS in the Editor.
[902] Fix | Delete
if (
[903] Fix | Delete
$additional_breakpoints_active
[904] Fix | Delete
&& ( 'off' === $responsive_duplication_mode || ( 'dynamic' === $responsive_duplication_mode && ! $control_is_dynamic ) )
[905] Fix | Delete
// Some responsive controls need responsive settings to be available to the widget handler, even when empty.
[906] Fix | Delete
&& ! $is_frontend_available
[907] Fix | Delete
&& ! $has_prefix_class
[908] Fix | Delete
) {
[909] Fix | Delete
$args['is_responsive'] = true;
[910] Fix | Delete
[911] Fix | Delete
if ( ! empty( $options['overwrite'] ) ) {
[912] Fix | Delete
$this->update_control( $id, $args, [
[913] Fix | Delete
'recursive' => ! empty( $options['recursive'] ),
[914] Fix | Delete
] );
[915] Fix | Delete
} else {
[916] Fix | Delete
$this->add_control( $id, $args, $options );
[917] Fix | Delete
}
[918] Fix | Delete
[919] Fix | Delete
return;
[920] Fix | Delete
}
[921] Fix | Delete
[922] Fix | Delete
if ( isset( $args['default'] ) ) {
[923] Fix | Delete
$args['desktop_default'] = $args['default'];
[924] Fix | Delete
[925] Fix | Delete
unset( $args['default'] );
[926] Fix | Delete
}
[927] Fix | Delete
[928] Fix | Delete
foreach ( $devices as $device_name ) {
[929] Fix | Delete
$control_args = $args;
[930] Fix | Delete
[931] Fix | Delete
// Set parent using the name from previous iteration.
[932] Fix | Delete
if ( isset( $control_name ) ) {
[933] Fix | Delete
// If $control_name end with _widescreen use desktop name instead.
[934] Fix | Delete
$control_args['parent'] = '_widescreen' === substr( $control_name, -strlen( '_widescreen' ) ) ? $id : $control_name;
[935] Fix | Delete
} else {
[936] Fix | Delete
$control_args['parent'] = null;
[937] Fix | Delete
}
[938] Fix | Delete
[939] Fix | Delete
if ( isset( $control_args['device_args'] ) ) {
[940] Fix | Delete
if ( ! empty( $control_args['device_args'][ $device_name ] ) ) {
[941] Fix | Delete
$control_args = array_merge( $control_args, $control_args['device_args'][ $device_name ] );
[942] Fix | Delete
}
[943] Fix | Delete
[944] Fix | Delete
unset( $control_args['device_args'] );
[945] Fix | Delete
}
[946] Fix | Delete
[947] Fix | Delete
if ( ! empty( $args['prefix_class'] ) ) {
[948] Fix | Delete
$device_to_replace = Breakpoints_Manager::BREAKPOINT_KEY_DESKTOP === $device_name ? '' : '-' . $device_name;
[949] Fix | Delete
[950] Fix | Delete
$control_args['prefix_class'] = sprintf( $args['prefix_class'], $device_to_replace );
[951] Fix | Delete
}
[952] Fix | Delete
[953] Fix | Delete
$direction = 'max';
[954] Fix | Delete
[955] Fix | Delete
if ( Breakpoints_Manager::BREAKPOINT_KEY_DESKTOP !== $device_name ) {
[956] Fix | Delete
$direction = $active_breakpoints[ $device_name ]->get_direction();
[957] Fix | Delete
}
[958] Fix | Delete
[959] Fix | Delete
$control_args['responsive'][ $direction ] = $device_name;
[960] Fix | Delete
[961] Fix | Delete
if ( isset( $control_args['min_affected_device'] ) ) {
[962] Fix | Delete
if ( ! empty( $control_args['min_affected_device'][ $device_name ] ) ) {
[963] Fix | Delete
$control_args['responsive']['min'] = $control_args['min_affected_device'][ $device_name ];
[964] Fix | Delete
}
[965] Fix | Delete
[966] Fix | Delete
unset( $control_args['min_affected_device'] );
[967] Fix | Delete
}
[968] Fix | Delete
[969] Fix | Delete
if ( isset( $control_args[ $device_name . '_default' ] ) ) {
[970] Fix | Delete
$control_args['default'] = $control_args[ $device_name . '_default' ];
[971] Fix | Delete
}
[972] Fix | Delete
[973] Fix | Delete
foreach ( $devices as $device ) {
[974] Fix | Delete
unset( $control_args[ $device . '_default' ] );
[975] Fix | Delete
}
[976] Fix | Delete
[977] Fix | Delete
$id_suffix = Breakpoints_Manager::BREAKPOINT_KEY_DESKTOP === $device_name ? '' : '_' . $device_name;
[978] Fix | Delete
$control_name = $id . $id_suffix;
[979] Fix | Delete
[980] Fix | Delete
// Set this control as child of previous iteration control.
[981] Fix | Delete
if ( ! empty( $control_args['parent'] ) ) {
[982] Fix | Delete
$this->update_control( $control_args['parent'], [ 'inheritors' => [ $control_name ] ] );
[983] Fix | Delete
}
[984] Fix | Delete
[985] Fix | Delete
if ( ! empty( $options['overwrite'] ) ) {
[986] Fix | Delete
$this->update_control( $control_name, $control_args, [
[987] Fix | Delete
'recursive' => ! empty( $options['recursive'] ),
[988] Fix | Delete
] );
[989] Fix | Delete
} else {
[990] Fix | Delete
$this->add_control( $control_name, $control_args, $options );
[991] Fix | Delete
}
[992] Fix | Delete
}
[993] Fix | Delete
}
[994] Fix | Delete
[995] Fix | Delete
/**
[996] Fix | Delete
* Update responsive control in stack.
[997] Fix | Delete
*
[998] Fix | Delete
* Change the value of an existing responsive control in the stack. When you
[999] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function