PluginProbe
WP Bottom Menu / 1.2
WP Bottom Menu v1.2
trunk 1.0 1.0.1 1.0.2 1.0.3 1.0.4 1.1 1.1.1 1.1.2 1.2 1.3 1.3.2 1.4 1.4.2 1.4.3 2.0 2.0.1 2.1 2.1.1 2.1.2 2.1.3 2.1.4 2.2 2.2.1 2.2.2 All 27 releases
wp-bottom-menu / wp-bottom-menu.php

wp-bottom-menu.php in WP Bottom Menu 1.2, at wp-bottom-menu.php

495 lines 23.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Plugin Name: WP Bottom Menu
4 * Description: WP Bottom Menu allows you to add a woocommerce supported bottom menu to your site.
5 * Version: 1.2
6 * Author: J4
7 * Author URI: https://j4cob.net
8 * License: GPL v2 or later
9 * License URI: https://www.gnu.org/licenses/gpl-2.0.html
10 * Text Domain: wp-bottom-menu
11 * Domain Path: /languages
12 *
13 * WP Bottom Menu is free software: you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation, either version 2 of the License, or
16 * any later version.
17 *
18 * WP Bottom Menu is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
22 */
23
24 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
25
26 define( 'WP_BOTTOM_MENU_VERSION', '1.2' );
27 define( 'WP_BOTTOM_MENU_DIR_URL', plugin_dir_url( __FILE__ ) );
28 define( 'WP_BOTTOM_MENU_DIR_PATH', plugin_dir_path( __FILE__ ) );
29
30
31 if ( class_exists( 'WPBottomMenu' ) ){
32 $wpbottommenu = new WPBottomMenu;
33 }
34
35 class WPBottomMenu{
36
37 public function __construct() {
38 $this->includes();
39 $this->_hooks();
40 }
41
42 function _hooks(){
43 add_action( 'wp_enqueue_scripts', array( $this, 'add_theme_scripts' ) );
44 add_action( 'wp_footer', array($this, 'wp_bottom_menu' ) );
45 add_action( 'customize_register', array($this, 'wp_bottom_menu_customize_register' ) );
46 add_action( 'wp_footer', array($this, 'wpbottommenu_customize_css') );
47 add_filter( 'plugin_action_links', array($this, 'wp_bottom_menu_action_links'), 10, 2 );
48 if (class_exists( 'WooCommerce' )){
49 add_filter( 'woocommerce_add_to_cart_fragments', array($this, 'wp_bottom_menu_add_to_cart_fragment'), 10, 1 );
50 }
51 }
52
53 function includes(){
54 require_once(WP_BOTTOM_MENU_DIR_PATH.'inc/customizer-repeater/functions.php');
55 }
56
57 // enqueue scripts
58 function add_theme_scripts() {
59 wp_enqueue_style( 'wp-bottom-menu-style', WP_BOTTOM_MENU_DIR_URL . 'inc/style.css', array(), WP_BOTTOM_MENU_VERSION, 'all');
60 wp_enqueue_script( 'wp-bottom-menu-js', WP_BOTTOM_MENU_DIR_URL . 'inc/main.js', array(), WP_BOTTOM_MENU_VERSION, true);
61 if(get_option( 'wpbottommenu_iconset', 'fontawesome' ) == 'fontawesome'){
62 wp_enqueue_style( 'font-awesome', WP_BOTTOM_MENU_DIR_URL . 'inc/customizer-repeater/css/font-awesome.min.css', array(), CUSTOMIZER_REPEATER_VERSION );
63 }
64 }
65
66 // wp bottom menu
67 function wp_bottom_menu() {
68 ?>
69 <div class="wp-bottom-menu" id="wp-bottom-menu">
70
71 <?php
72 $customizer_repeater_wpbm = get_option('customizer_repeater_wpbm', json_encode( array(
73 array("choice" => "wpbm-homepage" ,"subtitle" => "fa-home", "title" => "Home", "id" => "customizer_repeater_1" ),
74 array("choice" => "wpbm-woo-account" ,"subtitle" => "fa-user", "title" => "Account", "id" => "customizer_repeater_2" ),
75 array("choice" => "wpbm-woo-cart" ,"subtitle" => "fa-shopping-cart", "title" => "Cart", "id" => "customizer_repeater_3" ),
76 array("choice" => "wpbm-woo-search" ,"subtitle" => "fa-search", "title" => "Search", "id" => "customizer_repeater_4" ),
77 ) ) );
78 /*This returns a json so we have to decode it*/
79
80 $customizer_repeater_wpbm_decoded = json_decode($customizer_repeater_wpbm);
81 $wpbmsf;
82 foreach($customizer_repeater_wpbm_decoded as $repeater_item){
83
84 if($repeater_item->choice == "wpbm-woo-search" or $repeater_item->choice == "wpbm-post-search"):?>
85 <a href="javascript:void(0);" title="<?php echo $repeater_item->title; ?>" class="wp-bottom-menu-item wp-bottom-menu-search-form-trigger">
86 <?php else: ?>
87 <a href="<?php
88 switch($repeater_item->choice){
89 case "wpbm-homepage":
90 echo esc_url( home_url() );
91 break;
92 case "wpbm-woo-cart":
93 if ( class_exists( 'WooCommerce' ) ) {
94 echo esc_url( wc_get_page_permalink( 'cart' ) );
95 } else {
96 echo '#';
97 }
98 break;
99 case "wpbm-woo-account":
100 if ( class_exists( 'WooCommerce' ) ) {
101 echo esc_url( wc_get_page_permalink( 'myaccount' ) );
102 } else {
103 echo '#';
104 }
105 break;
106
107 default:
108 echo esc_url( $repeater_item->link );
109 }
110 ?>" class="wp-bottom-menu-item">
111 <?php endif; ?>
112
113 <div class="wp-bottom-menu-icon-wrapper">
114 <?php if(get_option( 'wpbottommenu_show_cart_count', false )): ?>
115 <?php if ( class_exists( 'WooCommerce' ) and $repeater_item->choice == "wpbm-woo-cart") : ?>
116 <div class="wp-bottom-menu-cart-count"><?php echo WC()->cart->get_cart_contents_count(); ?></div>
117 <?php endif; ?>
118 <?php endif; ?>
119
120 <?php if(get_option( 'wpbottommenu_iconset', 'fontawesome' ) == 'fontawesome'): ?>
121 <i class="wp-bottom-menu-item-icons fa <?php echo $repeater_item->subtitle; ?>"></i>
122 <?php else: ?>
123 <?php echo html_entity_decode($repeater_item->subtitle); ?>
124 <?php endif; ?>
125 </div>
126 <?php if(!get_option( 'wpbottommenu_disable_title', false )): ?>
127 <?php if(get_option( 'wpbottommenu_show_cart_total', false ) and $repeater_item->choice == "wpbm-woo-cart" and class_exists( 'WooCommerce' )): ?>
128 <span class="wp-bottom-menu-cart-total"><?php WC()->cart->get_cart_total(); ?></span>
129 <?php else: ?>
130 <span><?php echo $repeater_item->title; ?></span>
131 <?php endif; ?>
132 <?php endif; ?>
133
134 </a>
135 <?php
136 $wpbmsf = $repeater_item->choice;
137
138 }
139 ?>
140 </div>
141
142 <div class="wp-bottom-menu-search-form-wrapper" id="wp-bottom-menu-search-form-wrapper">
143 <form role="search" method="get" action="<?php echo esc_url( home_url( '/' ) ); ?>" class="wp-bottom-menu-search-form">
144 <i class="fa fa-search"></i>
145 <input type="hidden" name="post_type" value="<?php if($wpbmsf=="wpbm-woo-search" and class_exists( 'WooCommerce' )) echo esc_attr("product"); else echo esc_attr("post"); ?>" />
146 <input type="search" class="search-field" placeholder="<?php if(get_option( 'wpbottommenu_placeholder_text', 'Search' )) echo get_option( 'wpbottommenu_placeholder_text', 'Search' ); else echo esc_attr_x( 'Search', 'wp-bottom-menu' ); ?>" value="<?php echo get_search_query(); ?>" name="s" />
147 </form>
148 </div><?php
149
150 }
151 // customizer api
152 function wp_bottom_menu_customize_register( $wp_customize ) {
153
154 // Add Theme Options Panel.
155 $wp_customize->add_panel( 'wpbottommenu_panel',
156 array(
157 'title' => esc_html__( 'WP Bottom Menu', 'wp-bottom-menu' ),
158 'priority' => 20
159 )
160 );
161
162 //
163 // Section: Settings
164 //
165
166 $wp_customize->add_section( 'wpbottommenu_section_settings', array(
167 'title' => esc_html__( 'Settings', 'wp-bottom-menu' ),
168 'priority' => 120,
169 'panel' => 'wpbottommenu_panel',
170 ));
171
172 $wp_customize->add_setting( 'wpbottommenu_iconset', array(
173 'default' => 'fontawesome',
174 'type' => 'option',
175 ) );
176
177 $wp_customize->add_control( 'wpbottommenu_iconset', array(
178 'type' => 'select',
179 'section' => 'wpbottommenu_section_settings',
180 'label' => __( 'Select Icon Type', 'wp-bottom-menu' ),
181 'description' => __( '<u>Custom SVG:</u> Paste SVG Icon code.<br><u>FontAwesome:</u> Enable FontAwesome Library.', 'wp-bottom-menu' ),
182 'choices' => array(
183 'svg' => __( 'Custom SVG' ),
184 'fontawesome' => __( 'FontAwesome (v4.7)' ),
185 ),
186 ) );
187
188 $wp_customize->add_setting( 'wpbottommenu_display_px' , array(
189 'default' => '1024',
190 'type' => 'option',
191 ));
192
193 $wp_customize->add_control('wpbottommenu_display_px', array(
194 'label' => __( 'Active The Menu (px)', 'wp-bottom-menu' ),
195 'section' => 'wpbottommenu_section_settings',
196 'settings' => 'wpbottommenu_display_px',
197 'type' => 'number',
198 ));
199
200 $wp_customize->add_setting( 'wpbottommenu_display_always' , array(
201 'default' => false,
202 'type' => 'option',
203 ));
204
205 $wp_customize->add_control('wpbottommenu_display_always', array(
206 'label' => __( 'Active for any screen size?', 'wp-bottom-menu' ),
207 'section' => 'wpbottommenu_section_settings',
208 'settings' => 'wpbottommenu_display_always',
209 'type' => 'checkbox',
210 ));
211
212 $wp_customize->add_setting( 'wpbottommenu_zindex' , array(
213 'default' => '9999',
214 'type' => 'option',
215 ));
216
217 $wp_customize->add_control('wpbottommenu_zindex', array(
218 'label' => __( 'Menu Z-Index', 'wp-bottom-menu' ),
219 'description' => esc_html__( 'Recommended value: 9999', 'wp-bottom-menu' ),
220 'section' => 'wpbottommenu_section_settings',
221 'settings' => 'wpbottommenu_zindex',
222 'type' => 'number',
223 ));
224
225 //
226 // Section: Customize
227 //
228
229 $wp_customize->add_section('wpbottommenu_section_customize', array(
230 'title' => __('Customize', 'wp-bottom-menu'),
231 'priority' => 130,
232 'panel' => 'wpbottommenu_panel'
233 ));
234
235 $wp_customize->add_setting( 'wpbottommenu_placeholder_text' , array(
236 'default' => 'Search',
237 'type' => 'option',
238 ));
239
240 $wp_customize->add_control( 'wpbottommenu_placeholder_text', array(
241 'label' => __( 'Search Input Placeholder Text', 'wp-bottom-menu' ),
242 'section' => 'wpbottommenu_section_customize',
243 'settings' => 'wpbottommenu_placeholder_text',
244 'type' => 'text',
245 ));
246
247 $wp_customize->add_setting( 'wpbottommenu_fontsize' , array(
248 'default' => '12',
249 'type' => 'option',
250 ));
251
252 $wp_customize->add_control( 'wpbottommenu_fontsize', array(
253 'label' => __( 'Menu Font Size (px)', 'wp-bottom-menu' ),
254 'section' => 'wpbottommenu_section_customize',
255 'settings' => 'wpbottommenu_fontsize',
256 'type' => 'number',
257 ));
258
259 $wp_customize->add_setting( 'wpbottommenu_iconsize' , array(
260 'default' => '24',
261 'type' => 'option',
262 ));
263
264 $wp_customize->add_control( 'wpbottommenu_iconsize', array(
265 'label' => __( 'Menu Icon Size (px)', 'wp-bottom-menu' ),
266 'section' => 'wpbottommenu_section_customize',
267 'settings' => 'wpbottommenu_iconsize',
268 'type' => 'number',
269 ));
270
271 $wp_customize->add_setting( 'wpbottommenu_iconcolor', array(
272 'default' => '#000000',
273 'section' => 'wpbottommenu_section_customize',
274 'sanitize_callback' => 'sanitize_hex_color',
275 'type' => 'option'
276 ));
277
278 $wp_customize->add_setting( 'wpbottommenu_textcolor', array(
279 'default' => '#000000',
280 'section' => 'wpbottommenu_section_customize',
281 'sanitize_callback' => 'sanitize_hex_color',
282 'type' => 'option'
283 ));
284
285 $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'wpbottommenu_textcolor', array(
286 'label' => __( 'Menu Text Color', 'wp-bottom-menu' ),
287 'section' => 'wpbottommenu_section_customize',
288 )));
289
290 $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'wpbottommenu_iconcolor', array(
291 'label' => __( 'Menu Icon Color', 'wp-bottom-menu' ),
292 'section' => 'wpbottommenu_section_customize',
293 )));
294
295 $wp_customize->add_setting( 'wpbottommenu_bgcolor', array(
296 'default' => '#ffffff',
297 'section' => 'wpbottommenu_section_customize',
298 'sanitize_callback' => 'sanitize_hex_color',
299 'type' => 'option'
300 ));
301
302 $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'wpbottommenu_bgcolor', array(
303 'label' => __( 'Menu Background Color', 'wp-bottom-menu' ),
304 'section' => 'wpbottommenu_section_customize',
305 )));
306
307 $wp_customize->add_setting( 'wpbottommenu_disable_title' , array(
308 'default' => false,
309 'type' => 'option',
310 ));
311
312 $wp_customize->add_control('wpbottommenu_disable_title', array(
313 'label' => __( 'Disable title?', 'wp-bottom-menu' ),
314 'section' => 'wpbottommenu_section_customize',
315 'settings' => 'wpbottommenu_disable_title',
316 'type' => 'checkbox',
317 ));
318
319 $wp_customize->add_setting( 'wpbottommenu_cart_separator' , array(
320 'type' => 'option',
321 ));
322
323 $wp_customize->add_control('wpbottommenu_cart_separator', array(
324 'label' => __( 'Customize Cart Item', 'wp-bottom-menu' ),
325 'section' => 'wpbottommenu_section_customize',
326 'settings' => 'wpbottommenu_cart_separator',
327 'type' => 'hidden',
328 ));
329
330 $wp_customize->add_setting( 'wpbottommenu_show_cart_count' , array(
331 'default' => false,
332 'type' => 'option',
333 ));
334
335 $wp_customize->add_control('wpbottommenu_show_cart_count', array(
336 'label' => __( 'Show Cart Count', 'wp-bottom-menu' ),
337 'section' => 'wpbottommenu_section_customize',
338 'settings' => 'wpbottommenu_show_cart_count',
339 'type' => 'checkbox',
340 ));
341
342 $wp_customize->add_setting( 'wpbottommenu_cart_count_bgcolor', array(
343 'default' => '#ff0000',
344 'section' => 'wpbottommenu_section_customize',
345 'sanitize_callback' => 'sanitize_hex_color',
346 'type' => 'option'
347 ));
348
349 $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'wpbottommenu_cart_count_bgcolor', array(
350 'description' => __('Cart Count Background Color', 'wp-bottom-menu'),
351 'section' => 'wpbottommenu_section_customize',
352 )));
353
354 $wp_customize->add_setting( 'wpbottommenu_show_cart_total' , array(
355 'default' => false,
356 'type' => 'option',
357 ));
358
359 $wp_customize->add_control('wpbottommenu_show_cart_total', array(
360 'label' => __( 'Show Cart Total', 'wp-bottom-menu' ),
361 'description' => 'This option override cart menu title.',
362 'section' => 'wpbottommenu_section_customize',
363 'settings' => 'wpbottommenu_show_cart_total',
364 'type' => 'checkbox',
365 ));
366
367 //
368 // Section: Menu Items
369 //
370
371 $wp_customize->add_section('wpbottommenu_section_menuitems', array(
372 'title' => __('Menu Items', 'wp-bottom-menu'),
373 'priority' => 140,
374 'panel' => 'wpbottommenu_panel'
375 ));
376
377 $wp_customize->add_setting( 'customizer_repeater_wpbm', array(
378 'sanitize_callback' => 'customizer_repeater_sanitize',
379 'type' => 'option',
380 'default' => json_encode( array(
381 array("choice" => "wpbm-homepage" ,"subtitle" => "fa-home", "title" => "Home", "id" => "customizer_repeater_1" ),
382 array("choice" => "wpbm-woo-account" ,"subtitle" => "fa-user", "title" => "Account", "id" => "customizer_repeater_2" ),
383 array("choice" => "wpbm-woo-cart" ,"subtitle" => "fa-shopping-cart", "title" => "Cart", "id" => "customizer_repeater_3" ),
384 array("choice" => "wpbm-woo-search" ,"subtitle" => "fa-search", "title" => "Search", "id" => "customizer_repeater_4" ),
385 ))
386 ));
387
388 $wp_customize->add_control( new Customizer_Repeater( $wp_customize, 'customizer_repeater_wpbm', array(
389 'label' => esc_html__('Menu Item','customizer-repeater'),
390 'section' => 'wpbottommenu_section_menuitems',
391 'customizer_repeater_title_control' => true,
392 'customizer_repeater_link_control' => true,
393 'customizer_repeater_subtitle_control' => true,
394 )));
395
396 $wp_customize->add_setting( 'wpbottommenu_howuseicon' , array(
397 'type' => 'option',
398 ));
399
400 $wp_customize->add_control( 'wpbottommenu_howuseicon', array(
401 'label' => __( 'How to use Icons?', 'wp-bottom-menu' ),
402 'description' => sprintf(
403 __( '<u>For FontAwesome:</u> Add the names from (%1$s) to the "Icon" field.<br>Example:<code>fa-home</code><hr><u>For SVG Icons:</u> simply paste your SVG code in the "Icon" field. SVG Icon Library: %2$s<br>Enable to use SVG <code>Settings > Select Icon Type > Custom SVG</code> ', 'wp-bottom-menu' ),
404 sprintf( '<a target="_blank" href="https://fontawesome.com/v4.7.0/icons/" rel="nofollow">%s</a>', esc_html__( 'FontAwesome', 'wp-bottom-menu' ) ),
405 sprintf( '<a target="_blank" href="https://remixicon.com" rel="nofollow">%s</a>', esc_html__( 'Remix Icon', 'wp-bottom-menu' ) )
406 ),
407 'section' => 'wpbottommenu_section_menuitems',
408 'settings' => 'wpbottommenu_howuseicon',
409 'type' => 'hidden',
410 ));
411
412
413 }
414
415 // woocommerce cart fragment
416 function wp_bottom_menu_add_to_cart_fragment( $fragments ) {
417 $fragments['div.wp-bottom-menu-cart-count'] = '<div class="wp-bottom-menu-cart-count">' . WC()->cart->get_cart_contents_count() . '</div>';
418 $fragments['span.wp-bottom-menu-cart-total'] = '<span class="wp-bottom-menu-cart-total">' . WC()->cart->get_cart_total() . '</span>';
419 return $fragments;
420 }
421
422 // plugin action links
423 function wp_bottom_menu_action_links( $links_array, $plugin_file_name ){
424 if( strpos( $plugin_file_name, basename(__FILE__) ) ) {
425 array_unshift( $links_array, '<a href="' . admin_url( 'customize.php?autofocus[panel]=wpbottommenu_panel' ) . '">Settings</a>' );
426 }
427 return $links_array;
428 }
429
430 // customize css
431 function wpbottommenu_customize_css(){
432 ?>
433 <style type="text/css">
434 <?php if (!get_option( 'wpbottommenu_display_always', false )): ?>
435 @media (max-width: <?php echo get_option( 'wpbottommenu_display_px', '1024' ); ?>px){
436 .wp-bottom-menu{
437 display:flex;
438 }
439 .wp-bottom-menu-search-form-wrapper{
440 display: block;
441 }
442 }
443 <?php else: ?>
444 .wp-bottom-menu{
445 display:flex;
446 }
447 .wp-bottom-menu-search-form-wrapper{
448 display: block;
449 }
450 <?php endif; ?>
451
452 :root{
453 --wpbottommenu-font-size: <?php echo get_option( 'wpbottommenu_fontsize', '12' );?>px;
454 --wpbottommenu-icon-size: <?php echo get_option( 'wpbottommenu_iconsize', '24' );?>px;
455 --wpbottommenu-text-color: <?php echo get_option( 'wpbottommenu_textcolor', '#000000' );?>;
456 --wpbottommenu-icon-color: <?php echo get_option( 'wpbottommenu_iconcolor', '#000000' );?>;
457 --wpbottommenu-bgcolor: <?php echo get_option( 'wpbottommenu_bgcolor', '#ffffff' );?>;
458 --wpbottommenu-zindex: <?php echo get_option( 'wpbottommenu_zindex', '9999' ); ?>;
459 --wpbottommenu-cart-count-bgcolor: <?php echo get_option( 'wpbottommenu_cart_count_bgcolor', '#ff0000' );?>;
460 }
461
462 </style>
463 <?php
464 }
465
466 } // class
467
468
469 function wp_bottom_menu_pluginprefix_activate() {
470 flush_rewrite_rules();
471 }
472 register_activation_hook( __FILE__, 'wp_bottom_menu_pluginprefix_activate' );
473
474 function wp_bottom_menu_pluginprefix_deactivate() {
475 /* If you want all settings to be deleted when the plugin is deactive, activate this field.
476
477 delete_option(' customizer_repeater_wpbm' );
478 delete_option( 'wpbottommenu_display_px' );
479 delete_option( 'wpbottommenu_display_always' );
480 delete_option( 'wpbottommenu_fontsize' );
481 delete_option( 'wpbottommenu_iconsize' );
482 delete_option( 'wpbottommenu_textcolor' );
483 delete_option( 'wpbottommenu_iconcolor' );
484 delete_option( 'wpbottommenu_bgcolor' );
485 delete_option( 'wpbottommenu_zindex' );
486 delete_option( 'wpbottommenu_disable_title' );
487 delete_option( 'wpbottommenu_iconset' );
488 delete_option( 'wpbottommenu_placeholder_text' );
489 delete_option( 'wpbottommenu_show_cart_count' );
490 delete_option( 'wpbottommenu_show_cart_total' );
491 delete_option( 'wpbottommenu_cart_count_bgcolor' );
492 */
493 flush_rewrite_rules();
494 }
495 register_deactivation_hook( __FILE__, 'wp_bottom_menu_pluginprefix_deactivate' );