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

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