Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- add_action('elementor/frontend/widget/before_render', function($widget) {
- if ($widget->get_name() !== 'nested-accordion') return;
- $classes = $widget->get_settings('_css_classes');
- if (empty($classes)) return;
- // Match class like 'accordion-json-repeater-something'
- if (!preg_match('/accordion-json-repeater-([a-zA-Z0-9_-]+)/', $classes, $matches)) return;
- $field_key = $matches[1];
- // Get the JSON from the custom field
- $json = get_post_meta(get_the_ID(), $field_key, true);
- $accordion_items = json_decode($json, true);
- $items = $widget->get_settings('items');
- $children = $widget->get_children();
- // If field is empty or invalid, hide all items
- if (!is_array($accordion_items) || empty($accordion_items)) {
- $widget->set_settings('items', []);
- return;
- }
- // Limit to the number of accordion items
- $items = array_slice($items, 0, count($accordion_items));
- $children = array_slice($children, 0, count($accordion_items));
- foreach ($accordion_items as $i => $entry) {
- if (!isset($items[$i]) || !isset($children[$i])) continue;
- $items[$i]['item_title'] = isset($entry['title']) ? wp_kses_post($entry['title']) : '';
- foreach ($children[$i]->get_children() as $child_widget) {
- if ($child_widget->get_name() === 'text-editor') {
- $content = $child_widget->get_settings('editor');
- // Allow safe HTML in content
- $content = str_replace('#accordion-content', isset($entry['content']) ? wp_kses_post($entry['content']) : '', $content);
- $child_widget->set_settings('editor', $content);
- }
- }
- }
- $widget->set_settings('items', $items);
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement