PluginProbe
QuadMenu – Mega Menu / 1.8.7
QuadMenu – Mega Menu v1.8.7
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 1.8.7, at includes/frontend/integration.php

274 lines 7.2 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_items', 60);
62 remove_all_filters('wp_nav_menu_args', 60);
63 }
64
65 return $args;
66 }
67
68 function quadmenu_layout($nav_menu, $args) {
69
70 if (!empty($args->menu_template)) {
71
72 $args->menu_items = $nav_menu;
73
74 ob_start();
75
76 quadmenu_get_template($args->menu_template, $args);
77
78 $nav_menu = ob_get_clean();
79 }
80
81 return $nav_menu;
82 }
83
84 function quadmenu_lazyload($nav_menu, $args) {
85
86 if (!empty($args->layout_lazyload)) {
87
88 $lazy_menu = preg_replace_callback('/<img .*?>/', function($matches) {
89 return preg_replace(array('/\bsrc\s*=\s*[\'"](.*?)[\'"]/', '/\bsrcset\s*=\s*[\'"](.*?)[\'"]/'), array('data-src="$1"', 'data-srcset="$1"'), $matches[0]);
90 }, $nav_menu);
91
92 return $lazy_menu;
93 }
94
95 return $nav_menu;
96 }
97
98 function quadmenu_get_nav_menu_args($args = array()) {
99
100 static $instance = 0;
101
102 $defaults = array(
103 'echo' => true,
104 'instance' => '',
105 'menu' => '',
106 'theme' => '',
107 'theme_location' => '',
108 );
109
110 $args = wp_parse_args($args, $defaults);
111
112 // WP
113 // -------------------------------------------------------------------------
114 $args['depth'] = 99;
115
116 $args['container'] = false;
117
118 $args['items_wrap'] = '<ul class="%2$s">%3$s</ul>';
119
120 $args['walker'] = new QuadMenuWalker;
121
122 $args['id'] = $instance;
123
124 $args['target_id'] = 'quadmenu_' . $instance;
125
126 $args['fallback_cb'] = 'QuadMenuWalker::fallback';
127
128 $instance++;
129
130 return apply_filters('quadmenu_get_nav_menu_args', $args);
131 }
132
133 function quadmenu_add_nav_menu_theme($args) {
134
135 if ($args['theme'] == '' && isset($args['theme_location'])) {
136 $args['theme'] = quadmenu_get_menu_theme($args['theme_location']);
137 }
138
139 return $args;
140 }
141
142 function quadmenu_add_nav_menu_theme_options($args) {
143
144 static $sticky;
145
146 global $quadmenu;
147
148 $opts = array();
149
150 foreach ($quadmenu as $key => &$val) {
151 if (!empty($args['theme']) && strpos($key, $args['theme']) !== false) {
152 $opts[str_replace("{$args['theme']}_", '', $key)] = $val;
153 }
154 }
155
156 $opts['layout_width_inner_selector'] = $opts['layout_width_inner'] ? $opts['layout_width_inner_selector'] : '';
157
158 if ($opts['layout_sticky'] > 0) {
159 $sticky++;
160 }
161
162 $opts['layout_sticky'] = (int) $sticky > 1 ? 0 : $opts['layout_sticky'];
163
164 return wp_parse_args($args, $opts);
165 }
166
167 function quadmenu_add_nav_menu_location_options($args) {
168
169 global $quadmenu;
170
171 $args['unwrap'] = 0;
172
173 if (isset($args['theme_location']) && isset($quadmenu[$args['theme_location'] . '_unwrap'])) {
174 $args['unwrap'] = $quadmenu[$args['theme_location'] . '_unwrap'];
175 }
176
177
178 return $args;
179 }
180
181 function quadmenu_add_nav_menu_template($args) {
182
183 $defaults = array(
184 'layout' => 'alert',
185 );
186
187 $args = wp_parse_args($args, $defaults);
188
189 $args['menu_template'] = apply_filters('quadmenu_add_nav_menu_template', "layout/{$args['layout']}.php", $args['layout'], $args);
190
191 return $args;
192 }
193
194 function quadmenu_add_nav_menu_classes($args) {
195
196 $args['menu_class'] = 'quadmenu-navbar-nav';
197
198 $classes = array();
199
200 $classes[] = 'quadmenu-' . $args['theme'];
201 $classes[] = 'quadmenu-v' . QUADMENU_VERSION;
202 $classes[] = 'quadmenu-align-' . $args['layout_align'];
203 $classes[] = 'quadmenu-divider-' . $args['layout_divider'];
204 $classes[] = 'quadmenu-carets-' . $args['layout_caret'];
205 $classes[] = 'quadmenu-background-' . $args['navbar_background'];
206 $classes[] = 'quadmenu-mobile-shadow-' . $args['mobile_shadow'];
207 $classes[] = 'quadmenu-dropdown-shadow-' . $args['dropdown_shadow'];
208
209 if (in_array(sanitize_key($args['layout']), array('offcanvas', 'vertical'))) {
210 $classes[] = 'quadmenu-offcanvas-' . $args['layout_offcanvas_float'];
211 }
212
213 if (!empty($args['layout_hover_effect'])) {
214 $classes[] = $args['layout_hover_effect'];
215 }
216
217 if (!empty($args['layout_classes'])) {
218 $classes[] = $args['layout_classes'];
219 }
220
221 $args['navbar_class'] = join(' ', array_map('esc_attr', $classes));
222
223 return $args;
224 }
225
226 function quadmenu_get_template($template_name, $args = array(), $template_path = '', $default_path = '') {
227
228 if ($args && is_array($args)) {
229 extract($args);
230 }
231
232 $located = quadmenu_locate_template($template_name, $template_path, $default_path, $args);
233
234 if (!file_exists($located)) {
235 _doing_it_wrong(__FUNCTION__, sprintf('<code>%s</code> does not exist.', $located), '2.1');
236 return;
237 }
238 // Allow 3rd party plugin filter template file from their plugin
239 $located = apply_filters('quadmenu_get_template', $located, $template_name, $args, $template_path, $default_path);
240
241 include( $located );
242 }
243
244 function quadmenu_locate_template($template_name, $template_path = '', $default_path = '', $args = null) {
245
246 if (!$template_path) {
247 $template_path = quadmenu_layout_path();
248 }
249
250 if (!$default_path) {
251 $default_path = QUADMENU_PATH . 'templates/';
252 }
253
254 // Look within passed path within the theme - this is priority
255 $template = locate_template(
256 array(
257 trailingslashit($template_path) . $template_name,
258 $template_name
259 )
260 );
261
262 // Get default template
263 if (!$template) {
264 $template = $default_path . $template_name;
265 }
266
267 // Return what we found
268 return apply_filters('quadmenu_locate_template', $template, $template_name, $template_path, $default_path, $args);
269 }
270
271 function quadmenu_layout_path($slash = false) {
272 return apply_filters('quadmenu_layout_path', 'quadmenu') . ( $slash ? '/' : '' );
273 }
274