Advertisement
sumantagogoi

Untitled

Jun 13th, 2025 (edited)
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.75 KB | None | 0 0
  1. <?php
  2. add_action('elementor/frontend/widget/before_render', function($widget) {
  3. if ($widget->get_name() !== 'nested-accordion') return;
  4.  
  5. $classes = $widget->get_settings('_css_classes');
  6. if (empty($classes)) return;
  7.  
  8. // Match class like 'accordion-json-repeater-something'
  9. if (!preg_match('/accordion-json-repeater-([a-zA-Z0-9_-]+)/', $classes, $matches)) return;
  10.  
  11. $field_key = $matches[1];
  12.  
  13. // Get the JSON from the custom field
  14. $json = get_post_meta(get_the_ID(), $field_key, true);
  15. $accordion_items = json_decode($json, true);
  16.  
  17. $items = $widget->get_settings('items');
  18. $children = $widget->get_children();
  19.  
  20. // If field is empty or invalid, hide all items
  21. if (!is_array($accordion_items) || empty($accordion_items)) {
  22. $widget->set_settings('items', []);
  23. return;
  24. }
  25.  
  26. // Limit to the number of accordion items
  27. $items = array_slice($items, 0, count($accordion_items));
  28. $children = array_slice($children, 0, count($accordion_items));
  29.  
  30. foreach ($accordion_items as $i => $entry) {
  31. if (!isset($items[$i]) || !isset($children[$i])) continue;
  32. $items[$i]['item_title'] = isset($entry['title']) ? wp_kses_post($entry['title']) : '';
  33.  
  34. foreach ($children[$i]->get_children() as $child_widget) {
  35. if ($child_widget->get_name() === 'text-editor') {
  36. $content = $child_widget->get_settings('editor');
  37. // Allow safe HTML in content
  38. $content = str_replace('#accordion-content', isset($entry['content']) ? wp_kses_post($entry['content']) : '', $content);
  39. $child_widget->set_settings('editor', $content);
  40. }
  41. }
  42. }
  43.  
  44. $widget->set_settings('items', $items);
  45. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement