class-auxels-admin-assets.php
1 year ago
class-auxels-archive-menu-links.php
1 year ago
class-auxels-envato-elements.php
1 year ago
class-auxels-import-parser.php
3 years ago
class-auxels-import.php
3 years ago
class-auxels-search-post-type.php
6 months ago
class-auxels-wc-attribute-nav-menu.php
1 year ago
class-auxin-admin-dashboard.php
1 year ago
class-auxin-demo-importer.php
6 months ago
class-auxin-dependency-sorting.php
3 years ago
class-auxin-import.php
1 year ago
class-auxin-install.php
1 year ago
class-auxin-master-nav-menu-admin.php
1 year ago
class-auxin-page-template.php
1 year ago
class-auxin-permalink.php
1 year ago
class-auxin-plugin-requirements.php
3 years ago
class-auxin-post-type-base.php
1 year ago
class-auxin-svg-support-allowedattributes.php
7 years ago
class-auxin-svg-support-allowedtags.php
7 years ago
class-auxin-svg-support.php
1 year ago
class-auxin-walker-nav-menu-back.php
1 year ago
class-auxin-welcome-sections.php
1 year ago
class-auxin-welcome.php
6 months ago
class-auxin-whitelabel.php
3 years ago
class-auxin-widget-indie.php
1 year ago
class-auxin-widget-shortcode-map.php
11 months ago
class-auxin-widget.php
1 year ago
class-auxin-master-nav-menu-admin.php
152 lines
| 1 | <?php |
| 2 | /** |
| 3 | * Main class for adding configurations and custom menu item fields in admin area |
| 4 | * |
| 5 | * |
| 6 | * @package Auxin |
| 7 | * @license LICENSE.txt |
| 8 | * @author averta |
| 9 | * @link http://phlox.pro/ |
| 10 | * @copyright (c) 2010-2025 averta |
| 11 | */ |
| 12 | class Auxin_Master_Nav_Menu_Admin { |
| 13 | |
| 14 | /** |
| 15 | * Instance of this class. |
| 16 | * |
| 17 | * @var object |
| 18 | */ |
| 19 | protected static $instance = null; |
| 20 | |
| 21 | |
| 22 | public function __construct(){ |
| 23 | |
| 24 | // Back-end modification hooks |
| 25 | |
| 26 | // Add extra fields to menu items in back-end menu editor |
| 27 | add_filter( 'wp_setup_nav_menu_item' , array( $this, 'add_custom_nav_item_fields' ) ); |
| 28 | |
| 29 | // Save and update the value of custom menu fields |
| 30 | add_action( 'wp_update_nav_menu_item', array( $this, 'update_backend_nav_menu_fields' ), 9, 3 ); |
| 31 | |
| 32 | // Change the walker class for back-end menu editor |
| 33 | add_filter( 'wp_edit_nav_menu_walker', array( $this, 'change_nav_menu_backend_walker' ), 1000000000, 1 ); // the high priority is a fix for "popup-maker" plugin |
| 34 | |
| 35 | |
| 36 | // Register stylesheet and javascript for edit menu page |
| 37 | add_action( 'admin_menu' , array( $this, 'enqueue_edit_menu_assests' ) ); |
| 38 | |
| 39 | } |
| 40 | |
| 41 | /* Back End |
| 42 | ==========================================================================*/ |
| 43 | |
| 44 | /** |
| 45 | * Adds all custom fields to menu item object in back-end |
| 46 | * |
| 47 | * @param object $menu_item The menu item object |
| 48 | */ |
| 49 | public function add_custom_nav_item_fields( $menu_item ){ |
| 50 | |
| 51 | // Loop through all custom fields and add them to menu item object |
| 52 | foreach ( $this->menu_item_fields as $field_id => $field_info ) { |
| 53 | $menu_item->{$field_id} = get_post_meta( $menu_item->ID, '_menu_item_' . $field_id , true ); |
| 54 | } |
| 55 | |
| 56 | return $menu_item; |
| 57 | } |
| 58 | |
| 59 | /** |
| 60 | * Saves and updates the value of custom menu item fields |
| 61 | */ |
| 62 | public function update_backend_nav_menu_fields( $menu_id, $menu_item_db_id, $args ){ |
| 63 | |
| 64 | foreach ( $this->menu_item_fields as $field_id => $field_info ){ |
| 65 | |
| 66 | // considering exception for checkbox field |
| 67 | if( 'switch' == $field_info['type'] ) { |
| 68 | |
| 69 | if( ! isset( $_POST['menu-item-'. $field_id ][ $menu_item_db_id ] ) ){ |
| 70 | $_POST['menu-item-'. $field_id ][ $menu_item_db_id ] = '0'; |
| 71 | } else { |
| 72 | $_POST['menu-item-'. $field_id ][ $menu_item_db_id ] = '1'; |
| 73 | } |
| 74 | |
| 75 | } elseif( ! isset( $_POST['menu-item-'. $field_id ][ $menu_item_db_id ] ) ){ |
| 76 | $_POST['menu-item-'. $field_id ][ $menu_item_db_id ] = ''; |
| 77 | } |
| 78 | |
| 79 | // save custom style in custom css file |
| 80 | if( 'custom_style' == $field_id ){ |
| 81 | |
| 82 | if( $custom_style = $_POST['menu-item-'. $field_id ][ $menu_item_db_id ] ){ |
| 83 | auxin_add_custom_css( ".menu-item-$menu_item_db_id { $custom_style }", 'menu-item-' . $menu_item_db_id ); |
| 84 | } else { |
| 85 | auxin_remove_custom_css( 'menu-item-' . $menu_item_db_id ); |
| 86 | } |
| 87 | |
| 88 | } |
| 89 | |
| 90 | update_post_meta( $menu_item_db_id, '_menu_item_'. $field_id , sanitize_text_field( $_POST['menu-item-'. $field_id ][ $menu_item_db_id ] ) ); |
| 91 | } |
| 92 | |
| 93 | } |
| 94 | |
| 95 | /** |
| 96 | * Modifies the walker class of back-end menu editor |
| 97 | */ |
| 98 | public function change_nav_menu_backend_walker( $walker ){ |
| 99 | return 'Auxin_Walker_Nav_Menu_Back'; |
| 100 | } |
| 101 | |
| 102 | /** |
| 103 | * Loads specific asset files only on edit menu page |
| 104 | */ |
| 105 | public function enqueue_edit_menu_assests(){ |
| 106 | global $pagenow; |
| 107 | |
| 108 | if( 'nav-menus.php' == $pagenow ){ |
| 109 | wp_enqueue_style ( 'auxin-edit-menus-css' , ADMIN_CSS_URL . 'other/edit-menus.css' , null, '1.1' ); |
| 110 | wp_enqueue_script( 'auxin-edit-menus-js' , ADMIN_JS_URL . 'solo/edit-menus.js' , array('jquery'), '1.1', true ); |
| 111 | } |
| 112 | } |
| 113 | |
| 114 | /* Get methods |
| 115 | ==========================================================================*/ |
| 116 | |
| 117 | /** |
| 118 | * Magic method to get the value of accessible properties |
| 119 | * |
| 120 | * @param string The property name |
| 121 | * @return string The value of property |
| 122 | */ |
| 123 | public function __get( $name ){ |
| 124 | |
| 125 | // Retrieve the menu item fields from Master Menu class |
| 126 | if( 'menu_item_fields' == $name ){ |
| 127 | return Auxin()->Master_Menu->menu_item_fields; |
| 128 | } |
| 129 | |
| 130 | if( property_exists( $this, $name ) ){ |
| 131 | return $this->$name; |
| 132 | } |
| 133 | |
| 134 | return null; |
| 135 | } |
| 136 | |
| 137 | /** |
| 138 | * Return an instance of this class. |
| 139 | * |
| 140 | * @return object A single instance of this class. |
| 141 | */ |
| 142 | public static function get_instance() { |
| 143 | |
| 144 | // If the single instance hasn't been set, set it now. |
| 145 | if ( null == self::$instance ) { |
| 146 | self::$instance = new self; |
| 147 | } |
| 148 | return self::$instance; |
| 149 | } |
| 150 | |
| 151 | } |
| 152 |