/** * admin_menu hook. */ function wpcf_admin_menu_hook() { add_menu_page('Types', 'Types', 'manage_options', 'wpcf', 'wpcf_admin_menu_summary', WPCF_RES_RELPATH . '/images/logo-16.png'); // Custom fields $hook = add_submenu_page('wpcf', __('Custom Fields', 'wpcf'), __('Custom Fields', 'wpcf'), 'manage_options', 'wpcf-cf', 'wpcf_admin_menu_summary'); wpcf_admin_plugin_help($hook, 'wpcf-cf'); add_action('load-' . $hook, 'wpcf_admin_menu_summary_hook'); // Custom types and tax $hook = add_submenu_page('wpcf', __('Custom Types and Taxonomies', 'wpcf'), __('Custom Types and Taxonomies', 'wpcf'), 'manage_options', 'wpcf-ctt', 'wpcf_admin_menu_summary_ctt'); add_action('load-' . $hook, 'wpcf_admin_menu_summary_ctt_hook'); wpcf_admin_plugin_help($hook, 'wpcf-ctt'); // Import/Export $hook = add_submenu_page('wpcf', __('Import/Export', 'wpcf'), __('Import/Export', 'wpcf'), 'manage_options', 'wpcf-import-export', 'wpcf_admin_menu_import_export'); add_action('load-' . $hook, 'wpcf_admin_menu_import_export_hook'); wpcf_admin_plugin_help($hook, 'wpcf-import-export'); // Custom Fields Control $hook = add_submenu_page('wpcf', __('Custom Fields Control', 'wpcf'), __('Custom Fields Control', 'wpcf'), 'manage_options', 'wpcf-custom-fields-control', 'wpcf_admin_menu_custom_fields_control'); add_action('load-' . $hook, 'wpcf_admin_menu_custom_fields_control_hook'); wpcf_admin_plugin_help($hook, 'wpcf-custom-fields-control'); // Settings $hook = add_submenu_page('wpcf', __('Settings', 'wpcf'), __('Settings', 'wpcf'), 'manage_options', 'wpcf-custom-settings', 'wpcf_admin_menu_settings'); add_action('load-' . $hook, 'wpcf_admin_menu_settings_hook'); if (isset($_GET['page'])) { switch ($_GET['page']) { case 'wpcf-edit': $title = isset($_GET['group_id']) ? __('Edit Group', 'wpcf') : __('Add New Group', 'wpcf'); $hook = add_submenu_page('wpcf', $title, $title, 'manage_options', 'wpcf-edit', 'wpcf_admin_menu_edit_fields'); add_action('load-' . $hook, 'wpcf_admin_menu_edit_fields_hook'); wpcf_admin_plugin_help($hook, 'wpcf-edit'); break; case 'wpcf-edit-type': $title = isset($_GET['wpcf-post-type']) ? __('Edit Custom Post Type', 'wpcf') : __('Add New Custom Post Type', 'wpcf'); $hook = add_submenu_page('wpcf', $title, $title, 'manage_options', 'wpcf-edit-type', 'wpcf_admin_menu_edit_type'); add_action('load-' . $hook, 'wpcf_admin_menu_edit_type_hook'); wpcf_admin_plugin_help($hook, 'wpcf-edit-type'); break; case 'wpcf-edit-tax': $title = isset($_GET['wpcf-tax']) ? __('Edit Taxonomy', 'wpcf') : __('Add New Taxonomy', 'wpcf'); $hook = add_submenu_page('wpcf', $title, $title, 'manage_options', 'wpcf-edit-tax', 'wpcf_admin_menu_edit_tax'); add_action('load-' . $hook, 'wpcf_admin_menu_edit_tax_hook'); wpcf_admin_plugin_help($hook, 'wpcf-edit-tax'); break; } } // Check if migration from other plugin is needed if (class_exists('Acf') || defined('CPT_VERSION')) { $hook = add_submenu_page('wpcf', __('Migration', 'wpcf'), __('Migration', 'wpcf'), 'manage_options', 'wpcf-migration', 'wpcf_admin_menu_migration'); add_action('load-' . $hook, 'wpcf_admin_menu_migration_hook'); wpcf_admin_plugin_help($hook, 'wpcf-migration'); } do_action('wpcf_menu_plus'); // Introduction $hook = add_submenu_page('wpcf', __('Help', 'wpcf'), __('Help', 'wpcf'), 'manage_options', 'wpcf-help', 'wpcf_admin_menu_introduction'); wpcf_admin_plugin_help($hook, 'wpcf'); add_action('load-' . $hook, 'wpcf_admin_menu_introduction_hook'); // remove the repeating Types submenu remove_submenu_page('wpcf', 'wpcf'); }
/** * Call this only if you are actually showing the page. */ public function initialize() { $hook = wpcf_admin_add_submenu_page(array('menu_title' => $this->get_menu_title(), 'function' => array($this, 'page_handler'), 'capability' => WPCF_TERM_FIELD_EDIT), wpcf_getget('page')); $load_page_action = 'load-' . $hook; // Prepare form, which includes saving data and optionally redirecting to the edit page with group ID // as GET parameter. That's why it must be executed earlier than as a menu page callback. add_action($load_page_action, array($this, 'prepare_form_maybe_redirect')); // This one handles enqueuing script and styles. Originally it is meant for post fields and it also probably // does some things that are not needed now. add_action($load_page_action, 'wpcf_admin_enqueue_group_edit_page_assets'); wpcf_admin_plugin_help($hook, self::PAGE_NAME); }
function wpcf_admin_add_submenu_page($menu, $menu_slug = null, $menu_parent = 'wpcf') { if (!is_admin()) { return; } $menu_slug = array_key_exists('menu_slug', $menu) ? $menu['menu_slug'] : $menu_slug; $capability = array_key_exists('capability', $menu) ? $menu['capability'] : 'manage_options'; $wpcf_capability = apply_filters('wpcf_capability', $capability, $menu, $menu_slug); $wpcf_capability = apply_filters('wpcf_capability' . $menu_slug, $capability, $menu, $menu_slug); /** * allow change capability by filter * full list https://goo.gl/OJYTvl */ if (isset($menu['capability_filter'])) { $wpcf_capability = apply_filters($menu['capability_filter'], $wpcf_capability, $menu, $menu_slug); } /** * add submenu */ $hook = add_submenu_page($menu_parent, isset($menu['page_title']) ? $menu['page_title'] : $menu['menu_title'], $menu['menu_title'], $wpcf_capability, $menu_slug, array_key_exists('function', $menu) ? $menu['function'] : null); // For given menu slug, publish the final hook name in case we need it somewhere. do_action("wpcf_admin_add_submenu_page_{$menu_slug}", $hook); if (!empty($menu_slug)) { wpcf_admin_plugin_help($hook, $menu_slug); } /** * add action */ if (!array_key_exists('load_hook', $menu) && array_key_exists('function', $menu) && is_string($menu['function'])) { $menu['load_hook'] = sprintf('%s_hook', $menu['function']); } if (!empty($menu['load_hook']) && function_exists($menu['load_hook'])) { $action = sprintf('load-%s', array_key_exists('hook', $menu) ? $menu['hook'] : $hook); add_action($action, $menu['load_hook']); } /** * add submenu to submenu */ if (array_key_exists('submenu', $menu)) { foreach ($menu['submenu'] as $submenu_slug => $submenu) { wpcf_admin_add_submenu_page($submenu, $submenu_slug, $hook); } } return $hook; }
/** * Menu hook. */ function wpcf_access_admin_menu_hook() { $hook = add_submenu_page('wpcf', __('Access Control and User Roles', 'wpcf'), __('Access Control and User Roles', 'wpcf'), 'manage_options', 'wpcf-access', 'wpcf_access_admin_menu_page'); wpcf_admin_plugin_help($hook, 'wpcf-access'); add_action('load-' . $hook, 'wpcf_access_admin_menu_load'); }
/** * admin_menu hook. */ function wpcf_admin_menu_hook() { $wpcf_capability = apply_filters('wpcf_capability', 'manage_options'); add_menu_page(__('Types', 'wpcf'), __('Types', 'wpcf'), $wpcf_capability, 'wpcf', 'wpcf_admin_menu_summary', 'none'); $subpages = array('wpcf-ctt' => array('page_title' => __('Custom Types and Taxonomies', 'wpcf'), 'menu_title' => __('Types & Taxonomies', 'wpcf'), 'function' => 'wpcf_admin_menu_summary_ctt'), 'wpcf-cf' => array('page_title' => __('Custom Fields', 'wpcf'), 'menu_title' => __('Custom Fields', 'wpcf'), 'function' => 'wpcf_admin_menu_summary'), 'wpcf-custom-fields-control' => array('page_title' => __('Custom Fields Control', 'wpcf'), 'menu_title' => __('Custom Fields Control', 'wpcf'), 'function' => 'wpcf_admin_menu_custom_fields_control'), 'wpcf-um' => array('page_title' => __('User Fields', 'wpcf'), 'menu_title' => __('User Fields', 'wpcf'), 'function' => 'wpcf_usermeta_summary', 'load-hook' => 'wpcf_admin_menu_summary_hook'), 'wpcf-user-fields-control' => array('page_title' => __('User Fields Control', 'wpcf'), 'menu_title' => __('User Fields Control', 'wpcf'), 'function' => 'wpcf_admin_menu_user_fields_control'), 'wpcf-import-export' => array('page_title' => __('Import/Export', 'wpcf'), 'menu_title' => __('Import/Export', 'wpcf'), 'function' => 'wpcf_admin_menu_import_export'), 'wpcf-custom-settings' => array('page_title' => __('Settings', 'wpcf'), 'menu_title' => __('Settings', 'wpcf'), 'function' => 'wpcf_admin_menu_settings'), 'wpcf-help' => array('page_title' => __('Help', 'wpcf'), 'menu_title' => __('Help', 'wpcf'), 'function' => 'wpcf_admin_menu_introduction', 'submenu' => array('wpcf-debug-information' => array('page_title' => __('Debug information', 'wpcf'), 'menu_title' => __('Debug information', 'wpcf'), 'function' => 'wpcf_admin_menu_debug_information')))); foreach ($subpages as $menu_slug => $data) { $hook = add_submenu_page('wpcf', $data['page_title'], $data['menu_title'], $wpcf_capability, $menu_slug, $data['function']); if (array_key_exists('submenu', $data)) { foreach ($data['submenu'] as $submenu_slug => $submenu) { add_submenu_page($hook, $submenu['page_title'], $submenu['menu_title'], $wpcf_capability, $submenu_slug, $submenu['function']); } } if (!array_key_exists('load-hook', $data)) { $data['load-hook'] = sprintf('%s_hook', $data['function']); } wpcf_admin_plugin_help($hook, $menu_slug); add_action('load-' . $hook, $data['load-hook']); } if (isset($_GET['page'])) { switch ($_GET['page']) { case 'wpcf-edit': $title = isset($_GET['group_id']) ? __('Edit Group', 'wpcf') : __('Add New Group', 'wpcf'); $hook = add_submenu_page('wpcf', $title, $title, 'manage_options', 'wpcf-edit', 'wpcf_admin_menu_edit_fields'); add_action('load-' . $hook, 'wpcf_admin_menu_edit_fields_hook'); wpcf_admin_plugin_help($hook, 'wpcf-edit'); break; case 'wpcf-edit-type': $title = isset($_GET['wpcf-post-type']) ? __('Edit Custom Post Type', 'wpcf') : __('Add New Custom Post Type', 'wpcf'); $hook = add_submenu_page('wpcf', $title, $title, 'manage_options', 'wpcf-edit-type', 'wpcf_admin_menu_edit_type'); add_action('load-' . $hook, 'wpcf_admin_menu_edit_type_hook'); wpcf_admin_plugin_help($hook, 'wpcf-edit-type'); break; case 'wpcf-edit-tax': $title = isset($_GET['wpcf-tax']) ? __('Edit Taxonomy', 'wpcf') : __('Add New Taxonomy', 'wpcf'); $hook = add_submenu_page('wpcf', $title, $title, 'manage_options', 'wpcf-edit-tax', 'wpcf_admin_menu_edit_tax'); add_action('load-' . $hook, 'wpcf_admin_menu_edit_tax_hook'); wpcf_admin_plugin_help($hook, 'wpcf-edit-tax'); break; case 'wpcf-edit-usermeta': $title = isset($_GET['group_id']) ? __('Edit User Fields Group', 'wpcf') : __('Add New User Fields Group', 'wpcf'); $hook = add_submenu_page('wpcf', $title, $title, 'manage_options', 'wpcf-edit-usermeta', 'wpcf_admin_menu_edit_user_fields'); add_action('load-' . $hook, 'wpcf_admin_menu_edit_user_fields_hook'); wpcf_admin_plugin_help($hook, 'wpcf-edit-usermeta'); break; } } // Check if migration from other plugin is needed if (class_exists('Acf') || defined('CPT_VERSION')) { $hook = add_submenu_page('wpcf', __('Migration', 'wpcf'), __('Migration', 'wpcf'), 'manage_options', 'wpcf-migration', 'wpcf_admin_menu_migration'); add_action('load-' . $hook, 'wpcf_admin_menu_migration_hook'); wpcf_admin_plugin_help($hook, 'wpcf-migration'); } do_action('wpcf_menu_plus'); // remove the repeating Types submenu remove_submenu_page('wpcf', 'wpcf'); }
function wpcf_admin_add_submenu_page($menu, $menu_slug = null, $menu_parent = 'wpcf') { if (!is_admin()) { return; } $wpcf_capability = apply_filters('wpcf_capability', 'manage_options'); $menu_slug = array_key_exists('menu_slug', $menu) ? $menu['menu_slug'] : $menu_slug; /** * add submenu */ $hook = add_submenu_page($menu_parent, isset($menu['page_title']) ? $menu['page_title'] : $menu['menu_title'], $menu['menu_title'], $wpcf_capability, $menu_slug, array_key_exists('function', $menu) ? $menu['function'] : null); if (!empty($menu_slug)) { wpcf_admin_plugin_help($hook, $menu_slug); } /** * add action */ if (!array_key_exists('load_hook', $menu) && array_key_exists('function', $menu)) { $menu['load_hook'] = sprintf('%s_hook', $menu['function']); } if (!empty($menu['load_hook']) && function_exists($menu['load_hook'])) { $action = sprintf('load-%s', array_key_exists('hook', $menu) ? $menu['hook'] : $hook); add_action($action, $menu['load_hook']); } /** * add submenu to submenu */ if (array_key_exists('submenu', $menu)) { foreach ($menu['submenu'] as $submenu_slug => $submenu) { wpcf_admin_add_submenu_page($submenu, $submenu_slug, $hook); } } return $hook; }