parentSlug = $args['parent_slug']; $this->menuTitle = $args['menu_title']; $this->capability = $args['capability']; $this->menuSlug = $args['menu_slug']; $this->hasTab = $args['include_tab']; $this->subpageTitle = $args['select_title'] ? $args['select_title'] : $this->menuTitle; add_action('admin_menu', [$this, 'submenuPage']); } public function submenuPage() { add_submenu_page( $this->parentSlug, $this->subpageTitle, $this->menuTitle, $this->capability, $this->menuSlug, [$this, 'optionsDisplay'] ); } /** * Show the option page. * * @return mixed */ public function optionsDisplay() { $submenuPages = Data::getSubpages(); if (!$submenuPages) { return; } $activePage = $_GET['page'] ?: $this->menuSlug; print('
'); settings_errors(); $this->showTitle($submenuPages); $this->showTabs($submenuPages, $activePage); $this->showForm($submenuPages, $activePage); print('
'); } /** * Show the title if checked. * * @param object $submenuPages * @return string */ private function showTitle($submenuPages) { $subpageHasCheckedTitle = $submenuPages->filter(function ($subpage) { return $subpage['menu_slug'] === $this->menuSlug && $subpage['select_title'] !== 'None'; }); if (!$subpageHasCheckedTitle->toArray()) { return; } printf('

%s

', $subpageHasCheckedTitle->pluck('select_title')->first()); } /** * Show tabs if checked. * * @param object $submenuPages * @param string $activePage * @return mixed */ private function showTabs($submenuPages, $activePage) { if (!$this->hasTab) { return; } $currentSubmenuPages = $submenuPages->filter(function ($subpage) { return $subpage['parent_slug'] === $this->parentSlug; })->values(); print(''); } /** * Show the form with fields and submit button. * * @param object $submenuPages * @param string $activePage * @return mixed */ private function showForm($submenuPages, $activePage) { $submenuPageHasFields = $submenuPages->filter(function ($subpage) use ($activePage) { return $subpage['menu_slug'] === $activePage && $subpage['fields']; }); if (!$submenuPageHasFields->all()) { return; } print('
'); $submenuPageHasFields->map(function ($subpage) { settings_fields($subpage['menu_slug']); do_settings_sections($subpage['menu_slug']); }); $fieldHasFieldName = $submenuPageHasFields->pluck('fields') ->flatten(1) ->filter(function ($field) { return isset($field['field_name']); })->all(); if ($fieldHasFieldName) { submit_button(); } print('
'); } }