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
quadmenu / lib / frontend / class-integration.php

class-integration.php in QuadMenu – Mega Menu trunk, at lib/frontend/class-integration.php

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