*/ public static function props($screen, ?Menu $menu = null): array { $profile = Profile::getInstance(); $title = $menu ? $menu->title() : ''; $url = $menu ? admin_url('admin.php?page=' . $menu->slug()) : ''; $submenus = []; $title_actions = []; if ($menu instanceof Notifications) $submenus = $menu->headerSubmenus($menu->tab); if ($menu instanceof WebiliaConnect) $submenus = $menu->navigation(); if ($menu instanceof Resources) { $header = $menu->header(); $title = $header['title']; $title_actions = $header['actions']; } if (!$menu && in_array($screen->base, ['edit', 'post'], true)) { $object = get_post_type_object($screen->post_type); if ($object) { $creating = $screen->base === 'post' && ($GLOBALS['pagenow'] ?? '') === 'post-new.php'; $title = $screen->base === 'edit' ? $object->labels->name : ($creating ? $object->labels->add_new_item : $object->labels->edit_item); $url = admin_url('edit.php?post_type=' . $screen->post_type); if (!$creating && current_user_can($object->cap->create_posts ?? 'edit_posts')) { $title_actions[] = ['label' => $object->labels->add_new_item, 'url' => admin_url('post-new.php?post_type=' . $screen->post_type)]; } } $submenus = (array) apply_filters('DayTidy/F__DayTidy/Menu/Header__post_type_submenus/submenus', [], $screen); } if (!$menu && in_array($screen->base, ['edit-tags', 'term'], true)) { $object = get_taxonomy($screen->taxonomy); if ($object) $title = $screen->base === 'edit-tags' ? $object->labels->name : $object->labels->edit_item; $url = add_query_arg(['taxonomy' => $screen->taxonomy, 'post_type' => $screen->post_type], admin_url('edit-tags.php')); $submenus = (array) apply_filters('DayTidy/F__DayTidy/Menu/Header__taxonomy_submenus/submenus', [], $screen); } $section = $menu instanceof Onboarding ? [] : Navigation::section($screen, $menu); if ($section) $submenus = array_merge($section, $submenus); $submenus = (array) apply_filters('DayTidy/F__DayTidy/Menu/Header__submenus/submenus', $submenus, $title, $url); $nav = []; foreach ($submenus as $item) { if (!is_array($item) || !isset($item['title'], $item['url'])) continue; $nav[] = [ 'label' => $item['title'], 'url' => $item['url'], 'active' => !empty($item['selected']), 'icon' => $item['icon'] ?? 'wui-icon--general', ]; } $connected = Permissions::manage() && Connection::connected(); $actions = (array) apply_filters('DayTidy/F__DayTidy/Menu/Header__actions/actions', Permissions::manage() ? [ ['label' => $connected ? __('Connected to Webilia', 'daytidy') : __('Connect with Webilia', 'daytidy'), 'url' => Connection::url(), 'variant' => 'primary'], ] : [], $title, $url); $announcement = Engagement::action(); if ($announcement) array_unshift($actions, $announcement); return [ 'class' => $connected ? 'daytidy-webilia-connected' : '', 'title' => $menu instanceof Dashboard ? __('DayTidy', 'daytidy') : '', 'home_url' => admin_url('admin.php?page=daytidy'), 'mark_html' => 'DayTidy', 'page_title' => $menu instanceof Dashboard ? '' : html_entity_decode($title, ENT_QUOTES, 'UTF-8'), 'title_actions' => $title_actions, 'nav' => $nav, 'nav_label' => __('Section navigation', 'daytidy'), 'actions' => $actions, ]; } /** @param array $props */ public static function render(array $props): string { $items = (array) ($props['nav'] ?? []); $props['nav'] = []; $header = SharedHeader::render($props); $links = ''; foreach ($items as $item) { if (!is_array($item)) continue; $url = esc_url($item['url'] ?? ''); if ($url === '') continue; $icon = (string) ($item['icon'] ?? ''); if (!preg_match('/\\b(wui-icon--[a-z0-9-]+)\\b/', $icon, $matches)) $matches[1] = 'wui-icon--general'; $active = !empty($item['active']); $links .= '' . esc_html($item['label'] ?? '') . ''; } if ($links === '') return $header; $nav = ''; $end = strrpos($header, ''); return $end === false ? $header : substr($header, 0, $end) . $nav . substr($header, $end); } }