directories = jvbGlobalDirectoryInfo(); if (empty(jvbGlobalDirectories())) { return; } $this->cache = CacheManager::for('directory', WEEK_IN_SECONDS); add_action('init', [$this, 'registerDirectories']); jvb_register_do_once('directories_registered', [$this, 'activate']); add_action('render_block', [$this, 'renderBlock'], 99, 3); } public function registerDirectories() { $plural = 'Directories'; $singular = 'Directory'; register_post_type(BASE.'directory', array( 'labels' => [ 'name' => $plural, 'singular_name' => $singular, 'menu_name' => $plural, 'add_new' => "Add New {$singular}", 'add_new_item' => "Add New {$singular}", 'edit_item' => "Edit {$singular}", 'new_item' => "New {$singular}", 'view_item' => "View {$singular}", 'search_items' => "Search {$plural}", 'not_found' => "No {$plural} found", 'not_found_in_trash' => "No {$plural} found in Trash" ], 'menu_icon' => jvbCSSIcon('asc'), 'public' => true, 'publicly_queryable' => true, 'show_in_menu' => true, 'show_in_admin_bar' => false, 'has_archive' => true, 'rewrite' => array( 'slug' => 'directory', 'with_front' => false ), 'capability_type' => 'post', 'supports' => array('title', 'editor', 'content', 'excerpt', 'custom-fields') )); } public function activate() { $created = []; $directories = []; foreach (jvbGlobalDirectories() as $directory => $type) { switch ($type) { case 'content': $config = JVB_CONTENT; break; case 'tax': $config = JVB_TAXONOMY; break; case 'user': $config = JVB_USER; break; } $title = $config[$directory]['directory']??$config[$directory]['plural']; $excerpt = implode(' ', $config[$directory]['description']??[]); $ID = wp_insert_post([ 'post_type' => BASE.'directory', 'post_title'=> $title, 'post_status'=> 'publish', 'post_excerpt' => $excerpt, 'slug' => sanitize_title($title) ]); if (!is_wp_error($ID)) { add_post_meta($ID, self::$type, $type); add_post_meta($ID, self::$slug, $directory); $created[$directory] = (int)$ID; $slug = sanitize_title($title); $directories[$directory] = [ 'slug' => $slug, 'title' => $title, 'ID' => $ID, 'url' => get_home_url(null, '/directory/'.$slug), 'page' => $title, 'description' =>$config[$directory]['description']??[], 'type' => $type, 'extra' => $config[$directory]['directory_extra'] ??[], ]; } if (jvbCheck('isGrouped', $config[$directory])) { $title = $title. ', but Grouped'; $excerpt = 'Too many options in the list? This is grouped by type, nested deep, man.'; $slug = sanitize_title(str_replace(', but', '', $title)); $ID = wp_insert_post([ 'post_type' => BASE.'directory', 'post_title'=> $title, 'post_status'=> 'publish', 'post_excerpt' => $excerpt, 'slug' => $slug ]); if (!is_wp_error($ID)) { add_post_meta($ID, self::$type, $type); add_post_meta($ID, self::$slug, $directory.'-grouped'); add_post_meta($ID, BASE.'grouped_directory', 'yup'); $created[$directory.'-grouped'] = (int)$ID; $directories[$directory.'-grouped'] = [ 'slug' => $slug, 'title' => $title, 'ID' => $ID, 'url' => get_home_url(null, '/directory/'.$slug), 'page' => $title, 'description' =>$config[$directory]['description']??[], 'type' => $type, 'extra' => $config[$directory]['directory_extra'] ??[], ]; } } } if (jvbCheck('has_map', JVB_SITE)) { $ID = wp_insert_post([ 'post_type' => BASE.'directory', 'post_title' => 'Map', 'post_status'=> 'publish', 'slug' => 'map', ]); if (!is_wp_error($ID)) { add_post_meta($ID, self::$type, 'map'); $created['map'] = (int)$ID; $directories['map'] = [ 'slug' => 'map', 'title' => 'Map', 'ID' => $ID, 'url' => get_home_url(null, '/directory/map'), 'page' => 'Map', 'type' => 'term', ]; } } if (!empty($created)) { update_option(BASE.'directory_ids', $created); } if (!empty($directories)) { update_option(BASE.'directory_list', $directories); } } public static function getConfig(int $ID):array { $type = get_post_meta($ID, self::$type, true); $slug = get_post_meta($ID, self::$slug, true); switch ($type) { case 'content': return JVB_CONTENT[$slug]; case 'taxonomy': return JVB_TAXONOMY[$slug]; case 'user': return JVB_USER[$slug]; } return []; } public function letters():array { return [ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' ]; } protected function alphabetizeMe( array $list, string $name = '', string $url = '', string $ID = '', $extra = false ):array { if ($name == '') { $name = get_the_title(); } if ($url == '') { $url = get_the_permalink(); } if ($ID == '') { $ID = get_the_ID(); } $first = strtolower(mb_substr($name, 0, 1)); $list[$first][] = array( 'name' => $name, 'url' => $url, 'id' => $ID, 'extra' => $extra, ); return $list; } private function renderArchive(): string { return $this->cache->remember( 'archive', function() { $cache = '
You like lists? We\'ve got \'em!
'.$description.'
'; } $cache .= ''.$p.'
'; } $out .= 'We don\'t have anything here yet.
'; } else { $out .= $this->renderLettersIndex($list); $out .= $this->renderLettersList($list, $slug); } $out .= ''.$p.'
'; } $out .= 'We don\'t have anything here yet.
'; } $out .= $this->renderIndex($slug, true); return $out; } ); } protected function renderListChunk(string $taxonomy, int $parent):string { $get = get_terms([ 'taxonomy' => jvbCheckBase(str_replace('-grouped', '', $taxonomy)), 'hide_empty' => true, 'orderby' => 'name', 'order' => 'ASC', 'parent' => $parent ]); if (!$get || is_wp_error($get)) { return ''; } $out = '