cache = Cache::for('menu', DAY_IN_SECONDS)->connect('post'); add_action('init', [ $this, 'registerBlock' ]); } public function registerBlock():void { register_block_type($this->path, [ 'render_callback' => [ $this, 'render' ] ]); } protected function buildParams():void { $registered = Registrar::withFeature('is_calendar', 'post'); $registered = array_map('jvbCheckBase', $registered); $types = []; foreach ($registered as $type) { $registrar = Registrar::getInstance($type); $types[$type] = $registrar->getPlural(); } $this->content = $types; $taxonomies = []; foreach ($registered as $type) { $registrar = Registrar::getInstance($type); $taxonomies = array_merge($taxonomies, $registrar->registrar->taxonomies); } $taxonomies = array_map('jvbCheckBase', $taxonomies); $types = []; foreach ($taxonomies as $type) { $registrar = Registrar::getInstance($type); $types[$type] = $registrar->getPlural(); } $this->taxonomies = $types; if (is_post_type_archive($registered)) { $this->params = ['all']; } elseif (is_tax($taxonomies)) { $this->params = []; } else { $this->params = []; } } public function render(array $attributes, string $content, WP_Block $block) { $this->buildParams(); if (empty($this->params)) { return ''; } $key = $this->cache->generateKey($this->params); $this->cache->flush(); return $this->cache->remember( $key, function() { ob_start(); $this->renderBlock(); return ob_get_clean(); } ); } protected function renderBlock():void { $this->renderHeader(); $this->renderCalendar(); $this->renderOnThisPage(); } protected function renderHeader():void { $title = 'Events'; if(!in_array('all', $this->params)) { $title = ''.$title.''; } ?>

buildNav(); ?>

We bring southern-style barbeque eats with Northern flair to any event throughout Alberta.

Want to bring us to your event? Let us know, we'd love to come!

content) > 1) { $out = []; foreach ($this->content as $slug => $title) { $out[] = sprintf( '
  • %s
  • ', get_post_type_archive_link($slug), $title, $title ); } if (!empty($out)) { $content = sprintf( '', implode('', $out) ); } } if (!empty($this->taxonomies)) { foreach ($this->taxonomies as $slug => $title) { $check = get_terms([ 'taxonomy' => $slug, 'hide_empty' => true, 'orderby' => 'name', ]); $out = []; if ($check && !is_wp_error($check)) { foreach ($check as $term) { $out[] = sprintf( '
  • %s
  • ', get_term_link($term->term_id, $slug), $term->name, $term->name ); } } if (!empty($out)) { $taxonomies .= sprintf( '', $slug, $title, implode('', $out) ); } } } if (!empty($content) || !empty($taxonomies)) { echo sprintf( '', $content, $taxonomies ); } } protected function renderCalendar():void { ?>

    Upcoming Events

    getEvents() ?>

    Past Events

    getEvents(true) ?>
    name]; } if (is_singular()) { return [get_queried_object()->post_type]; } if (is_tax()) { $tax = get_queried_object(); jvbDump($tax); } return []; } protected function getEvents(bool $past = false):string { $events = ''; if (is_singular()) { return $this->formatSingular(); } $page = $past ? $_GET['jpast']??1 : $_GET['jpage']??1; $items = new WP_Query([ 'post_type' =>$this->getCurrentPostTypes(), 'post_status' => 'publish', 'orderby' => 'meta_value', 'meta_key' => BASE.'date_start', 'posts_per_page'=> 30, 'fields' => 'ids', 'paged' => $page, 'meta_type' => 'DATETIME', 'meta_query' => [ [ 'key' => BASE.'past', 'value' => '1', 'compare' => $past ? '=' : '!=' ] ] ]); $events = implode('', array_map([$this, 'formatItem'], $items->posts)); $events = empty($events) ? '

    Nothing here yet

    ' : sprintf( '', $events ); $total = $items->max_num_pages; if ($total > 1) { $big = 999999999; // need an unlikely integer $format = $past ? 'jpast' : 'jpage'; $events .= paginate_links([ 'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ), 'format' => '?'.$format.'=%#%', 'current' => $page, 'total' => $total ]); } return $events; } protected function formatItem(int $ID):string { $meta = Meta::forPost($ID); $type = jvbNoBase(get_post_type($ID)); return sprintf( '
  • %s

    %s

    %s
  • ', $type, empty($meta->get('post_thumbnail')) ? '' : jvbFormatImage($meta->get('post_thumbnail'), 'tiny', 'medium'), get_the_permalink($ID), $meta->get('post_title'), date('c', $meta->get('date_start')), date('F j, Y', $meta->get('date_start')), empty($meta->get('post_excerpt')) ? '' : wpautop($meta->get('post_excerpt')) ); } protected function formatSingular():string { return ''; } protected function renderOnThisPage():void { if (empty($this->details)) { return; } echo jvbOnThisPage(array_keys($this->details)); } }