FileMaster
Search
Toggle Dark Mode
Home
/
.
/
wp-content
/
plugins
/
booking
/
core
/
any
Edit File: class-admin-menu.php
<?php /** * @version 1.1 * @package Any * @category Menu in Admin Panel * @author wpdevelop * * @web-site https://wpbookingcalendar.com/ * @email info@wpbookingcalendar.com * * @modified 2015-11-02 */ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly class WPBC_Admin_Menus { /* Static Variables */ static $capability = array( 'administrator' => 'activate_plugins', 'editor' => 'publish_pages', 'author' => 'publish_posts', 'contributor' => 'edit_posts', 'subscriber' => 'read' ); protected $menu_tag; protected $menu_title; protected $menu_title_second; // For root menu chnage second title in submenu - little hack protected $page_header; // Header - H2, in page content protected $browser_header; // Browser Header Title protected $in_menu; protected $user_role; // Acceess Role for current menu item protected $mune_icon_url; // Icon - if used 'none', then you can define it in the CSS backgound: .toplevel_page_wpbc .wp-menu-image { background-image: url("../img/icon-16x16.png"); background-position: 7px 7px; } But its mean that you are need to load this CSS in every admin page. public $root_position; /* Positions for Core Menu Items 2 Dashboard 4 Separator 5 Posts 10 Media 15 Links 20 Pages 25 Comments 59 Separator 60 Appearance 65 Plugins 70 Users 75 Tools 80 Settings 99 Separator */ function __construct( $slug, $param = array() ) { $this->in_menu = false; $this->menu_tag = $slug; // For exmaple: 'wpbc-settings' - its 'page' parameter in URL if ( isset( $param['menu_title'] ) ) $this->menu_title = $param['menu_title']; if ( isset( $param['menu_title_second'] ) ) $this->menu_title_second = $param['menu_title_second']; if ( isset( $param['page_header'] ) ) $this->page_header = $param['page_header']; if ( isset( $param['browser_header'] ) ) $this->browser_header = $param['browser_header']; if ( isset( $param['in_menu'] ) ) $this->in_menu = $param['in_menu']; if ( isset( $param['position'] ) ) $this->root_position = $param['position']; else $this->root_position = null; if ( isset( $param['mune_icon_url'] ) ) $this->mune_icon_url = $param['mune_icon_url']; else $this->mune_icon_url = 'none'; if ( isset( $param['user_role'] ) ) $this->user_role = $param['user_role']; else $this->user_role = 'subscriber'; add_action( 'admin_menu', array($this, 'new_admin_page'), 10 ); add_action( 'admin_menu', array($this, 'change_second_root_menu_title'), 11 ); // Change Title of Submenu title for root menu item } public function load_js() { do_action( 'wpbc_load_js_on_admin_page' ); } public function load_css() { do_action( 'wpbc_load_css_on_admin_page' ); } /** * Define Plugin Menu Page * */ public function new_admin_page(){ if ( $this->in_menu == 'root' ) { // Main Menu $page = $this->create_plugin_menu( $this->browser_header // Browser Page Header Title , $this->menu_title // Menu Title , ( ( isset( self::$capability[ $this->user_role ] ) ) ? self::$capability[ $this->user_role ] : self::$capability[ 'subscriber' ] ) // Capabilities , $this->menu_tag // Slug // I was used early -> plugin_basename(WPBC_FILE).'wpbc' , $this->mune_icon_url // Icon // - if used 'none', then you can define it in the CSS backgound: .toplevel_page_wpbc .wp-menu-image { background-image: url("../img/icon-16x16.png"); background-position: 7px 7px; } But its mean that you are need to load this CSS in every admin page. , array( $this, 'content' ) // Function for output content of page ); } else { // Sub Menu $page = $this->create_plugin_submenu( $this->in_menu // The slug name for parent menu (or file name of standard WordPress admin page) , $this->browser_header // Page Title , $this->menu_title // Menu Title , ( ( isset( self::$capability[ $this->user_role ] ) ) ? self::$capability[ $this->user_role ] : self::$capability[ 'subscriber' ] ) // Capabilities , $this->menu_tag // Slug , array( $this, 'content' ) // Function for output content of page ); } //do_action('wpbc_define_settings_pages', $this->menu_tag ); // Define sub classes, like: page-settings-general.php $this->menu_tag - 'wpbc-settings' - its 'page' parameter in URL do_action('wpbc_menu_created', $this->menu_tag ); // Define sub classes, like: page-settings-general.php $this->menu_tag - 'wpbc-settings' - its 'page' parameter in URL do_action('wpbc_define_nav_tabs', $this->menu_tag ); // Define Nav tabs. } /** * Content of the Menu Page * Define page S t r u c t u r e, nav T A B s , set N O N C E: wpbc_ajax_admin_nonce field in ..\any\class\class-admin-page-structure.php then show page C O N T E N T in files, like page-structure.php $this->menu_tag - 'wpbc-settings' - its 'page' parameter in URL */ public function content() { do_action('wpbc_page_structure_show', $this->menu_tag ); } /** * Hack for changing Root 2nd Submenu Title * * @global type $submenu */ public function change_second_root_menu_title() { // Change Title of the Main menu inside of submenu global $submenu; if ( ( $this->in_menu == 'root' ) && ( isset( $submenu[ $this->menu_tag ] ) ) && ( isset( $this->menu_title_second ) ) ) { $submenu[ $this->menu_tag ][0][0] = $this->menu_title_second; } } /** * Add Menu * * @param type $menu_page_title * @param type $menu_title * @param type $capability * @param type $menu_slug * @param type $mune_icon_url * @param type $page_content * @param type $page_css * @param type $page_js * @return type */ protected function create_plugin_menu($menu_page_title, $menu_title, $capability, $menu_slug, $mune_icon_url, $page_content ) { /** * add_menu_page( $page_title, $menu_title, $capability, $menu_slug, $function, $icon_url, $position ); * @return string The resulting page's hook_suffix */ // FixIn: 9.0.1.7. // The url to the icon to be used for this menu. Using 'none' would leave div.wp-menu-image empty so an icon can be added as background with CSS. if ( '<svg' == substr( $mune_icon_url, 0, 4 ) ) { /* $mune_icon_url_svg = '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="" viewBox="-2 -1 20 20"> <path d="M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5zM2 2a1 1 0 0 0-1 1v1h14V3a1 1 0 0 0-1-1H2zm13 3H1v9a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V5z"/> <path d="M9 7.5a.5.5 0 0 1 .5-.5H15v2H9.5a.5.5 0 0 1-.5-.5v-1zm-2 3v1a.5.5 0 0 1-.5.5H1v-2h5.5a.5.5 0 0 1 .5.5z"/> </svg>'; */ $mune_icon_url = sprintf( 'data:image/svg+xml;base64,%s', base64_encode( $mune_icon_url ) ); } elseif ( $mune_icon_url == 'none' ) { $mune_icon_url = 'none'; } elseif ( empty( $mune_icon_url ) ) { $mune_icon_url = ''; } else { $mune_icon_url = plugins_url( $mune_icon_url, WPBC_FILE ); } $page = add_menu_page( $menu_page_title, // The text to be displayed in the title tags of the page when the menu is selected $menu_title, // The text to be used for the menu $capability, // The capability required for this menu to be displayed to the user. $menu_slug, // The slug name to refer to this menu by (should be unique for this menu) $page_content, // The function to be called to output the content for this page. $mune_icon_url//(($mune_icon_url=='none')?'none':((empty($mune_icon_url))?'':plugins_url($mune_icon_url, WPBC_FILE)) ) // The url to the icon to be used for this menu. Using 'none' would leave div.wp-menu-image empty so an icon can be added as background with CSS. , $this->root_position /* @param int $position The position in the menu order this one should appear * Positions for Core Menu Items 2 Dashboard 4 Separator 5 Posts 10 Media 15 Links 20 Pages 25 Comments 59 Separator 60 Appearance 65 Plugins 70 Users 75 Tools 80 Settings 99 Separator */ ); add_action( 'admin_print_styles-' . $page, array( $this, 'load_css' ) ); add_action( 'admin_print_scripts-' . $page, array( $this, 'load_js' ) ); return $page; } /** * Add Sub Menu * * @param type $parent_menu_slug - The slug name for the parent menu (or the file name of a standard WordPress admin page) * @param type $menu_page_title * @param type $menu_title * @param type $capability * @param type $menu_slug * @param type $page_content * @param type $page_css * @param type $page_js * @return type */ protected function create_plugin_submenu( $parent_menu_slug, $menu_page_title, $menu_title, $capability, $menu_slug, $page_content ) { /** * function add_submenu_page( $parent_slug, $page_title, $menu_title, $capability, $menu_slug, $function = '' ); * @return string|bool The resulting page's hook_suffix, or false if the user does not have the capability required. */ $page = add_submenu_page( $parent_menu_slug, // The slug name for the parent menu (or the file name of a standard WordPress admin page) $menu_page_title, // The text to be displayed in the title tags of the page when the menu is selected $menu_title, // The text to be used for the menu $capability, // The capability required for this menu to be displayed to the user. $menu_slug, // The slug name to refer to this menu by (should be unique for this menu) $page_content // The function to be called to output the content for this page. ); add_action( 'admin_print_styles-' . $page, array( $this, 'load_css' ) ); add_action( 'admin_print_scripts-' . $page, array( $this, 'load_js' ) ); return $page; } }
Save
Back