Skip to content

Instantly share code, notes, and snippets.

@webdevs-pro
Created October 3, 2021 18:02
Show Gist options
  • Save webdevs-pro/460ef100b1c2addc0f0da5c727ec87f5 to your computer and use it in GitHub Desktop.
Save webdevs-pro/460ef100b1c2addc0f0da5c727ec87f5 to your computer and use it in GitHub Desktop.
Elementor data widget controls updater
<?php
function update_controls( $elements ) {
$new_elements = array();
foreach ( $elements as $element_index => $element ) {
foreach ( $element as $key => $value ) {
if ( $key == 'elements' && ! empty( $value ) ) {
$new_elements[$element_index][$key] = update_controls( $value );
} else {
if ( $key == 'settings' ) {
$new_elements[$element_index][$key] = update_settings_new( $value, $element );
} else {
$new_elements[$element_index][$key] = $value;
}
}
}
}
return $new_elements;
}
function update_settings_new( $settings, $element ) {
$widgets = array(
'dh-anchor-navigation' => [
'heading',
'title',
'anchor'
],
'dh-image-heading-text' => [
'image',
'image_align',
'image_width',
'image_reverse',
'heading',
'content'
],
'dh-product-comparition' => [
'skin',
'controls_conditions',
'columns_count',
'title',
'badge',
'image',
'star_rating',
'text_rating',
'price',
'order_by',
'button_text',
'button_link',
'sponsored',
'pros',
'cons',
'description',
'products'
],
'dh-impact' => [
'milieuwinst',
'prijs',
'terugverdientijd',
'gemak',
'vervuiling',
'subsidie',
'calculations_text',
],
'dh-mega-menu' => [
'menu',
'mobile_menu',
'align_items',
'space_between',
'offset',
'color',
'align_toggle',
'offset_mobile',
],
'dh-numbered-list' => [
'text',
'items',
],
);
$config = array();
foreach ( $widgets as $widget => $controls ) {
foreach ( $controls as $control ) {
$config[$widget][$control] = array(
'old_name' => $control,
'new_name' => str_replace( '-', '_', $widget ) . '_' . $control
);
}
}
// echo '<pre>$config<br>' . print_r($config, true) . '</pre><br>';
$new_settings = (object) array();
if ( $element->elType == 'widget' ) {
if ( array_key_exists( $element->widgetType ?? '', $config ) ) {
foreach ( $settings as $setting_name => $value ) {
if ( is_array( $value ) ) {
foreach( $value as $index => $item ) {
$new_settings->$setting_name[$index] = update_settings_new( $item, $element );
}
} else {
if ( array_key_exists( $setting_name, $config[$element->widgetType] ) ) {
$new_settings->{$config[$element->widgetType][$setting_name]['new_name']} = $settings->{$config[$element->widgetType][$setting_name]['old_name']};
} else {
$new_settings->$setting_name = $settings->$setting_name;
}
}
}
}
} else {
$new_settings = $settings;
}
return $new_settings;
}
$posts = array(
// '22110',
'24300'
);
foreach ( $posts as $post_id ) {
$elementor_data = json_decode( get_post_meta( $post_id, '_elementor_data', true ) );
echo '<pre>$elementor_data<br>' . print_r($elementor_data, true) . '</pre><br>';
$new_elementor_data = update_controls( $elementor_data );
echo '<pre>$new_elementor_data<br>' . print_r($new_elementor_data, true) . '</pre><br>';
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment