cache = Cache::for('dashboard'); if (JVB_TESTING) { $this->cache->flush(); } $this->title = $title; $this->setSlug(empty($slug) ? $title : $slug); $this->icon = $icon; $this->parent = $parent; $this->setID($parent); $this->setURL(); } public function setID(int $parentID):void { if ($this->slug === 'dash') { //We do not need to create the page for the main dash $this->ID = 0; return; } $this->ID = $this->cache->remember( $this->slug.'_ID', function() use ($parentID) { $existing = new WP_Query([ 'post_type' => DashboardManager::$based, 'name' => $this->slug, 'fields' => 'ids', 'posts_per_page'=> 1, ]); if ($existing->have_posts()) { return $existing->posts[0]; } $args = [ 'post_title' => $this->title, 'post_name' => $this->slug, 'post_type' => DashboardManager::$based, 'post_status' => 'publish' ]; if ($parentID > 0) { $args['post_parent'] = $parentID; } return wp_insert_post($args); } ); } public function getID():int { return $this->ID; } public function getParent():int { return $this->parent; } public function setURL():void { if ($this->slug === 'dash') { $this->URL = get_post_type_archive_link(DashboardManager::$based); return; } $this->URL = get_the_permalink($this->ID); } public function getURL():string { return $this->URL; } public function setTitle(string $title):void { $this->title = $title; } public function getTitle():string { return $this->title; } public function setSlug(string $slug):void { $this->ogSlug = $slug; $this->slug = self::sanitizeString($slug); } public function getSlug():string { return $this->slug; } public function setIcon(string $icon):void { $this->icon = $icon; } public function getIcon():string { return $this->icon; } public function setPermission(string $permission):void { $this->permission = $permission; } public function getPermission():?string { return $this->permission; } public function setSection(string $section):void { $this->section = self::sanitizeString($section); } public function getSection():?string { return $this->section; } public function setOrder(int $order):void { $this->order = $order; } public function getOrder():int { return $this->order; } public function setRenderCallback(string $callback):void { } public function render():string { $check = str_replace('-','_',$this->slug); ob_start(); do_action(BASE.'dashboard_page_'.$check, $this->slug, $this->ogSlug); $out = ob_get_clean(); if (empty($out)) { $out = sprintf( '

%s

It doesn\'t look like this page is configured yet: %s.

', $this->title, BASE.'dashboard_page_'.$check ); } return $out; } /********************************************************* * UTILITY ********************************************************/ public static function sanitizeString(string $string):string { return str_replace('_', '-', strtolower(sanitize_title($string))); } public function setScripts(array $scripts):void { $this->scripts = $scripts; } public function getScripts():array { return $this->scripts; } }