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('');
$currentSubmenuPages->each(function ($subpage) use ($activePage, $currentSubmenuPages) {
$activeClass = ($subpage['menu_slug'] === $activePage) ? ' nav-tab-active' : '';
$symbol = strpos($subpage['parent_slug'], '?') ? '&' : '?';
$firstPage = $currentSubmenuPages[0];
$parentSlugCheck = ($firstPage['parent_slug'] !== $firstPage['menu_slug']) ? $subpage['parent_slug'] : '';
$slug = $parentSlugCheck . $symbol . 'page=' . $subpage['menu_slug'];
printf(
'%s',
$slug,
$activeClass,
$subpage['menu_title']
);
});
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('');
}
}