From f859e64a57c624ff2daa2b21355f65a49fd4807d Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Sat, 29 Aug 2026 03:09:12 +0000
Subject: [PATCH] =Some more tweaks. Mostly on the MenuBlock and adding the Meta.php to WooCommerce Products
---
inc/blocks/MenuBlock.php | 50 +++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 43 insertions(+), 7 deletions(-)
diff --git a/inc/blocks/MenuBlock.php b/inc/blocks/MenuBlock.php
index 22ba279..dd69c46 100644
--- a/inc/blocks/MenuBlock.php
+++ b/inc/blocks/MenuBlock.php
@@ -5,7 +5,9 @@
use JVBase\base\Site;
use JVBase\managers\Cache;
use JVBase\meta\Meta;
+use JVBase\registrar\Registrar;
use WP_Block;
+use WP_Post;
use WP_Query;
if (!defined('ABSPATH')) {
@@ -30,14 +32,28 @@
public function __construct()
{
$this->cache = Cache::for('menu', 'post', WEEK_IN_SECONDS);
+ $this->cache->flush();
if (Site::hasIntegration('square')) {
$this->base = '_square_';
} else if (Site::hasIntegration('helcim')) {
$this->base = '_helcim_';
}
add_action('init', [ $this, 'registerBlock' ]);
+ add_action('save_post', [$this, 'flushCache'], 10, 2);
}
+ public function flushCache(int $postID, WP_Post $post):void
+ {
+ if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
+ if (wp_is_post_revision($postID) || wp_is_post_autosave($postID)) return;
+
+ $postType = $post->post_type;
+ if ($postType !== 'product' && !in_array($postType, Registrar::getFoodMenuTypes())) {
+ return;
+ }
+ error_log('Flushing food menu block cache');
+ $this->cache->flush();
+ }
public function registerBlock():void
{
register_block_type($this->path, [
@@ -66,7 +82,6 @@
return '';
}
jvbInlineStyles('forms');
- $this->cache->flush();
return $this->cache->remember(
$this->params,
function() {
@@ -84,6 +99,23 @@
$this->renderOnThisPage();
}
+ protected function termHasPosts(int $termID):bool
+ {
+ $query = new WP_Query([
+ 'post_type' => 'product',
+ 'post_status' => 'publish',
+ 'posts_per_page' => 1,
+ 'fields' => 'ids',
+ 'tax_query' => [
+ [
+ 'taxonomy' => 'product_cat',
+ 'terms' => $termID
+ ]
+ ]
+ ]);
+ return $query->have_posts();
+ }
+
protected function renderHeader():void
{
$title = 'Our Menu';
@@ -99,7 +131,7 @@
$sections = $this->getSections();
foreach ($sections as $section) {
// if (!jvbTermHasPosts($section['id'], BASE.'section')) {
- if (!jvbTermHasPosts($section['id'], 'product_cat')) {
+ if (!$this->termHasPosts($section['id'])) {
continue;
}
?>
@@ -179,23 +211,27 @@
$fields = $meta->getAll();
-// jvbDump($fields, 'Fields');
+
$excerpt = get_the_excerpt($ID);
$isVariable = !empty($fields['variations']??[]);
$variations = $isVariable ? array_map('floatval', array_column($fields['variations'], 'price')) : [];
$priceRange = $isVariable ?
- (min($variations).' - '.max($variations)) :
- $fields['_price']??'';
+ (jvbCurrency(min($variations)).' - '.jvbCurrency(max($variations))) :
+ jvbCurrency($fields['_price']??'');
+// if (!$isVariable) {
+// jvbDump($fields, 'Fields');
+// }
$out = sprintf(
- '<div class="menu-item%s" data-section="%s" data-label="%s" data-id="%s">
+ '<div id="%s" class="menu-item%s" data-section="%s" data-label="%s" data-id="%s">
<div class="header row x-btw">
<h3>%s</h3>
- <p class="price">$%s</p>
+ <p class="price">%s</p>
</div>
<div class="description">%s</div>
<div class="info col right">',
+ sanitize_title($fields['post_title']),
$isVariable ? ' variable' : '',
$slug,
$fields['post_title'],
--
Gitblit v1.10.0