protected function _init( $data ) {
Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '2.9.0', 'init()' );
* Performs settings cleaning and sanitization.
* @param array $settings Settings to sanitize.
* @param array $controls Optional. An array of controls. Default is an
* @return array Sanitized settings.
private function sanitize_settings( array $settings, array $controls = [] ) {
$controls = $this->get_controls();
foreach ( $controls as $control ) {
$control_obj = Plugin::$instance->controls_manager->get_control( $control['type'] );
if ( $control_obj instanceof Control_Repeater ) {
if ( empty( $settings[ $control['name'] ] ) ) {
foreach ( $settings[ $control['name'] ] as $index => $repeater_row_data ) {
$sanitized_row_data = $this->sanitize_settings( $repeater_row_data, $control['fields'] );
$settings[ $control['name'] ][ $index ] = $sanitized_row_data;
$is_dynamic = isset( $settings[ Manager::DYNAMIC_SETTING_KEY ][ $control['name'] ] );
$value_to_check = $settings[ Manager::DYNAMIC_SETTING_KEY ][ $control['name'] ];
$tag_text_data = Plugin::$instance->dynamic_tags->tag_text_to_tag_data( $value_to_check );
if ( ! Plugin::$instance->dynamic_tags->get_tag_info( $tag_text_data['name'] ) ) {
unset( $settings[ Manager::DYNAMIC_SETTING_KEY ][ $control['name'] ] );
* Controls stack constructor.
* Initializing the control stack class using `$data`. The `$data` is required
* for a normal instance. It is optional only for internal `type instance`.
* @param array $data Optional. Control stack data. Default is an empty array.
public function __construct( array $data = [] ) {
// TODO: This is for backwards compatibility starting from 2.9.0
// This if statement should be removed when the method is hard-deprecated.
if ( $this->has_own_method( '_init', self::class ) ) {
Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( '_init', '2.9.0', __CLASS__ . '::init()' );