| | |
| | | |
| | | jvb_register_do_once('buildDirectories', [$this, 'activate']); |
| | | add_action('init', [$this, 'registerDirectories']); |
| | | add_filter('render_block', [$this, 'renderBlock'], 998, 3); |
| | | add_filter('pre_render_block', [$this, 'renderBlock'], 20, 3); |
| | | } |
| | | |
| | | public function registerDirectories():void |
| | |
| | | public function getDirectories():array |
| | | { |
| | | $directories = get_option(BASE.'directories'); |
| | | |
| | | if (!$directories) { |
| | | $directories = []; |
| | | //content |
| | | |
| | | $content = Registrar::getFeatured('show_directory', 'post'); |
| | | $content = Registrar::withFeature('show_directory', 'post'); |
| | | if(!empty($content)) { |
| | | foreach ($content as $key) { |
| | | $directories[$key] = 'content'; |
| | | } |
| | | } |
| | | |
| | | $taxonomies = Registrar::getFeatured('show_directory', 'term'); |
| | | $taxonomies = Registrar::withFeature('show_directory', 'term'); |
| | | if(!empty($taxonomies)) { |
| | | foreach ($taxonomies as $key) { |
| | | $directories[$key] = 'taxonomy'; |
| | | } |
| | | } |
| | | |
| | | $users = Registrar::getFeatured('show_directory', 'user'); |
| | | $users = Registrar::withFeature('show_directory', 'user'); |
| | | if(!empty($users)) { |
| | | foreach ($users as $key) { |
| | | $directories[$key] = 'user'; |
| | |
| | | $title = $config['title']; |
| | | //Bail early if we've already created the page |
| | | $existing = new WP_Query([ |
| | | 'post_type' => BASE.'dash', |
| | | 'post_type' => BASE.'directory', |
| | | 'name' => sanitize_title($title), |
| | | 'posts_per_page' => 1, |
| | | ]); |
| | |
| | | // ]; |
| | | // } |
| | | // } |
| | | |
| | | if (!empty($created)) { |
| | | update_option(BASE.'directory_ids', $created); |
| | | } |
| | |
| | | protected function buildDirectoryList():array |
| | | { |
| | | $saved = get_option(BASE.'directory_list', []); |
| | | |
| | | if (empty($saved)) { |
| | | $all = new WP_Query([ |
| | | 'post_type' => BASE.'directory', |
| | |
| | | string $name = '', |
| | | string $url = '', |
| | | string $ID = '', |
| | | $extra = false |
| | | ?array $extra = null |
| | | ):array { |
| | | if ($name == '') { |
| | | $name = get_the_title(); |
| | |
| | | $config = Registrar::getInstance($slug); |
| | | $aOpen = '<a href="'.$directory['url'].'" title="See our list of '.$directory['title'].'">'; |
| | | $aClose = '</a>'; |
| | | $cache .= '<li class="directory col start"> |
| | | $cache .= '<li class="directory col left"> |
| | | '. $aOpen.jvbIcon($config->getIcon() !== '' ? $config->getIcon() :'list-dashes').$directory['title'].$aClose; |
| | | if (!empty($directory['description'])) { |
| | | $cache .= '<div class="description">'; |
| | |
| | | ); |
| | | if ($current !== '' && array_key_exists($current, $this->directories())) { |
| | | $open = ($open) ? ' open' : ''; |
| | | $cache = '<details'.$open.'><summary class="row btw">Other '.$this->referAs(true).':</summary>'. |
| | | $cache = '<details'.$open.'><summary class="row x-btw">Other '.$this->referAs(true).':</summary>'. |
| | | str_replace('id="'.$current.'"', 'id="'.$current.'" class="current"', $cache) |
| | | .'</details>'; |
| | | } |
| | |
| | | return $this->cache->remember( |
| | | $cacheKey, |
| | | function() use ($slug, $type, $registrar, $config, $paged) { |
| | | $out = '<h1>' . $this->directoryTitle($registrar) . '</h1>'; |
| | | |
| | | $out = '<h1>' . $config['title'] . '</h1>'; |
| | | $out .= '<div class="description">'; |
| | | foreach ($config['description'] ?? [] as $p) { |
| | | $out .= '<p>' . $p . '</p>'; |
| | | } |
| | | $out .= '</div>'; |
| | | $link = match($registrar->getType()) { |
| | | 'post' => get_post_type_archive_link($registrar->getBased()), |
| | | 'term' => false, |
| | | 'user' => get_post_type_archive_link($registrar->getProfile()->getBased()), |
| | | default => false, |
| | | }; |
| | | $out .= $link ? '<ul class="buttons"><li><a href="'.$link.'">See All</a></li></ul>' : ''; |
| | | $out .= $this->renderIndex($slug); |
| | | |
| | | $list = []; |
| | |
| | | |
| | | $get = new WP_Query($args); |
| | | |
| | | $hasExtra = $registrar->hasFeature('directory_extra'); |
| | | $hasExtra = !empty($config['directory_extra']??[]); |
| | | if ($get->have_posts()) { |
| | | while ( $get->have_posts() ) { |
| | | $get->the_post(); |
| | |
| | | $children =$this->renderListChunk($taxonomy, $term->term_id); |
| | | $out .= '<li>'; |
| | | if ($children !== '') { |
| | | $out .= '<details class="term"><summary class="row btw"><a href="'.get_term_link($term->term_id, $term->taxonomy).'" title="See more '.html_entity_decode($term->name).'">'.$term->name.'</a></summary>'; |
| | | $out .= '<details class="term"><summary class="row x-btw"><a href="'.get_term_link($term->term_id, $term->taxonomy).'" title="See more '.html_entity_decode($term->name).'">'.$term->name.'</a></summary>'; |
| | | $out .= $children; |
| | | $out .= '</details>'; |
| | | } else { |
| | |
| | | |
| | | $out = '<ul class="list-none">'; |
| | | foreach ($list as $letter => $items) { |
| | | $out .= '<li id="starts-with-'.$letter.'" class="row a-start btw nowrap"><h3>'.strtoupper($letter).'</h3><ul>'; |
| | | $out .= '<li id="starts-with-'.$letter.'" class="row top x-btw nowrap"><h3>'.strtoupper($letter).'</h3><ul>'; |
| | | foreach ($items as $item) { |
| | | $extra = ''; |
| | | if (!empty($item['extra'])) { |
| | | $extra = '<span>'; |
| | | $extra = '<ul class="term-list row">'; |
| | | foreach ($item['extra'] as $ext) { |
| | | $icon = Registrar::getInstance($ext['type'])->getIcon(); |
| | | $umamiType = ($ext['type'] === BASE.'shop') ? 'click_shop' : 'click_taxonomy'; |
| | | $extra .= '<a href="'.$ext['url'].'"'.$umami->trackContentClick($item['id'],$umamiType, ['source_type' => 'directory']).'>'.$ext['name'].'</a>'; |
| | | $extra .= '<li><a href="'.$ext['url'].'"'.$umami->trackContentClick($item['id'],$umamiType, ['source_type' => 'directory']).'>'.jvbIcon($icon).$ext['name'].'</a></li>'; |
| | | } |
| | | $extra .= '</span>'; |
| | | $extra .= '</ul>'; |
| | | } |
| | | |
| | | $item_html = apply_filters('jvb_directory_render_item', '', $item, $type, $extra); |
| | | |
| | | if (empty($item_html)) { |
| | | $item_html = '<li class="row btw"> |
| | | $item_html = '<li class="row x-btw"> |
| | | <a href="'.$item['url'].'" title="More about '.$item['name'].'"> |
| | | '.$item['name'].'</a>'.$extra.' |
| | | </li>'; |
| | |
| | | return $out; |
| | | } |
| | | |
| | | public function renderBlock(string $content, array $block, WP_Block $instance) |
| | | public function renderBlock(?string $content, array $block, ?WP_Block $instance) |
| | | { |
| | | if (!is_post_type_archive(BASE.'directory') && !is_singular(BASE.'directory')) { |
| | | return $content; |
| | |
| | | return $content; |
| | | } |
| | | |
| | | error_log('Still working on directory manager...'); |
| | | // For archive page |
| | | if (is_post_type_archive(BASE.'directory') && $block['blockName'] === 'core/group') { |
| | | return ($block['attrs']['tagName']??'' === 'main') ? '<main>'.$this->renderArchive().'</main>' : $content; |