PluginProbe
QuadMenu – Mega Menu / trunk
QuadMenu – Mega Menu vtrunk
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
← All changes | quadmenu.php +69 -573 1.9.3trunk View file →
@@ -1,582 +1,78 @@
1 1 <?php
2 2
3 -/*
4 - * Plugin Name: QuadMenu
5 - * Plugin URI: https://www.quadmenu.com
6 - * Description: The best drag & drop WordPress Mega Menu plugin which allow you to create Tabs Menus & Carousel Menus.
7 - * Version: 1.9.3
8 - * Author: Mega Menu
9 - * Author URI: https://www.quadmenu.com
10 - * Copyright: 2018 QuadMenu (https://www.quadmenu.com)
11 - * Text Domain: quadmenu
3 +/**
4 + * Plugin Name: QuadMenu
5 + * Plugin URI: https://quadmenu.com
6 + * Description: The best drag & drop WordPress Mega Menu plugin which allow you to create Tabs Menus & Carousel Menus.
7 + * Version: 3.3.7
8 + * Text Domain: quadmenu
9 + * Author: QuadLayers
10 + * Author URI: https://quadlayers.com
11 + * License: GPLv3
12 + * Domain Path: /languages
13 + * Request at least: 4.7.0
14 + * Tested up to: 7.1
15 + * Requires PHP: 5.6
16 + * WC requires at least: 4.0
17 + * WC tested up to: 11.0
12 18 */
13 19
14 -if (!defined('ABSPATH')) {
15 - die('-1');
20 +if ( ! defined( 'ABSPATH' ) ) {
21 + die( '-1' );
16 22 }
17 23
18 -if (!class_exists('QuadMenu')) :
24 +define( 'QUADMENU_PLUGIN_NAME', 'QuadMenu' );
25 +define( 'QUADMENU_PLUGIN_VERSION', '3.3.7' );
26 +define( 'QUADMENU_PLUGIN_FILE', __FILE__ );
27 +define( 'QUADMENU_PLUGIN_DIR', __DIR__ . DIRECTORY_SEPARATOR );
28 +define( 'QUADMENU_PLUGIN_URL', plugin_dir_url( QUADMENU_PLUGIN_FILE ) );
29 +define( 'QUADMENU_PLUGIN_BASENAME', plugin_basename( QUADMENU_PLUGIN_FILE ) );
30 +define( 'QUADMENU_PREFIX', 'quadmenu' );
31 +define( 'QUADMENU_WORDPRESS_URL', 'https://wordpress.org/plugins/quadmenu/' );
32 +define( 'QUADMENU_REVIEW_URL', 'https://wordpress.org/support/plugin/quadmenu/reviews/?filter=5#new-post' );
33 +define( 'QUADMENU_GROUP_URL', 'https://www.facebook.com/groups/quadlayers' );
34 +define( 'QUADMENU_DB_THEME', '_quadmenu_theme' );
35 +define( 'QUADMENU_DB_ITEM', '_menu_item_quadmenu' );
36 +define( 'QUADMENU_DEV', true );
37 +define( 'QUADMENU_COMPILE', true );
38 +// Pro compatibility
39 +define( 'QUADMENU_DOMAIN', 'quadmenu' );
40 +define( 'QUADMENU_PATH', QUADMENU_PLUGIN_DIR );
41 +define( 'QUADMENU_DEMO', 'https://quadmenu.com/demo-corporate/' );
19 42
20 - final class QuadMenu {
43 +/**
44 + * Load composer autoload
45 + */
46 +require_once __DIR__ . '/vendor/autoload.php';
47 +/**
48 + * Load compatibility
49 + */
50 +require_once __DIR__ . '/compatibility/old.php';
51 +/**
52 + * Load vendor_packages packages
53 + */
54 +require_once __DIR__ . '/vendor_packages/wp-i18n-map.php';
55 +require_once __DIR__ . '/vendor_packages/wp-dashboard-widget-news.php';
56 +require_once __DIR__ . '/vendor_packages/wp-plugin-table-links.php';
57 +require_once __DIR__ . '/vendor_packages/wp-notice-plugin-promote.php';
58 +require_once __DIR__ . '/vendor_packages/wp-plugin-suggestions.php';
59 +require_once __DIR__ . '/vendor_packages/wp-plugin-install-tab.php';
60 +require_once __DIR__ . '/vendor_packages/wp-plugin-feedback.php';
61 +/**
62 + * Load plugin classes
63 + */
64 +require_once __DIR__ . '/lib/class-plugin.php';
21 65
22 - private $prefix = '#quadmenu-';
23 - private static $instance;
24 - private static $registered_icons;
25 - private static $registered_icons_names;
26 - public static $selected_icons;
66 +register_activation_hook( __FILE__, array( 'QuadLayers\\QuadMenu\\Activation', 'activation' ) );
27 67
28 - public static function instance() {
29 - if (!isset(self::$instance)) {
30 - self::$instance = new QuadMenu;
31 - self::$instance->constants();
32 - self::$instance->config();
33 - self::$instance->includes();
34 - self::$instance->compatibility();
35 - self::$instance->hooks();
36 - self::$instance->errors();
37 - }
38 - return self::$instance;
39 - }
40 -
41 - private function config() {
42 - require_once QUADMENU_PATH . 'includes/configuration.php';
43 - }
44 -
45 - private function compatibility() {
46 - require_once QUADMENU_PATH . 'includes/3rd/woocommerce.php';
47 - require_once QUADMENU_PATH . 'includes/3rd/polylang.php';
48 - require_once QUADMENU_PATH . 'includes/3rd/vc.php';
49 - require_once QUADMENU_PATH . 'includes/3rd/elementor.php';
50 - require_once QUADMENU_PATH . 'includes/3rd/beaver.php';
51 - require_once QUADMENU_PATH . 'includes/3rd/divi.php';
52 - require_once QUADMENU_PATH . 'includes/widget.php';
53 - }
54 -
55 - private function hooks() {
56 -
57 - add_filter('wp_get_nav_menu_items', array($this, 'remove_nav_menu_item'), 20, 3);
58 - add_filter('wp_setup_nav_menu_item', array($this, 'setup_nav_menu_item_options'), 90);
59 - add_filter('quadmenu_setup_nav_menu_item', array($this, 'setup_nav_menu_item_parents'), 5);
60 - add_filter('quadmenu_setup_nav_menu_item', array($this, 'setup_nav_menu_item_validation'), 10);
61 -
62 - add_action('init', array($this, 'register_sidebar'));
63 - add_action('init', array($this, 'register_icons'), -35);
64 - add_action('init', array($this, 'admin'), -25);
65 - add_action('init', array($this, 'compiler'), -20);
66 - add_action('init', array($this, 'locations'), -15);
67 - add_action('init', array($this, 'init'), -10);
68 - add_action('init', array($this, 'frontend'), -5);
69 - add_action('admin_init', array($this, 'navmenu'));
70 -
71 - add_action('plugins_loaded', array($this, 'i18n'));
72 - }
73 -
74 - public function register_sidebar() {
75 -
76 - register_sidebar(
77 - array(
78 - 'id' => 'quadmenu-widgets',
79 - 'name' => esc_html__('QuadMenu Widgets', 'quadmenu'),
80 - 'description' => esc_html__('Do not manually edit this sidebar.', 'quadmenu')
81 - )
82 - );
83 - }
84 -
85 - function register_icons() {
86 -
87 - foreach (apply_filters('quadmenu_register_icons', array()) as $id => $settings) {
88 -
89 - //if (!wp_style_is($id, $list = 'registered')) {
90 - // wp_register_style($id, $settings['url']);
91 - // }
92 -
93 - $settings['ID'] = $id;
94 -
95 - self::$registered_icons[$id] = (object) $settings;
96 -
97 - self::$registered_icons_names[$id] = $settings['name'];
98 - }
99 - }
100 -
101 - function registered_icons() {
102 - return (object) self::$registered_icons;
103 - }
104 -
105 - function registered_icons_names() {
106 - return self::$registered_icons_names;
107 - }
108 -
109 - function selected_icons() {
110 -
111 - global $quadmenu;
112 -
113 - if (empty($quadmenu['styles_icons'])) {
114 - self::$selected_icons = $this->registered_icons()->dashicons;
115 - }
116 -
117 - if (empty($this->registered_icons()->{$quadmenu['styles_icons']})) {
118 - self::$selected_icons = $this->registered_icons()->dashicons;
119 - }
120 -
121 - self::$selected_icons = $this->registered_icons()->{$quadmenu['styles_icons']};
122 -
123 - if (!wp_style_is(self::$selected_icons->ID, $list = 'registered')) {
124 - wp_register_style(self::$selected_icons->ID, self::$selected_icons->url);
125 - }
126 -
127 - return self::$selected_icons;
128 - }
129 -
130 - private function theme() {
131 -
132 - $theme = get_stylesheet();
133 -
134 - $theme = preg_replace('/[^a-zA-Z0-9_\-]/', '', $theme);
135 -
136 - return $theme;
137 - }
138 -
139 - private function constants() {
140 -
141 - $upload_dir = wp_upload_dir();
142 -
143 - define('QUADMENU_NAME', 'QuadMenu');
144 -
145 - define('QUADMENU_VERSION', '1.9.3');
146 -
147 - define('QUADMENU_OPTIONS', "quadmenu_{$this->theme()}");
148 -
149 - define('QUADMENU_THEMES', "quadmenu_{$this->theme()}_themes");
150 -
151 - define('QUADMENU_LOCATIONS', "quadmenu_{$this->theme()}_locations");
152 -
153 - define('QUADMENU_THEME_DB_KEY', '_quadmenu_theme');
154 -
155 - define('QUADMENU_DB_KEY', '_menu_item_quadmenu');
156 -
157 - define('QUADMENU_DEV', false);
158 -
159 - define('QUADMENU_COMPILE', true);
160 -
161 - define('QUADMENU_FILE', __FILE__);
162 -
163 - define('QUADMENU_URL', plugin_dir_url(__FILE__));
164 -
165 - define('QUADMENU_PATH', plugin_dir_path(__FILE__));
166 -
167 - define('QUADMENU_BASENAME', plugin_basename(__FILE__));
168 -
169 - define('QUADMENU_BASEDIR', dirname(plugin_basename(__FILE__)));
170 -
171 - define('QUADMENU_URL_ASSETS', QUADMENU_URL . 'assets/');
172 -
173 - define('QUADMENU_PATH_CSS', trailingslashit("{$upload_dir['basedir']}/{$this->theme()}"));
174 -
175 - define('QUADMENU_URL_CSS', set_url_scheme(trailingslashit("{$upload_dir['baseurl']}/{$this->theme()}")));
176 -
177 - define('QUADMENU_PANEL', apply_filters('quadmenu_hook_menu_panel', 'quadmenu_options'));
178 -
179 - define('QUADMENU_DEMO', 'https://quadmenu.com/?utm_source=quadmenu_admin');
180 -
181 - define('QUADMENU_SUPPORT', 'https://quadmenu.com/account/support/?utm_source=quadmenu_admin');
182 -
183 - define('QUADMENU_DOCUMENTATION', 'https://quadmenu.com/documentation/?utm_source=quadmenu_admin');
184 -
185 - define('QUADMENU_VIDEOS', 'https://www.youtube.com/channel/UC4K_eP-dbttJUAC9ToMiKUQ');
186 -
187 - define('QUADMENU_PURCHASE', 'https://quadmenu.com/#pricing?utm_source=quadmenu_admin');
188 -
189 - define('QUADMENU_GROUP', 'https://www.facebook.com/groups/quadlayers/');
190 -
191 - define('QUADMENU_REVIEW', 'https://wordpress.org/support/plugin/quadmenu/reviews/?filter=5#new-post');
192 - }
193 -
194 - private function includes() {
195 -
196 - require_once QUADMENU_PATH . 'includes/functions.php';
197 -
198 - require_once QUADMENU_PATH . 'includes/import.php';
199 -
200 - require_once QUADMENU_PATH . 'includes/activation.php';
201 -
202 - require_once QUADMENU_PATH . 'includes/panel.php';
203 - }
204 -
205 - public function admin() {
206 - require_once QUADMENU_PATH . 'includes/admin.php';
207 - require_once QUADMENU_PATH . 'includes/panel/system.php';
208 - require_once QUADMENU_PATH . 'includes/panel/options.php';
209 - }
210 -
211 - public function locations() {
212 - require_once QUADMENU_PATH . 'includes/locations.php';
213 - }
214 -
215 - public function init() {
216 - require_once QUADMENU_PATH . 'includes/themes.php';
217 - require_once QUADMENU_PATH . 'includes/options.php';
218 - require_once QUADMENU_PATH . 'includes/redux.php';
219 - require_once QUADMENU_PATH . 'includes/icons.php';
220 - }
221 -
222 - public function compiler() {
223 -
224 - if (!is_admin() && !is_customize_preview())
225 - return;
226 -
227 - require_once QUADMENU_PATH . 'includes/compiler.php';
228 - }
229 -
230 - function nav_menu_selected_id() {
231 -
232 - if (wp_doing_ajax() && isset($_REQUEST['menu_id'])) {
233 - return (int) $_REQUEST['menu_id'];
234 - }
235 -
236 - $nav_menus = wp_get_nav_menus(array('orderby' => 'name'));
237 -
238 - $menu_count = count($nav_menus);
239 -
240 - // Get recently edited nav menu
241 - $recently_edited = (int) get_user_option('nav_menu_recently_edited');
242 -
243 - $nav_menu_selected_id = isset($_REQUEST['menu']) ? (int) $_REQUEST['menu'] : 0;
244 -
245 - // Are we on the add new screen?
246 - $add_new_screen = ( isset($_REQUEST['menu']) && 0 == $_REQUEST['menu'] ) ? true : false;
247 -
248 - $page_count = wp_count_posts('page');
249 -
250 - $one_theme_location_no_menus = ( 1 == count(get_registered_nav_menus()) && !$add_new_screen && empty($nav_menus) && !empty($page_count->publish) ) ? true : false;
251 -
252 - if (empty($recently_edited) && is_nav_menu($nav_menu_selected_id))
253 - $recently_edited = $nav_menu_selected_id;
254 -
255 - // Use $recently_edited if none are selected.
256 - if (empty($nav_menu_selected_id) && !isset($_REQUEST['menu']) && is_nav_menu($recently_edited))
257 - $nav_menu_selected_id = $recently_edited;
258 -
259 - // On deletion of menu, if another menu exists, show it.
260 - if (!$add_new_screen && 0 < $menu_count && isset($_REQUEST['action']) && 'delete' == $_REQUEST['action'])
261 - $nav_menu_selected_id = $nav_menus[0]->term_id;
262 -
263 - // Set $nav_menu_selected_id to 0 if no menus.
264 - if ($one_theme_location_no_menus) {
265 - $nav_menu_selected_id = 0;
266 - } elseif (empty($nav_menu_selected_id) && !empty($nav_menus) && !$add_new_screen) {
267 - // if we have no selection yet, and we have menus, set to the first one in the list.
268 - $nav_menu_selected_id = $nav_menus[0]->term_id;
269 - }
270 -
271 - return $nav_menu_selected_id;
272 - }
273 -
274 - function is_quadmenu($nav_menu_selected_id = false) {
275 -
276 - global $quadmenu_active_locations;
277 -
278 - if (!$menu_locations = isset($_REQUEST['menu-locations']) && is_array($_REQUEST['menu-locations']) ? $_REQUEST['menu-locations'] : get_nav_menu_locations()) {
279 - return false;
280 - }
281 -
282 - if (!$nav_menu_selected_id = $this->nav_menu_selected_id()) {
283 - return false;
284 - }
285 -
286 - // chek if this menu id is in the theme locations
287 - if (!in_array(sanitize_key($nav_menu_selected_id), $menu_locations)) {
288 - return false;
289 - }
290 -
291 - if (count(array_intersect(array_keys($menu_locations, $nav_menu_selected_id), array_keys((array) $quadmenu_active_locations))) > 0) {
292 - return true;
293 - }
294 -
295 - return false;
296 - }
297 -
298 - function is_quadmenu_location($location = false) {
299 -
300 - global $quadmenu_active_locations;
301 -
302 - if (!empty($quadmenu_active_locations[$location])) {
303 - return true;
304 - }
305 -
306 - return false;
307 - }
308 -
309 - public function navmenu() {
310 -
311 - if (is_quadmenu()) {
312 -
313 - require_once QUADMENU_PATH . 'includes/backend/settings.php';
314 - require_once QUADMENU_PATH . 'includes/backend/walker/widgets.php';
315 - require_once QUADMENU_PATH . 'includes/backend/walker/columns.php';
316 - require_once QUADMENU_PATH . 'includes/backend/walker/mega.php';
317 - require_once QUADMENU_PATH . 'includes/backend/walker/defaults.php';
318 - require_once QUADMENU_PATH . 'includes/backend/ajax.php';
319 - }
320 - }
321 -
322 - public function frontend() {
323 -
324 - //if (is_admin())
325 - // return;
326 -
327 - require_once QUADMENU_PATH . 'includes/frontend/frontend.php';
328 - require_once QUADMENU_PATH . 'includes/frontend/integration.php';
329 - require_once QUADMENU_PATH . 'includes/frontend/items.php';
330 - }
331 -
332 - public function setup_nav_menu_item_options($item) {
333 -
334 - //if (empty($item->quadmenu)) {
335 - if (isset($item->ID)) {
336 -
337 - $saved_settings = (array) get_post_meta($item->ID, QUADMENU_DB_KEY, true);
338 -
339 - foreach ($saved_settings as $key => $value) {
340 - $item->{$key} = $value;
341 - }
342 -
343 - return apply_filters('quadmenu_setup_nav_menu_item', $item);
344 - }
345 - //}
346 -
347 - return $item;
348 - }
349 -
350 - public function setup_nav_menu_item_parents($item) {
351 -
352 - global $wp_registered_widgets;
353 -
354 - $items = QuadMenu_Configuration::custom_nav_menu_items();
355 -
356 - // Quadmenu
357 - // -----------------------------------------------------------------
358 -
359 - if (strpos($item->url, $this->prefix) !== false) {
360 - $item->quadmenu = str_replace($this->prefix, '', $item->url);
361 - }
362 -
363 - if (isset($item->quadmenu)) {
364 - if (!empty($items->{$item->quadmenu}->label)) {
365 - $item->type_label = '[' . $items->{$item->quadmenu}->label . ']';
366 - }
367 - }
368 -
369 - if (isset($item->quadmenu) && $item->object == 'custom') {
370 - $item->object = $item->quadmenu;
371 - }
372 -
373 - if (!isset($item->quadmenu)) {
374 - $item->quadmenu = $item->type;
375 - }
376 -
377 - // Replace quadmenu with object if defined
378 - // -----------------------------------------------------------------
379 -
380 - if (isset($items->{$item->object})) {
381 - $item->quadmenu = $item->object;
382 - }
383 -
384 - // Replace quadmenu with object post_archive
385 - // -----------------------------------------------------------------
386 - if ($item->type === 'post_type_archive' && isset($items->{$item->object . '_archive'})) {
387 - $item->quadmenu = $item->object . '_archive';
388 - }
389 -
390 - // Parent
391 - // -----------------------------------------------------------------
392 - if (empty($item->quadmenu_menu_item_parent)) {
393 - if (!empty($item->menu_item_parent)) {
394 -
395 - $parent_obj = QuadMenu::wp_setup_nav_menu_item($item->menu_item_parent);
396 -
397 - if (isset($parent_obj->type)) {
398 - //brokes the subitems
399 - //if (!empty($parent_obj->quadmenu)) {
400 - if (isset($parent_obj->quadmenu) && $parent_obj->type === 'custom') {
401 - $item->quadmenu_menu_item_parent = $parent_obj->quadmenu;
402 - } else {
403 - // post_type taxonomy post_type_archive parents
404 - $item->quadmenu_menu_item_parent = $parent_obj->type;
405 - }
406 - }
407 - } else {
408 - $item->quadmenu_menu_item_parent = 'main';
409 - }
410 - }
411 -
412 - // Validation
413 - // -----------------------------------------------------------------
414 -
415 - if (!empty($items->{$item->quadmenu}->parent)) {
416 -
417 - $item->quadmenu_allowed_parents = $items->{$item->quadmenu}->parent;
418 -
419 - // Main
420 - // -----------------------------------------------------------------
421 - if (!is_array($item->quadmenu_allowed_parents) && $item->quadmenu_allowed_parents === 'main') {
422 - $item->menu_item_parent = 0;
423 - $item->quadmenu_menu_item_parent = 'main';
424 - }
425 -
426 - // Invalid
427 - // -----------------------------------------------------------------
428 - if (is_array($item->quadmenu_allowed_parents) && !in_array($item->quadmenu_menu_item_parent, $item->quadmenu_allowed_parents)) {
429 - $item->_invalid = true;
430 - }
431 -
432 - // Invalid
433 - // -----------------------------------------------------------------
434 - if (!is_array($item->quadmenu_allowed_parents) && $item->quadmenu_allowed_parents != $item->quadmenu_menu_item_parent) {
435 - $item->_invalid = true;
436 - }
437 - } else {
438 - $item->quadmenu_allowed_parents = 'all';
439 - }
440 -
441 - if ($item->quadmenu == 'widget' && (empty($item->widget_id) || !isset($wp_registered_widgets[$item->widget_id]))) {
442 - $item->_invalid = true;
443 - }
444 -
445 - return $item;
446 - }
447 -
448 - static function wp_setup_nav_menu_item($ID) {
449 -
450 - $item_obj = wp_cache_get("wp_setup_nav_menu_item_{$ID}", 'quadmenu');
451 -
452 - if ($item_obj === false) {
453 -
454 - $item_obj = get_post($ID);
455 -
456 - if (!empty($item_obj->ID)) {
457 - $item_obj = wp_setup_nav_menu_item($item_obj);
458 - }
459 -
460 - wp_cache_set("wp_setup_nav_menu_item_{$ID}", $item_obj, 'quadmenu');
461 - }
462 -
463 - return $item_obj;
464 - }
465 -
466 - function setup_nav_menu_item_validation($item) {
467 -
468 - if (isset($item->target) && $item->target === 'on') {
469 - $item->target = '_blank';
470 - }
471 -
472 - if (isset($item->target) && $item->target === 'off') {
473 - $item->target = '';
474 - }
475 -
476 - if (isset($item->columns)) {
477 -
478 - //var_dump($item->columns);
479 -
480 - $item->columns = array_diff(array_filter((array) $item->columns), array('off'));
481 - }
482 -
483 - return $item;
484 - }
485 -
486 - public function remove_nav_menu_item($items, $menu, $args) {
487 -
488 - if (is_quadmenu()) {
489 -
490 - foreach ($items as $key => $item) {
491 -
492 - if (!wp_doing_ajax()) {
493 -
494 - // Remove invalid items in frontend
495 - if (!is_admin() && $item->_invalid) {
496 - unset($items[$key]);
497 - }
498 -
499 - // Remove valid quadmenu items
500 - if (is_admin() && !$item->_invalid && in_array(sanitize_key($item->quadmenu_menu_item_parent), apply_filters('quadmenu_remove_nav_menu_item', array('column', 'mega', 'login')))) {
501 - unset($items[$key]);
502 - }
503 -
504 - // Remove invalid items without parent
505 - if (is_admin() && $item->_invalid && !$item->quadmenu_menu_item_parent) {
506 - unset($items[$key]);
507 - }
508 - }
509 - }
510 - }
511 -
512 - return $items;
513 - }
514 -
515 - public function edit_nav_menu_walker($menu_id) {
516 - return 'QuadMenu_Walker_Nav_Menu_Edit';
517 - }
518 -
519 - function i18n() {
520 - load_plugin_textdomain('quadmenu', false, QUADMENU_BASEDIR . '/languages');
521 - }
522 -
523 - public static function taburl($id = 0) {
524 - return admin_url('admin.php?page=' . QUADMENU_PANEL . '&tab=' . $id);
525 - }
526 -
527 - public static function isMin() {
528 - $min = '';
529 -
530 - if (false == QUADMENU_DEV) {
531 - $min = '.min';
532 - }
533 -
534 - return $min;
535 - }
536 -
537 - public static function send_json_success($json) {
538 - if (ob_get_contents())
539 - ob_clean();
540 -
541 - wp_send_json_success($json);
542 - }
543 -
544 - public static function send_json_error($json) {
545 - if (ob_get_contents())
546 - ob_clean();
547 -
548 - wp_send_json_error($json);
549 - }
550 -
551 - private function errors() {
552 -
553 - if (!QUADMENU_DEV)
554 - return;
555 -
556 - ini_set('error_reporting', E_ALL);
557 - ini_set('display_errors', 1);
558 - ini_set('display_startup_errors', 1);
559 - }
560 -
561 - }
562 -
563 - endif; // End if class_exists check
564 -
565 -if (!function_exists('_QuadMenu')) {
566 -
567 - function _QuadMenu() {
568 - return QuadMenu::instance();
569 - }
570 -
571 - _QuadMenu();
572 -}
573 -
574 -if (!function_exists('is_quadmenu_location')) {
575 -
576 - function is_quadmenu_location($location = false) {
577 - return QuadMenu::instance()->is_quadmenu_location($location);
578 - }
579 -
580 -}
581 -
582 -register_activation_hook(__FILE__, array('QuadMenu_Activation', 'activation'));
68 +/**
69 + * Declarate compatibility with WooCommerce Custom Order Tables
70 + */
71 +add_action(
72 + 'before_woocommerce_init',
73 + function () {
74 + if ( class_exists( '\Automattic\WooCommerce\Utilities\FeaturesUtil' ) ) {
75 + \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'custom_order_tables', __FILE__, true );
76 + }
77 + }
78 +);