PluginProbe
QuadMenu – Mega Menu / 1.9.9
QuadMenu – Mega Menu v1.9.9
3.3.7 3.3.6 trunk 1.8.4 1.8.5 1.8.7 1.8.8 1.8.9 1.9.0 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 All 87 releases
quadmenu / includes / backend / ajax.php

ajax.php in QuadMenu – Mega Menu 1.9.9, at includes/backend/ajax.php

559 lines 21.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 if (!defined('ABSPATH')) {
3 die('-1');
4 }
5
6 class QuadMenu_Ajax extends QuadMenu_Settings {
7
8 public function __construct() {
9
10 add_action('admin_enqueue_scripts', array($this, 'enqueue'), 10);
11
12 // Ajax
13 // -----------------------------------------------------------------
14 //add_action('wp_ajax_quadmenu_change_nav_menu_theme', array($this, 'ajax_change_nav_menu_theme'));
15
16 add_action('wp_ajax_quadmenu_add_nav_menu_item', array($this, 'ajax_add_nav_menu_item'));
17
18 add_action('wp_ajax_quadmenu_delete_nav_menu_item', array($this, 'ajax_delete_nav_menu_item'));
19
20 add_action('wp_ajax_quadmenu_update_nav_menu_item', array($this, 'ajax_update_nav_menu_item_order'));
21
22 add_action('wp_ajax_quadmenu_add_nav_menu_item_settings', array($this, 'ajax_add_nav_menu_item_settings'));
23
24 add_action('wp_ajax_quadmenu_save_nav_menu_item_settings', array($this, 'ajax_save_nav_menu_item_settings'));
25
26 // WP
27 // ---------------------------------------------------------------------
28
29 add_action('wp_update_nav_menu_item', array($this, 'update_nav_menu_item'), 10, 3);
30
31 // Nav Menu
32 // -----------------------------------------------------------------
33
34 add_meta_box('quadmenu_nav_menu_items', esc_html__('QuadMenu Items', 'quadmenu'), array($this, 'nav_items'), 'nav-menus', 'side', 'high');
35
36 add_meta_box('quadmenu_nav_menu_archives', esc_html__('QuadMenu Archives', 'quadmenu'), array($this, 'nav_archives'), 'nav-menus', 'side', 'high');
37 }
38
39 public function enqueue() {
40
41 global $pagenow;
42
43 if ($pagenow != 'nav-menus.php')
44 return;
45
46 wp_enqueue_media();
47
48 wp_enqueue_style('quadmenu-admin');
49
50 wp_enqueue_script('quadmenu-admin');
51
52 wp_localize_script('quadmenu-admin', 'quadmenu', array(
53 'nonce' => wp_create_nonce('quadmenu'),
54 'add_name' => QUADMENU_NAME,
55 'add_background' => esc_html('Add Background', 'quadmenu'),
56 'add_to_column' => esc_html('Add to Column', 'quadmenu'),
57 )
58 );
59 }
60
61 public function nav_items() {
62 global $_nav_menu_placeholder, $nav_menu_selected_id;
63
64 $items = QuadMenu_Configuration::custom_nav_menu_items();
65 ?>
66 <div id="posttype-quadmenu-custom" class="posttypediv">
67 <div id="tabs-panel-quadmenu-custom" class="tabs-panel tabs-panel-active">
68 <ul id ="quadmenu-custom-checklist" class="categorychecklist form-no-clear">
69 <?php
70 if (is_object($items)):
71
72 foreach ($items as $id => $item):
73
74 if (!isset($item->depth) || $item->depth > 0)
75 continue;
76
77 $classes = array();
78
79 $classes[] = 'quadmenu-item';
80
81 $classes[] = 'quadmenu-item-' . $id;
82
83 if (isset($item->depth)) {
84 $classes[] = 'quadmenu-item-depth-' . $item->depth;
85 }
86
87 $title = $id;
88
89 if (isset($item->title)) {
90 $title = $item->title;
91 }
92
93 $_nav_menu_placeholder = ( 0 > $_nav_menu_placeholder ) ? intval($_nav_menu_placeholder) - 1 : -1;
94 ?>
95
96 <li class="<?php echo join(' ', array_map('sanitize_html_class', $classes)); ?>">
97 <label class="menu-item-title">
98 <input type="checkbox" class="menu-item-checkbox" name="menu-item[<?php echo esc_attr($_nav_menu_placeholder); ?>][menu-item-label]" value="0">
99 <?php echo esc_html($title); ?>
100 <?php if (!empty($item->desc)): ?>
101 <small><?php echo $item->desc; ?></small>
102 <?php endif; ?>
103 </label>
104 <input type="hidden" class="menu-item-type" name="menu-item[<?php echo esc_attr($_nav_menu_placeholder); ?>][menu-item-type]" value="custom">
105 <input type="hidden" class="menu-item-title" name="menu-item[<?php echo esc_attr($_nav_menu_placeholder); ?>][menu-item-title]" value="<?php echo esc_html($title); ?>">
106 <input type="hidden" class="menu-item-quadmenu" name="menu-item[<?php echo esc_attr($_nav_menu_placeholder); ?>][menu-item-quadmenu]" value="<?php echo esc_attr($id); ?>">
107 </li>
108
109 <?php endforeach; ?>
110
111 <?php endif; ?>
112 </ul>
113 </div>
114 <p class="button-controls">
115 <span class="add-to-menu">
116 <input type="submit" class="button-secondary submit-add-to-quadmenu right" value="<?php esc_html_e('Add to Menu'); ?>" name="submit-posttype-quadmenu-custom" id="submit-posttype-quadmenu-custom">
117 <span class="spinner"></span>
118 </span>
119 </p>
120 </div>
121 <?php
122 }
123
124 public function nav_archives() {
125
126 $post_types = get_post_types(array('show_in_nav_menus' => true), 'object');
127
128 if ($post_types) :
129 $items = array();
130 $loop_index = 999999;
131
132 foreach ($post_types as $post_type) {
133 $item = new stdClass();
134 $loop_index++;
135
136 $item->object_id = $loop_index;
137 $item->db_id = 0;
138 $item->object = $post_type->name;
139 $item->menu_item_parent = 0;
140 $item->type = 'post_type_archive';
141 $item->title = sprintf(esc_html__('All %s', 'quadmenu'), str_replace('All ', '', $post_type->labels->name));
142 $item->url = get_post_type_archive_link($post_type->query_var);
143 $item->target = '';
144 $item->attr_title = '';
145 $item->classes = array();
146 $item->xfn = '';
147
148 $items[] = $item;
149 }
150
151 $walker = new Walker_Nav_Menu_Checklist(array());
152 ?>
153
154 <div id="posttype-archive" class="posttypediv">
155 <div id="tabs-panel-posttype-archive" class="tabs-panel tabs-panel-active">
156 <ul id="posttype-archive-checklist" class="categorychecklist form-no-clear">
157 <?php echo walk_nav_menu_tree(array_map('wp_setup_nav_menu_item', $items), 0, (object) array('walker' => $walker)); ?>
158 </ul>
159 </div>
160 </div>
161
162 <p class="button-controls">
163 <span class="add-to-menu">
164 <input type="submit"<?php disabled(1, 0); ?> class="button-secondary submit-add-to-menu right" value="<?php esc_html_e('Add to Menu'); ?>" name="add-posttype-archive-menu-item" id="submit-posttype-archive" />
165 <span class="spinner"></span>
166 </span>
167 </p>
168
169 <?php
170 endif;
171 }
172
173 /* public function ajax_change_nav_menu_theme() {
174
175 if (!check_ajax_referer('quadmenu', 'nonce', false)) {
176 QuadMenu::send_json_error(esc_html__('Please reload page.', 'quadmenu'));
177 }
178
179 $menu_id = absint($_REQUEST['menu_id']);
180
181 $key = sanitize_text_field($_REQUEST['current_theme']);
182
183 if ($menu_id > 0 && is_nav_menu($menu_id)) {
184
185 $saved_themes = get_term_meta($menu_id, QUADMENU_THEME_DB_KEY);
186
187 QuadMenu::send_json_error(json_encode($saved_themes));
188
189 if (add_term_meta($menu_id, QUADMENU_THEME_DB_KEY, array_merge((array) $saved_themes, (array) $_REQUEST['quadmenu_themes']), true)) {
190 QuadMenu::send_json_success();
191 } else {
192 QuadMenu::send_json_error(sprintf(esc_html__('Failed to add theme', 'quadmenu')));
193 }
194 }
195
196 wp_die();
197 } */
198
199 public function ajax_add_nav_menu_item() {
200
201 if (!check_ajax_referer('quadmenu', 'nonce', false)) {
202 QuadMenu::send_json_error(esc_html__('Please reload page.', 'quadmenu'));
203 }
204
205 if (empty($_REQUEST['menu-item'])) {
206 QuadMenu::send_json_error(esc_html__('Undefined menu-item var.', 'quadmenu'));
207 wp_die();
208 }
209
210 require_once ABSPATH . 'wp-admin/includes/nav-menu.php';
211
212 // For performance reasons, we omit some object properties from the checklist.
213 // The following is a hacky way to restore them when adding non-custom items.
214
215 $menu_items_data = array();
216
217 foreach ((array) $_REQUEST['menu-item'] as $menu_item_data) {
218 $menu_items_data[] = $menu_item_data;
219 }
220
221 $menu_id = absint($_REQUEST['menu_id']);
222
223 $item_ids = $this->ajax_create_nav_menu_items($menu_id, $menu_items_data);
224
225 if (is_wp_error($item_ids))
226 wp_die();
227
228 $menu_items = array();
229
230 foreach ((array) $item_ids as $menu_item_id) {
231
232 $menu_obj = QuadMenu::wp_setup_nav_menu_item($menu_item_id);
233
234 $menu_obj->label = $menu_obj->title; // don't show "(pending)" in ajax-added items
235
236 $menu_items[] = $menu_obj;
237 }
238
239 $walker_class_name = apply_filters('quadmenu_edit_nav_menu_walker', 'Walker_Nav_Menu_Edit', $menu_id, $menu_obj, $menu_items);
240
241 if (!class_exists($walker_class_name)) {
242
243 QuadMenu::send_json_error(sprintf(esc_html__('Class %s don\'t exists.', 'quadmenu'), $walker_class_name));
244
245 wp_die();
246 }
247
248 if (!empty($menu_items)) {
249 $args = array(
250 'after' => '',
251 'before' => '',
252 'link_after' => '',
253 'link_before' => '',
254 'walker' => new $walker_class_name,
255 'doing_ajax' => true
256 );
257
258 $html = walk_nav_menu_tree($menu_items, 0, (object) $args);
259
260 if ($html) {
261 QuadMenu::send_json_success($html);
262 } else {
263 QuadMenu::send_json_error(sprintf(esc_html__('Failed to add %s', 'quadmenu'), $items[$menu_obj->quadmenu]['label']));
264 }
265 }
266
267 wp_die();
268 }
269
270 public function ajax_create_nav_menu_items($menu_id = 0, $menu_data = array()) {
271
272 $items_saved = array();
273
274 if (0 == $menu_id || is_nav_menu($menu_id)) {
275
276 wp_cache_delete("wp_get_nav_menu_items_{$menu_id}", 'quadmenu');
277
278 // Loop through all the menu items' POST values.
279 foreach ((array) $menu_data as $_possible_db_id => $_item_object_data) {
280
281 // If this possible menu item doesn't actually have a menu database ID yet.
282 if (empty($_item_object_data['menu-item-db-id']) || ( 0 > $_possible_db_id ) || $_possible_db_id != $_item_object_data['menu-item-db-id']) {
283 $_actual_db_id = 0;
284 } else {
285 $_actual_db_id = (int) $_item_object_data['menu-item-db-id'];
286 }
287
288 $args = array(
289 'menu-item-status' => ( isset($_item_object_data['menu-item-status']) ? $_item_object_data['menu-item-status'] : '' ),
290 'menu-item-db-id' => ( isset($_item_object_data['menu-item-db-id']) ? $_item_object_data['menu-item-db-id'] : '' ),
291 'menu-item-object-id' => ( isset($_item_object_data['menu-item-object-id']) ? $_item_object_data['menu-item-object-id'] : '' ),
292 'menu-item-object' => ( isset($_item_object_data['menu-item-object']) ? $_item_object_data['menu-item-object'] : '' ),
293 'menu-item-type' => ( isset($_item_object_data['menu-item-type']) ? $_item_object_data['menu-item-type'] : '' ),
294 'menu-item-title' => ( isset($_item_object_data['menu-item-title']) ? $_item_object_data['menu-item-title'] : '' ),
295 'menu-item-url' => ( isset($_item_object_data['menu-item-url']) ? $_item_object_data['menu-item-url'] : '' ),
296 'menu-item-parent-id' => ( isset($_item_object_data['menu-item-parent-id']) ? $_item_object_data['menu-item-parent-id'] : '' ),
297 'menu-item-columns' => ( isset($_item_object_data['menu-item-columns']) ? $_item_object_data['menu-item-columns'] : $_item_object_data['menu-item-type'] ),
298 'menu-item-quadmenu' => ( isset($_item_object_data['menu-item-quadmenu']) ? $_item_object_data['menu-item-quadmenu'] : $_item_object_data['menu-item-type'] ),
299 'menu-item-quadmenu-widget' => ( isset($_item_object_data['menu-item-quadmenu-widget']) ? $_item_object_data['menu-item-quadmenu-widget'] : '' ),
300 );
301
302 if ($this->ajax_check_nav_menu_item_parent($args)) {
303 $items_saved[] = wp_update_nav_menu_item($menu_id, $_actual_db_id, $args);
304 }
305 }
306 }
307
308 return $items_saved;
309 }
310
311 public function ajax_check_nav_menu_item_parent($args) {
312
313 $items = QuadMenu_Configuration::custom_nav_menu_items();
314
315 if (!isset($items->{$args['menu-item-quadmenu']})) {
316 QuadMenu::send_json_error(sprintf(esc_html__('Failed to add %s. Is not registered in QuadMenu Items.', 'quadmenu'), $items->{$args['menu-item-quadmenu']}));
317 }
318
319 if (isset($items->{$args['menu-item-quadmenu']}->parent)) {
320
321 if ($parent_obj = QuadMenu::wp_setup_nav_menu_item($args['menu-item-parent-id'])) {
322
323 if ($items->{$args['menu-item-quadmenu']}->parent === 'main') {
324 QuadMenu::send_json_error(sprintf(esc_html__('Failed to add %s. Only can be placed on the main menu.', 'quadmenu'), $items->{$args['menu-item-quadmenu']}->label));
325 }
326
327 if (!in_array(sanitize_key($parent_obj->quadmenu), (array) $items->{$args['menu-item-quadmenu']}->parent)) {
328 QuadMenu::send_json_error(sprintf(esc_html__('Failed to add %s as child of %s', 'quadmenu'), $items->{$args['menu-item-quadmenu']}->label, $items->{$parent_obj->quadmenu}->label));
329 }
330 } elseif ($items->{$args['menu-item-quadmenu']}->parent !== 'main') {
331 QuadMenu::send_json_error(sprintf(esc_html__('Failed to add %s. Has to be child of %s', 'quadmenu'), join(' ', (array) $items->{$args['menu-item-quadmenu']}->label), join(' ', (array) $items->{$args['menu-item-quadmenu']}->parent)));
332 }
333 }
334
335 return true;
336 }
337
338 public function ajax_delete_nav_menu_item() {
339
340 if (!check_ajax_referer('quadmenu', 'nonce', false)) {
341 QuadMenu::send_json_error(esc_html__('Please reload page.', 'quadmenu'));
342 }
343
344 $menu_id = absint($_REQUEST['menu_id']);
345
346 $menu_item_id = absint($_REQUEST['menu_item_id']);
347
348 $deleted = $this->delete_children_nav_menu_items($menu_id, $menu_item_id);
349
350 QuadMenu::send_json_success(sprintf(esc_html__('Removed items %s.', 'quadmenu'), join(' ', (array) $deleted)));
351
352 wp_die();
353 }
354
355 public function delete_children_nav_menu_items($menu_id = 0, $menu_item_id) {
356
357 $deleted = array();
358
359 if ($menu_item_id > 0 && is_nav_menu_item($menu_item_id)) {
360
361 wp_cache_delete("wp_get_nav_menu_items_{$menu_id}", 'quadmenu');
362
363 $delete_menu_items_id = $this->get_children_nav_menu_items($menu_id, $menu_item_id);
364
365 $delete_menu_items_id[] = array('id' => $menu_item_id);
366
367 if (is_array($delete_menu_items_id) && count($delete_menu_items_id)) {
368 foreach ($delete_menu_items_id as $item) {
369
370 $id = absint($item['id']);
371
372 do_action('quadmenu_delete_nav_menu_item', $id, $menu_id);
373
374 if (wp_delete_post($id, true)) {
375
376 $deleted[] = $id;
377 }
378 }
379 }
380 }
381
382 return $deleted;
383 }
384
385 public function ajax_update_nav_menu_item_order() {
386
387 if (!check_ajax_referer('quadmenu', 'nonce', false)) {
388 QuadMenu::send_json_error(esc_html__('Please reload page.', 'quadmenu'));
389 }
390
391 $menu_id = absint($_REQUEST['menu_id']);
392
393 if (isset($_REQUEST['menu-item']) && is_array($_REQUEST['menu-item'])) {
394
395 $updated = array();
396
397 foreach ($_REQUEST['menu-item'] as $menu_item_id => $menu_item_data) {
398
399 $menu_item_parent_id = absint($menu_item_data['menu-item-parent-id']);
400
401 $menu_item_position = absint($menu_item_data['menu-item-position']);
402
403 update_post_meta($menu_item_id, '_menu_item_menu_item_parent', $menu_item_parent_id);
404
405 if ($id = wp_update_post(array('ID' => $menu_item_id, 'menu_order' => $menu_item_position))) {
406 $updated[] = $menu_item_id;
407 }
408 }
409
410 wp_cache_delete("wp_get_nav_menu_items_{$menu_id}", 'quadmenu');
411
412 QuadMenu::send_json_success(sprintf(esc_html__('Updated items %s.', 'quadmenu'), join(' ', (array) $updated)));
413 } else {
414
415 QuadMenu::send_json_error(esc_html__('Undefined menu-item var.', 'quadmenu'));
416 }
417
418 wp_die();
419 }
420
421 public function ajax_add_nav_menu_item_settings() {
422
423 if (!check_ajax_referer('quadmenu', 'nonce', false)) {
424 QuadMenu::send_json_error(esc_html__('Please reload page.', 'quadmenu'));
425 }
426
427 $menu_id = absint($_REQUEST['menu_id']);
428
429 $menu_item_id = absint($_REQUEST['menu_item_id']);
430
431 $menu_item_depth = absint($_REQUEST['menu_item_depth']);
432
433 $menu_obj = QuadMenu::wp_setup_nav_menu_item($menu_item_id);
434
435 ob_start();
436 ?>
437 <div id="quadmenu-settings" class="quadmenu-item-depth-<?php echo esc_attr($menu_item_depth); ?> quadmenu-item-<?php echo esc_attr($menu_obj->quadmenu); ?>">
438 <div class="quadmenu-settings-header">
439 <div class="quadmenu_saving"><?php esc_html_e('Saving', 'quadmenu'); ?></div>
440 <button type="button" class="quadmenu_close button-secondary" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
441 <h3 id="quadmenu-title-<?php echo esc_attr($menu_obj->ID); ?>" class="quadmenu-title"><i class="<?php echo esc_attr($menu_obj->icon); ?>"></i><span><?php esc_html_e($menu_obj->title); ?></span></h3>
442 </div>
443 <div class="quadmenu-settings-body clearfix">
444 <?php do_action('quadmenu_modal_panels', $menu_item_depth, $menu_obj, $menu_id); ?>
445 </div>
446 <div class="clearfix"></div>
447 <div class="quadmenu-settings-modal-footer">
448 </div>
449 <div class="clearfix"></div>
450 </div>
451 <?php
452 if ($settings = ob_get_clean()) {
453 QuadMenu::send_json_success($settings);
454 } else {
455 QuadMenu::send_json_error(sprintf(esc_html__('Can\'t load settings of %s.', 'quadmenu'), $menu_obj->ID));
456 }
457
458 wp_die();
459 }
460
461 public function ajax_save_nav_menu_item_settings() {
462
463 if (!check_ajax_referer('quadmenu', 'nonce', false)) {
464 QuadMenu::send_json_error(esc_html__('Please reload page.', 'quadmenu'));
465 }
466
467 if ($menu_item_id = absint($_REQUEST['menu_item_id'])) {
468 wp_cache_delete("wp_setup_nav_menu_item_{$menu_item_id}", 'quadmenu');
469 }
470
471 $menu_id = absint($_REQUEST['menu_id']);
472
473 if ($menu_item_id > 0) {
474
475 if (isset($_REQUEST['menu-item-quadmenu-settings']) && is_array($_REQUEST['menu-item-quadmenu-settings'])) {
476
477 $saved_settings = array_filter((array) get_post_meta($menu_item_id, QUADMENU_DB_KEY, true));
478
479 if (is_array($saved_settings) && $updated_settings = array_merge($saved_settings, $_REQUEST['menu-item-quadmenu-settings'])) {
480 update_post_meta($menu_item_id, QUADMENU_DB_KEY, $updated_settings);
481 }
482 }
483
484 if (isset($_REQUEST['menu-item-url'])) {
485 update_post_meta($menu_item_id, '_menu_item_url', esc_url_raw($_REQUEST['menu-item-url']));
486 }
487 if (isset($_REQUEST['menu-item-parent-id'])) {
488 update_post_meta($menu_item_id, '_menu_item_menu_item_parent', strval((int) $_REQUEST['menu-item-parent-id']));
489 }
490 if (isset($_REQUEST['menu-item-target'])) {
491 update_post_meta($menu_item_id, '_menu_item_target', sanitize_key($_REQUEST['menu-item-target']));
492 }
493 if (isset($_REQUEST['menu-item-classes'])) {
494 $_REQUEST['menu-item-classes'] = array_map('sanitize_html_class', explode(' ', $_REQUEST['menu-item-classes']));
495 update_post_meta($menu_item_id, '_menu_item_classes', $_REQUEST['menu-item-classes']);
496 }
497 if (isset($_REQUEST['menu-item-xfn'])) {
498 $_REQUEST['menu-item-xfn'] = join(' ', array_map('sanitize_html_class', explode(' ', $_REQUEST['menu-item-xfn'])));
499 update_post_meta($menu_item_id, '_menu_item_xfn', $_REQUEST['menu-item-xfn']);
500 }
501
502 if (isset($_REQUEST['menu-item-title']) || isset($_REQUEST['menu-item-attr-title']) || isset($_REQUEST['menu-item-description'])) {
503
504 $post = array(
505 'ID' => $menu_item_id,
506 );
507
508 if (isset($_REQUEST['menu-item-title'])) {
509 $post['post_title'] = apply_filters('the_title', $_REQUEST['menu-item-title']);
510 }
511 if (isset($_REQUEST['menu-item-attr-title'])) {
512 $post['post_excerpt'] = wp_kses_post($_REQUEST['menu-item-attr-title']);
513 }
514 if (isset($_REQUEST['menu-item-description'])) {
515 $post['post_content'] = wp_kses_post($_REQUEST['menu-item-description']);
516 }
517
518 //'post_type' => 'nav_menu_item',
519 //'post_parent' => $original_parent,
520 //'menu_order' => $args['menu-item-position'],
521
522 if (!wp_update_post($post)) {
523
524 QuadMenu::send_json_error(sprintf(esc_html__('Can\'t save settings of %s.', 'quadmenu'), $menu_item_id));
525
526 wp_die();
527 }
528 }
529
530 QuadMenu::send_json_success(sprintf(esc_html__('Saved settings of %s.', 'quadmenu'), $menu_item_id));
531
532 wp_die();
533 }
534
535 QuadMenu::send_json_error(sprintf(esc_html__('Can\'t save settings of %s.', 'quadmenu'), $menu_item_id));
536
537 wp_die();
538 }
539
540 public function update_nav_menu_item($menu_id, $menu_item_db_id, $args) {
541
542 if (!empty($args['menu-item-quadmenu'])) {
543
544 $saved_settings = array_filter((array) get_post_meta($menu_item_db_id, QUADMENU_DB_KEY, true));
545
546 $saved_settings['quadmenu'] = $args['menu-item-quadmenu'];
547
548 if (!empty($args['menu-item-columns'])) {
549 $saved_settings['columns'] = $args['menu-item-columns'];
550 }
551
552 update_post_meta($menu_item_db_id, QUADMENU_DB_KEY, $saved_settings);
553 }
554 }
555
556 }
557
558 new QuadMenu_Ajax();
559