PluginProbe
WP Bottom Menu / 2.2.2
WP Bottom Menu v2.2.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 2.2.2, at wp-bottom-menu.php

452 lines 19.1 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: 2.2.2
6 * Author: J4 & LiquidThemes
7 * Author URI: https://hub.liquid-themes.com/
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', '2.2.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 final class WPBottomMenu{
32
33 /**
34 * Instance
35 *
36 * @since 1.0.0
37 *
38 * @access private
39 * @static
40 *
41 * @var WPBottomMenu The single instance of the class.
42 */
43 private static $_instance = null;
44
45 /**
46 * Instance
47 *
48 * Ensures only one instance of the class is loaded or can be loaded.
49 *
50 * @since 1.0.0
51 *
52 * @access public
53 * @static
54 *
55 * @return WPBottomMenu An instance of the class.
56 */
57 public static function instance() {
58
59 if ( is_null( self::$_instance ) ) {
60 self::$_instance = new self();
61 }
62 return self::$_instance;
63 }
64
65 /**
66 * Constructor
67 *
68 * @since 1.0.0
69 *
70 * @access public
71 */
72 public function __construct() {
73 $this->init();
74 }
75
76 /**
77 * Load Textdomain
78 *
79 * Load plugin localization files.
80 *
81 * Fired by `init` action hook.
82 *
83 * @since 1.0.0
84 *
85 * @access public
86 */
87 public function i18n() {
88
89 load_plugin_textdomain( 'wp-bottom-menu' );
90
91 }
92
93 /**
94 * Initialize the plugin
95 *
96 * Load the files required to run the plugin.
97 *
98 * @since 1.0.0
99 *
100 * @access public
101 */
102 function init(){
103
104 $this->i18n();
105 $this->include_files();
106
107 add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
108 add_action( 'wp_footer', array($this, 'wp_bottom_menu' ) );
109 add_filter( 'plugin_action_links', array($this, 'wp_bottom_menu_action_links'), 10, 2 );
110
111 // Admin menu - Settings > WP Bottom Menu
112 add_action( 'admin_menu', function() {
113 add_submenu_page(
114 'options-general.php', 'WP Bottom Menu', 'WP Bottom Menu', 'manage_options', 'wp-bottom-menu',
115 function(){
116 wp_redirect( admin_url( 'customize.php?autofocus[panel]=wpbottommenu_panel' ) );
117 }
118 );
119 } );
120
121 add_action( 'customize_controls_enqueue_scripts', function(){
122
123 // customizer js
124 wp_enqueue_script( 'wp-bottom-menu-customize', WP_BOTTOM_MENU_DIR_URL . 'assets/js/customizer.js', array( 'jquery', 'customize-controls' ), false, true );
125
126 // select2
127 wp_enqueue_script( 'select2', WP_BOTTOM_MENU_DIR_URL . 'assets/vendors/select2/select2.min.js', [], false, false );
128 wp_enqueue_style( 'select2', WP_BOTTOM_MENU_DIR_URL . 'assets/vendors/select2/select2.min.css', array(), WP_BOTTOM_MENU_VERSION, 'all' );
129 wp_add_inline_script( 'wp-bottom-menu-customize', '
130 jQuery( document ).ready(function() {
131 jQuery(".wp-bottom-menu-select2").select2({
132 placeholder: "Select an option"
133 });
134 });
135 ');
136 } );
137
138 // Load WooCommerce Fragments
139 if ( class_exists( 'WooCommerce' ) ){
140 add_filter( 'woocommerce_add_to_cart_fragments', array($this, 'wp_bottom_menu_add_to_cart_fragment'), 10, 1 );
141 }
142
143 // Register Nav Menus
144 add_action( 'after_setup_theme', function() {
145 register_nav_menus( array(
146 'wpbm_custom' => __( 'WP Bottom Menu', 'wp-bottom-menu' ),
147 ) );
148 } );
149
150 // Polylang register translatable strings
151 add_action('init', function(){
152 if ( function_exists('pll_register_string') ) {
153 $customizer_repeater_wpbm = get_option('customizer_repeater_wpbm', json_encode( array(
154 array("choice" => "wpbm-homepage" ,"subtitle" => "fa-home", "title" => "Home", "id" => "customizer_repeater_1" ),
155 array("choice" => "wpbm-woo-account" ,"subtitle" => "fa-user", "title" => "Account", "id" => "customizer_repeater_2" ),
156 array("choice" => "wpbm-woo-cart" ,"subtitle" => "fa-shopping-cart", "title" => "Cart", "id" => "customizer_repeater_3" ),
157 array("choice" => "wpbm-woo-search" ,"subtitle" => "fa-search", "title" => "Search", "id" => "customizer_repeater_4" ),
158 ) ) );
159
160 $customizer_repeater_wpbm_decoded = json_decode($customizer_repeater_wpbm);
161
162 foreach ( $customizer_repeater_wpbm_decoded as $repeater_item ) {
163 pll_register_string( 'Menu Item', $repeater_item->title, 'WP Bottom Menu' );
164 }
165 }
166 });
167
168 }
169
170 function include_files(){
171
172 require_once( WP_BOTTOM_MENU_DIR_PATH . 'inc/customizer/customizer-repeater/functions.php' );
173 require_once( WP_BOTTOM_MENU_DIR_PATH . 'inc/customizer/customizer.php' );
174 require_once( WP_BOTTOM_MENU_DIR_PATH . 'inc/customizer/condition.php' );
175
176 }
177
178 // enqueue scripts
179 function enqueue_scripts() {
180
181 // check the display condition
182 if ( $this->display_condition() ){
183
184 wp_enqueue_style( 'wp-bottom-menu', WP_BOTTOM_MENU_DIR_URL . 'assets/css/style.css', array(), WP_BOTTOM_MENU_VERSION, 'all' );
185 wp_enqueue_script( 'wp-bottom-menu', WP_BOTTOM_MENU_DIR_URL . 'assets/js/main.js', array(), WP_BOTTOM_MENU_VERSION, true );
186
187 if ( get_option( 'wpbottommenu_iconset', 'fontawesome' ) == 'fontawesome' ){
188 wp_enqueue_style( 'font-awesome', WP_BOTTOM_MENU_DIR_URL . 'inc/customizer/customizer-repeater/css/font-awesome.min.css', array(), CUSTOMIZER_REPEATER_VERSION );
189 }
190 if ( get_option( 'wpbottommenu_iconset', 'fontawesome' ) == 'fontawesome2' ){
191 wp_enqueue_style( 'font-awesome-wpbm', WP_BOTTOM_MENU_DIR_URL . 'assets/vendors/fontawesome/all.min.css', array(), '6.1.1' );
192 }
193
194 wp_localize_script( 'wp-bottom-menu', 'WPBM',
195 array(
196 'ajaxurl' => admin_url( 'admin-ajax.php' ),
197 'siteurl' => site_url(),
198 )
199 );
200
201 }
202
203 }
204
205 // wp bottom menu
206 function wp_bottom_menu() {
207
208 // check the display condition
209 if ( !$this->display_condition() ){
210 return;
211 }
212
213 ?>
214 <div class="wp-bottom-menu" id="wp-bottom-menu">
215
216 <?php
217 $customizer_repeater_wpbm = get_option('customizer_repeater_wpbm', json_encode( array(
218 array("choice" => "wpbm-homepage" ,"subtitle" => "fa-home", "title" => "Home", "id" => "customizer_repeater_1" ),
219 array("choice" => "wpbm-woo-account" ,"subtitle" => "fa-user", "title" => "Account", "id" => "customizer_repeater_2" ),
220 array("choice" => "wpbm-woo-cart" ,"subtitle" => "fa-shopping-cart", "title" => "Cart", "id" => "customizer_repeater_3" ),
221 array("choice" => "wpbm-woo-search" ,"subtitle" => "fa-search", "title" => "Search", "id" => "customizer_repeater_4" ),
222 ) ) );
223 /*This returns a json so we have to decode it*/
224
225 $customizer_repeater_wpbm_decoded = json_decode($customizer_repeater_wpbm);
226 $wpbm_woo_search = $wpbm_post_search = $wpbm_custom_search = $wpbm_custom_menu = false;
227 $search_icon = 'fa-search';
228 $wpbm_link_target = get_option( 'wpbottommenu_target' ) ? 'target=_blank' : '';
229 foreach ( $customizer_repeater_wpbm_decoded as $repeater_item ) {
230
231 $tag = 'a';
232
233 if ( $repeater_item->choice == "wpbm-woo-search" || $repeater_item->choice == "wpbm-post-search" || $repeater_item->choice == "wpbm-custom-search" ):
234 $tag = 'div';
235 if ( get_option( 'wpbottommenu_iconset', 'fontawesome' ) == 'fontawesome' ) {
236 $search_icon = 'fa ' . $repeater_item->subtitle;
237 } elseif ( get_option( 'wpbottommenu_iconset', 'fontawesome' ) == 'fontawesome2' || get_option( 'wpbottommenu_iconset', 'fontawesome' ) == 'svg' ) {
238 $search_icon = $repeater_item->subtitle;
239 }
240 ?>
241 <<?php echo $tag; ?> title="<?php echo esc_attr( $repeater_item->title ); ?>" class="wp-bottom-menu-item wp-bottom-menu-search-form-trigger">
242 <?php elseif ( $repeater_item->choice == "wpbm-menu" ): ?>
243 <?php $tag = 'div'; ?>
244 <<?php echo $tag; ?> title="<?php echo esc_attr( $repeater_item->title ); ?>" class="wp-bottom-menu-item wp-bottom-menu-nav-trigger">
245 <?php elseif ( $repeater_item->choice == "wpbm-onclick" ): ?>
246 <?php $tag = 'div'; ?>
247 <<?php echo $tag; ?> onclick="<?php echo esc_js( $repeater_item->text ); ?>" title="<?php echo esc_attr( $repeater_item->title ); ?>" class="wp-bottom-menu-item">
248 <?php else: ?>
249 <?php
250 $wpbm_item_url = '';
251 $classes = array('wp-bottom-menu-item');
252 switch($repeater_item->choice){
253 case "wpbm-homepage":
254 $wpbm_item_url = esc_url( home_url() );
255 if ( is_front_page() ){
256 array_push( $classes, 'active' );
257 }
258 break;
259 case "wpbm-woo-cart":
260 if ( class_exists( 'WooCommerce' ) ) {
261 $wpbm_item_url = esc_url( wc_get_page_permalink( 'cart' ) );
262 } else {
263 $wpbm_item_url = '#';
264 }
265 break;
266 case "wpbm-woo-account":
267 if ( class_exists( 'WooCommerce' ) ) {
268 $wpbm_item_url = esc_url( wc_get_page_permalink( 'myaccount' ) );
269 } else {
270 $wpbm_item_url = '#';
271 }
272 break;
273 case "wpbm-page-back":
274 $wpbm_item_url = 'javascript:void(0)';
275 array_push( $classes, 'wpbm-page-back' );
276 break;
277 default:
278 $wpbm_item_url = esc_url( $repeater_item->link );
279 }
280
281 if ( url_to_postid($wpbm_item_url) === get_the_ID() ){
282 array_push( $classes, 'active' );
283 } elseif ( class_exists('WooCommerce') && is_shop() && url_to_postid($wpbm_item_url) === 0 ) {
284 if ( $wpbm_item_url !== home_url() ) {
285 array_push( $classes, 'active' );
286 }
287 }
288
289 ?>
290 <<?php echo $tag; ?> href="<?php echo $wpbm_item_url; ?>" class="<?php echo esc_attr( join( ' ', $classes ) ); ?>" <?php echo esc_attr( $wpbm_link_target ); ?>>
291 <?php endif; ?>
292
293 <div class="wp-bottom-menu-icon-wrapper">
294 <?php if( get_option( 'wpbottommenu_show_cart_count', false ) ): ?>
295 <?php if ( class_exists( 'WooCommerce' ) && $repeater_item->choice == "wpbm-woo-cart" ) : ?>
296 <div class="wp-bottom-menu-cart-count"><?php echo esc_html( WC()->cart->get_cart_contents_count() ); ?></div>
297 <?php endif; ?>
298 <?php endif; ?>
299
300 <?php if( get_option( 'wpbottommenu_iconset', 'fontawesome' ) == 'fontawesome' ): ?>
301 <i class="wp-bottom-menu-item-icons fa <?php echo esc_attr( $repeater_item->subtitle ); ?>"></i>
302 <?php elseif( get_option( 'wpbottommenu_iconset', 'fontawesome' ) == 'fontawesome2' ): ?>
303 <i class="wp-bottom-menu-item-icons <?php echo esc_attr( $repeater_item->subtitle ); ?>"></i>
304 <?php else: ?>
305 <?php echo html_entity_decode( $repeater_item->subtitle ); ?>
306 <?php endif; ?>
307 </div>
308 <?php if( !get_option( 'wpbottommenu_disable_title', false ) ): ?>
309 <?php if( get_option( 'wpbottommenu_show_cart_total', false ) && $repeater_item->choice == "wpbm-woo-cart" && class_exists( 'WooCommerce' ) ): ?>
310 <span class="wp-bottom-menu-cart-total"><?php WC()->cart->get_cart_total(); ?></span>
311 <?php elseif( get_option( 'wpbottommenu_show_account_name' ) && $repeater_item->choice == "wpbm-woo-account" && class_exists( 'WooCommerce' ) && is_user_logged_in() ): ?>
312 <?php echo wp_get_current_user()->first_name ? wp_get_current_user()->first_name : wp_get_current_user()->user_login; ?>
313 <?php else: ?>
314 <span><?php echo $this->translated_menu_title($repeater_item->title); ?></span>
315 <?php endif; ?>
316 <?php endif; ?>
317
318 </<?php echo $tag; ?>>
319 <?php
320
321 if ( $repeater_item->choice == "wpbm-woo-search" && !$wpbm_woo_search )
322 $wpbm_woo_search = true;
323
324 if ( $repeater_item->choice == "wpbm-post-search" && !$wpbm_post_search )
325 $wpbm_post_search = true;
326
327 if ( $repeater_item->choice == "wpbm-custom-search" && !$wpbm_custom_search )
328 $wpbm_custom_search = true;
329
330 if ( $repeater_item->choice == "wpbm-menu" && !$wpbm_custom_menu )
331 $wpbm_custom_menu = true;
332
333 }
334 ?>
335 </div>
336
337 <?php if ( $wpbm_custom_menu ) : ?>
338 <div class="wp-bottom-menu-nav-wrapper">
339 <span class="wpbm-nav-close">&times;</span>
340 <?php
341 if ( has_nav_menu( 'wpbm_custom' ) ) {
342 wp_nav_menu( array(
343 'menu' => 'wpbm_custom',
344 'container' => 'ul',
345 'menu_id' => 'wpbm-nav',
346 'menu_class' => 'wpbm-nav-items',
347 ) );
348 } else {
349 esc_html_e( 'Add a menu in "WP Dashboard->Appearance->Menus" and select Display location "WP Bottom Menu"', 'wp-bottom-menu' );
350 }
351 ?>
352 </div>
353 <?php endif;
354
355 if ( $wpbm_woo_search || $wpbm_post_search || $wpbm_custom_search ): ?>
356 <div class="wp-bottom-menu-search-form-wrapper" id="wp-bottom-menu-search-form-wrapper">
357 <form role="search" method="get" action="<?php echo esc_url( home_url( '/' ) ); ?>" class="wp-bottom-menu-search-form">
358 <?php if ( get_option( 'wpbottommenu_iconset', 'fontawesome' ) == 'svg' ) : ?>
359 <?php echo html_entity_decode( $search_icon ); ?>
360 <?php else : ?>
361 <i class="<?php echo esc_attr( $search_icon ); ?>"></i>
362 <?php endif; ?>
363 <?php if ( $wpbm_woo_search && class_exists( 'WooCommerce' ) ) { ?>
364 <input type="hidden" name="post_type" value="product" />
365 <?php } elseif ( $wpbm_post_search ) { ?>
366 <input type="hidden" name="post_type" value="post" />
367 <?php } else {
368 $search_cpt = get_option( 'wpbottommenu_search_cpt', 'all' );
369 if ( $search_cpt === 'all' || empty( $search_cpt ) ){
370 ?><input type="hidden" name="post_type" value="all" /><?php
371 } else {
372 $search_cpt = explode(',', $search_cpt);
373 foreach( $search_cpt as $cpt ){
374 if ( !empty( $cpt ) ){
375 ?><input type="hidden" name="post_type[]" value="<?php echo esc_attr( $cpt ); ?>" /><?php
376 }
377 }
378 }
379 } ?>
380 <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" />
381 </form>
382 </div>
383 <?php endif;
384
385 }
386
387 function translated_menu_title( $title ) {
388 if ( function_exists('pll__') ) {
389 return pll__( $title );
390 }
391
392 return $title;
393 }
394
395 function display_condition(){
396
397 $condition = new \WPBottomMenu_Condition();
398 return $condition->get_condition();
399
400 }
401
402 // woocommerce cart fragment
403 function wp_bottom_menu_add_to_cart_fragment( $fragments ) {
404 $fragments['div.wp-bottom-menu-cart-count'] = '<div class="wp-bottom-menu-cart-count">' . WC()->cart->get_cart_contents_count() . '</div>';
405 $fragments['span.wp-bottom-menu-cart-total'] = '<span class="wp-bottom-menu-cart-total">' . WC()->cart->get_cart_total() . '</span>';
406 return $fragments;
407 }
408
409 // plugin action links
410 function wp_bottom_menu_action_links( $links_array, $plugin_file_name ){
411 if( strpos( $plugin_file_name, basename(__FILE__) ) ) {
412 array_unshift( $links_array, '<a href="' . admin_url( 'customize.php?autofocus[panel]=wpbottommenu_panel' ) . '">Settings</a>' );
413 }
414 return $links_array;
415 }
416
417 } // class
418 WPBottomMenu::instance();
419
420
421 function wp_bottom_menu_plugin_activate() {
422 flush_rewrite_rules();
423 }
424 register_activation_hook( __FILE__, 'wp_bottom_menu_plugin_activate' );
425
426 function wp_bottom_menu_plugin_deactivate() {
427 /* If you want all settings to be deleted when the plugin is deactive, activate this field.
428 TODO : Add reset all settings option
429
430 delete_option(' customizer_repeater_wpbm' );
431 delete_option( 'wpbottommenu_display_px' );
432 delete_option( 'wpbottommenu_display_always' );
433 delete_option( 'wpbottommenu_fontsize' );
434 delete_option( 'wpbottommenu_iconsize' );
435 delete_option( 'wpbottommenu_textcolor' );
436 delete_option( 'wpbottommenu_htextcolor' );
437 delete_option( 'wpbottommenu_iconcolor' );
438 delete_option( 'wpbottommenu_hiconcolor' );
439 delete_option( 'wpbottommenu_bgcolor' );
440 delete_option( 'wpbottommenu_zindex' );
441 delete_option( 'wpbottommenu_disable_title' );
442 delete_option( 'wpbottommenu_iconset' );
443 delete_option( 'wpbottommenu_placeholder_text' );
444 delete_option( 'wpbottommenu_show_cart_count' );
445 delete_option( 'wpbottommenu_show_cart_total' );
446 delete_option( 'wpbottommenu_cart_count_bgcolor' );
447 delete_option( 'wpbottommenu_hide_pages' );
448 delete_option( 'wpbottommenu_wrapper_padding' );
449 */
450 flush_rewrite_rules();
451 }
452 register_deactivation_hook( __FILE__, 'wp_bottom_menu_plugin_deactivate' );