at path:
ROOT
/
wp-content
/
plugins
/
elementor
/
includes
/
controls
/
repeater.php
run:
R
W
Run
groups
DIR
2026-04-14 05:34:14
R
W
Run
alert.php
1.79 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
animation.php
4.76 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
base-data.php
3.66 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
base-icon-font.php
580 By
2026-04-14 05:34:14
R
W
Run
Delete
Rename
base-multiple.php
2.03 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
base-ui.php
516 By
2026-04-14 05:34:14
R
W
Run
Delete
Rename
base-units.php
3.5 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
base.php
3.08 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
box-shadow.php
3.39 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
button.php
1.68 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
choose.php
2.19 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
code.php
1.99 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
color.php
2.04 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
date-time.php
2.04 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
deprecated-notice.php
2.27 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
dimensions.php
5 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
divider.php
829 By
2026-04-14 05:34:14
R
W
Run
Delete
Rename
exit-animation.php
2.54 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
font.php
2.22 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
gallery.php
7.26 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
gaps.php
1.62 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
heading.php
1.32 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
hidden.php
948 By
2026-04-14 05:34:14
R
W
Run
Delete
Rename
hover-animation.php
4.32 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
icon.php
31.33 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
icons.php
7.57 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
image-dimensions.php
3.71 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
media.php
14.95 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
notice.php
4.07 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
number.php
2.76 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
popover-toggle.php
2.66 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
raw-html.php
1.48 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
repeater.php
4.96 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
section.php
1.33 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
select.php
2.56 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
select2.php
2.72 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
slider.php
3.49 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
structure.php
2.46 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
switcher.php
2.08 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
tab.php
1.01 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
tabs.php
944 By
2026-04-14 05:34:14
R
W
Run
Delete
Rename
text-shadow.php
3.13 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
text.php
2.08 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
textarea.php
2.01 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
url.php
5.13 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
visual-choice.php
2.15 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
wp-widget.php
1.35 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
wysiwyg.php
1.73 KB
2026-04-14 05:34:14
R
W
Run
Delete
Rename
error_log
up
📄
repeater.php
Save
<?php namespace Elementor; if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } /** * Elementor repeater control. * * A base control for creating repeater control. Repeater control allows you to * build repeatable blocks of fields. You can create, for example, a set of * fields that will contain a title and a WYSIWYG text - the user will then be * able to add "rows", and each row will contain a title and a text. The data * can be wrapper in custom HTML tags, designed using CSS, and interact using JS * or external libraries. * * @since 1.0.0 */ class Control_Repeater extends Base_Data_Control implements Has_Validation { /** * Get repeater control type. * * Retrieve the control type, in this case `repeater`. * * @since 1.0.0 * @access public * * @return string Control type. */ public function get_type() { return 'repeater'; } /** * Get repeater control default value. * * Retrieve the default value of the data control. Used to return the default * values while initializing the repeater control. * * @since 2.0.0 * @access public * * @return array Control default value. */ public function get_default_value() { return []; } /** * Get repeater control default settings. * * Retrieve the default settings of the repeater control. Used to return the * default settings while initializing the repeater control. * * @since 1.0.0 * @access protected * * @return array Control default settings. */ protected function get_default_settings() { return [ 'fields' => [], 'title_field' => '', 'prevent_empty' => true, 'is_repeater' => true, 'max_items' => 0, 'min_items' => 0, 'item_actions' => [ 'add' => true, 'duplicate' => true, 'remove' => true, 'sort' => true, ], ]; } /** * Get repeater control value. * * Retrieve the value of the repeater control from a specific Controls_Stack. * * @since 1.0.0 * @access public * * @param array $control Control. * @param array $settings Controls_Stack settings. * * @return mixed Control values. */ public function get_value( $control, $settings ) { $value = parent::get_value( $control, $settings ); if ( ! empty( $value ) ) { foreach ( $value as &$item ) { foreach ( $control['fields'] as $field ) { $control_obj = Plugin::$instance->controls_manager->get_control( $field['type'] ); // Prior to 1.5.0 the fields may contains non-data controls. if ( ! $control_obj instanceof Base_Data_Control ) { continue; } $item[ $field['name'] ] = $control_obj->get_value( $field, $item ); } } } return $value; } /** * Import repeater. * * Used as a wrapper method for inner controls while importing Elementor * template JSON file, and replacing the old data. * * @since 1.8.0 * @access public * * @param array $settings Control settings. * @param array $control_data Optional. Control data. Default is an empty array. * * @return array Control settings. */ public function on_import( $settings, $control_data = [] ) { if ( empty( $settings ) || empty( $control_data['fields'] ) ) { return $settings; } $method = 'on_import'; foreach ( $settings as &$item ) { foreach ( $control_data['fields'] as $field ) { if ( empty( $field['name'] ) || empty( $item[ $field['name'] ] ) ) { continue; } $control_obj = Plugin::$instance->controls_manager->get_control( $field['type'] ); if ( ! $control_obj ) { continue; } if ( method_exists( $control_obj, $method ) ) { $item[ $field['name'] ] = $control_obj->{$method}( $item[ $field['name'] ], $field ); } } } return $settings; } /** * Render repeater control output in the editor. * * Used to generate the control HTML in the editor using Underscore JS * template. The variables for the class are available using `data` JS * object. * * @since 1.0.0 * @access public */ public function content_template() { ?> <label> <span class="elementor-control-title">{{{ data.label }}}</span> </label> <div class="elementor-repeater-fields-wrapper" role="list"></div> <# if ( itemActions.add ) { #> <div class="elementor-button-wrapper"> <button class="elementor-button elementor-repeater-add" type="button"> <i class="eicon-plus" aria-hidden="true"></i> <# if ( data.button_text ) { #> {{{ data.button_text }}} <# } else { #> <?php echo esc_html__( 'Add Item', 'elementor' ); ?> <# } #> </button> </div> <# } #> <?php } public function validate( array $control_data ): bool { if ( isset( $control_data['min_items'] ) ) { if ( ! isset( $control_data['default'] ) || count( $control_data['default'] ) < $control_data['min_items'] ) { throw new \Exception( esc_html__( 'In a Repeater control, if you specify a minimum number of items, you must also specify a default value that contains at least that number of items.', 'elementor' ) ); } } return true; } }