cache = CacheManager::for('menu', WEEK_IN_SECONDS)->connectTo('post', 'menu_item'); add_action('init', [ $this, 'registerBlock' ]); } public function registerBlock() { register_block_type($this->path, [ 'render_callback' => [ $this, 'render' ] ]); } protected function buildParams():void { if (is_post_type_archive(BASE.'menu_item')) { $this->params = ['all']; } elseif (is_tax(BASE.'section')) { jvbDump(get_queried_object()); $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); $cache = $this->cache->get($key); if ($cache) { return $cache; } ob_start(); $this->renderBlock(); $content = ob_get_clean(); $this->cache->set($key, $content); return $content; } protected function renderBlock():void { $this->renderHeader(); $this->renderMenu(); $this->renderOnThisPage(); } protected function renderHeader():void { $title = 'Our Menu'; if(!in_array('all', $this->params)) { $title = ''.$title.''; } ?>

sections) { $options = new MetaManager(null, 'options'); $sections = $options->getValue('menu_section_order'); if (!is_array($sections)) { $sections = []; } $this->sections = $sections; } return $this->sections; } protected function renderMenu():void { $sections = $this->getSections(); foreach ($sections as $section) { $items = new WP_Query([ 'post_type' => BASE.'menu_item', 'order' => 'ASC', 'posts_per_page' => -1, 'tax_query' => [ [ 'taxonomy' => BASE.'section', 'terms' => (int) $section['id'], ] ], 'fields' => 'ids' ]); if ($items->have_posts()) { $slug = sanitize_title($section['name']); ?> getAll([ 'post_title', '_square_catalog_id', 'price', 'product_variations', 'max_order', 'min_order', 'step' ]); $priceRange = jvbCurrency($values['price']); $variations = $values['product_variations']; if(!empty($variations) && $variations[0]['name'] === '') { $variations = []; } if (!empty($variations)) { $prices = []; foreach ($variations as $row) { if (isset($row['price']) && is_numeric($row['price'])) { $prices[] = (float) $row['price']; } } if (!empty($prices)) { $priceRange = jvbCurrency(min($prices)).' - '.jvbCurrency(max($prices)); } } $max = $values['max_order']; $min = $values['min_order']; $step = $values['step']; $max = ($max === '') ? 50 : $max; $min = ($min === '') ? 0 : $min; $step = ($step === '') ? 1 : $step; ?> details)) { return; } echo jvbOnThisPage(array_keys($this->details)); } }