PluginProbe
QuadMenu – Mega Menu / 2.0.0
QuadMenu – Mega Menu v2.0.0
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 / frontend / integration.php

integration.php in QuadMenu – Mega Menu 2.0.0, at includes/frontend/integration.php

279 lines 7.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 if (!defined('ABSPATH')) {
4 die('-1');
5 }
6
7 add_shortcode('quadmenu', 'quadmenu_shortcode');
8
9 add_filter('quadmenu_get_nav_menu_args', 'quadmenu_add_nav_menu_theme', 10);
10 add_filter('quadmenu_get_nav_menu_args', 'quadmenu_add_nav_menu_theme_options', 20);
11 add_filter('quadmenu_get_nav_menu_args', 'quadmenu_add_nav_menu_location_options', 20);
12 add_filter('quadmenu_get_nav_menu_args', 'quadmenu_add_nav_menu_classes', 30);
13 add_filter('quadmenu_get_nav_menu_args', 'quadmenu_add_nav_menu_template', 40);
14
15 add_filter('wp_nav_menu_args', 'quadmenu_auto_nav_menu_args', 100000, 1);
16 add_filter('wp_nav_menu', 'quadmenu_lazyload', 1, 2); //5 before customizer
17 add_filter('wp_nav_menu', 'quadmenu_layout', 5, 2); //5 before customizer
18
19 function quadmenu_shortcode($atts = array()) {
20
21 extract(shortcode_atts(
22 array(
23 'echo' => 'true',
24 'theme' => '',
25 'theme_location' => '',
26 ), $atts
27 )
28 );
29
30 $args = array(
31 'echo' => $echo == 'false' ? false : true,
32 'theme' => $theme,
33 'theme_location' => '',
34 'sticky' => 0,
35 );
36
37 return quadmenu($args);
38 }
39
40 function quadmenu($args = array()) {
41
42 //Removes the filder in all functions
43 //remove_filter('wp_nav_menu_args', 'quadmenu_auto_nav_menu_args', 100000);
44 //$args = quadmenu_get_nav_menu_args($args);
45
46 $defaults = array(
47 'manual' => true,
48 );
49
50 $args = wp_parse_args($args, $defaults);
51
52 return wp_nav_menu($args);
53 }
54
55 function quadmenu_auto_nav_menu_args($args) {
56
57 if (!empty($args['manual']) || (!empty($args['theme_location']) && is_quadmenu_location($args['theme_location']))) {
58
59 $args = quadmenu_get_nav_menu_args($args);
60
61 //remove_all_filters('wp_nav_menu');
62 remove_all_filters('walker_nav_menu_start_el');
63 remove_all_filters('nav_menu_link_attributes');
64 remove_all_filters('wp_nav_menu_objects');
65 remove_all_filters('wp_nav_menu_items', 60);
66 remove_all_filters('wp_nav_menu_args', 60);
67 }
68
69 return $args;
70 }
71
72 function quadmenu_layout($nav_menu, $args) {
73
74 if (!empty($args->menu_template)) {
75
76 $args->menu_items = $nav_menu;
77
78 ob_start();
79
80 quadmenu_get_template($args->menu_template, $args);
81
82 $nav_menu = ob_get_clean();
83 }
84
85 return $nav_menu;
86 }
87
88 function quadmenu_lazyload($nav_menu, $args) {
89
90 if (!empty($args->layout_lazyload)) {
91
92 $lazy_menu = preg_replace_callback('/<img .*?>/', function($matches) {
93 return preg_replace(array('/\bsrc\s*=\s*[\'"](.*?)[\'"]/', '/\bsrcset\s*=\s*[\'"](.*?)[\'"]/'), array('data-src="$1"', 'data-srcset="$1"'), $matches[0]);
94 }, $nav_menu);
95
96 return $lazy_menu;
97 }
98
99 return $nav_menu;
100 }
101
102 function quadmenu_get_nav_menu_args($args = array()) {
103
104 static $instance = 0;
105
106 $defaults = array(
107 'echo' => true,
108 'instance' => '',
109 'menu' => '',
110 'theme' => '',
111 'theme_location' => '',
112 );
113
114 $args = wp_parse_args($args, $defaults);
115
116 //var_dump($args);
117 // WP
118 // -------------------------------------------------------------------------
119 $args['depth'] = 99;
120
121 $args['container'] = false;
122
123 $args['items_wrap'] = '<ul class="%2$s">%3$s</ul>';
124
125 $args['walker'] = new QuadMenuWalker;
126
127 $args['id'] = $instance;
128
129 $args['target_id'] = 'quadmenu_' . $instance;
130
131 $args['fallback_cb'] = 'QuadMenuWalker::fallback';
132
133 $instance++;
134
135 return apply_filters('quadmenu_get_nav_menu_args', $args);
136 }
137
138 function quadmenu_add_nav_menu_theme($args) {
139
140 if ($args['theme'] == '' && isset($args['theme_location'])) {
141 $args['theme'] = quadmenu_get_menu_theme($args['theme_location']);
142 }
143
144 return $args;
145 }
146
147 function quadmenu_add_nav_menu_theme_options($args) {
148
149 static $sticky;
150
151 global $quadmenu;
152
153 $opts = array();
154
155 foreach ($quadmenu as $key => &$val) {
156 if (!empty($args['theme']) && strpos($key, $args['theme']) !== false) {
157 $opts[str_replace("{$args['theme']}_", '', $key)] = $val;
158 }
159 }
160
161 $opts['layout_width_inner_selector'] = $opts['layout_width_inner'] ? $opts['layout_width_inner_selector'] : '';
162
163 if ($opts['layout_sticky'] > 0) {
164 $sticky++;
165 }
166
167 $opts['layout_sticky'] = (int) $sticky > 1 ? 0 : $opts['layout_sticky'];
168
169 return wp_parse_args($args, $opts);
170 }
171
172 function quadmenu_add_nav_menu_location_options($args) {
173
174 global $quadmenu;
175
176 $args['unwrap'] = 0;
177
178 if (isset($args['theme_location']) && isset($quadmenu[$args['theme_location'] . '_unwrap'])) {
179 $args['unwrap'] = $quadmenu[$args['theme_location'] . '_unwrap'];
180 }
181
182
183 return $args;
184 }
185
186 function quadmenu_add_nav_menu_template($args) {
187
188 $defaults = array(
189 'layout' => 'alert',
190 );
191
192 $args = wp_parse_args($args, $defaults);
193
194 $args['menu_template'] = apply_filters('quadmenu_add_nav_menu_template', "layout/{$args['layout']}.php", $args['layout'], $args);
195
196 return $args;
197 }
198
199 function quadmenu_add_nav_menu_classes($args) {
200
201 $args['menu_class'] = 'quadmenu-navbar-nav';
202
203 $classes = array();
204
205 $classes[] = 'quadmenu-' . $args['theme'];
206 $classes[] = 'quadmenu-v' . QUADMENU_PLUGIN_VERSION;
207 $classes[] = 'quadmenu-align-' . $args['layout_align'];
208 $classes[] = 'quadmenu-divider-' . $args['layout_divider'];
209 $classes[] = 'quadmenu-carets-' . $args['layout_caret'];
210 $classes[] = 'quadmenu-background-' . $args['navbar_background'];
211 $classes[] = 'quadmenu-mobile-shadow-' . $args['mobile_shadow'];
212 $classes[] = 'quadmenu-dropdown-shadow-' . $args['dropdown_shadow'];
213
214 if (in_array(sanitize_key($args['layout']), array('offcanvas', 'vertical'))) {
215 $classes[] = 'quadmenu-offcanvas-' . $args['layout_offcanvas_float'];
216 }
217
218 if (!empty($args['layout_hover_effect'])) {
219 $classes[] = $args['layout_hover_effect'];
220 }
221
222 if (!empty($args['layout_classes'])) {
223 $classes[] = $args['layout_classes'];
224 }
225
226 $args['navbar_class'] = join(' ', array_map('esc_attr', $classes));
227
228 return $args;
229 }
230
231 function quadmenu_get_template($template_name, $args = array(), $template_path = '', $default_path = '') {
232
233 if ($args && is_array($args)) {
234 extract($args);
235 }
236
237 $located = quadmenu_locate_template($template_name, $template_path, $default_path, $args);
238
239 if (!file_exists($located)) {
240 _doing_it_wrong(__FUNCTION__, sprintf('<code>%s</code> does not exist.', $located), '2.1');
241 return;
242 }
243 // Allow 3rd party plugin filter template file from their plugin
244 $located = apply_filters('quadmenu_get_template', $located, $template_name, $args, $template_path, $default_path);
245
246 include( $located );
247 }
248
249 function quadmenu_locate_template($template_name, $template_path = '', $default_path = '', $args = null) {
250
251 if (!$template_path) {
252 $template_path = quadmenu_layout_path();
253 }
254
255 if (!$default_path) {
256 $default_path = QUADMENU_PLUGIN_DIR . 'templates/';
257 }
258
259 // Look within passed path within the theme - this is priority
260 $template = locate_template(
261 array(
262 trailingslashit($template_path) . $template_name,
263 $template_name
264 )
265 );
266
267 // Get default template
268 if (!$template) {
269 $template = $default_path . $template_name;
270 }
271
272 // Return what we found
273 return apply_filters('quadmenu_locate_template', $template, $template_name, $template_path, $default_path, $args);
274 }
275
276 function quadmenu_layout_path($slash = false) {
277 return apply_filters('quadmenu_layout_path', 'quadmenu') . ( $slash ? '/' : '' );
278 }
279