PluginProbe
FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler / 1.7.1
FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler v1.7.1
1.7.1 1.7.0 1.6.6 1.6.5 1.6.4 1.6.3 1.6.2 1.6.1 1.6.0 1.5.4 1.5.5 1.5.3 1.5.2 1.5.1 1.5.0 1.4.2 1.4.1 1.4.0 1.3.28 1.3.27 1.3.26 1.3.25 1.3.23 1.3.22 1.3.21 All 51 releases
← All changes | app/Hooks/Handlers/ShortCodes/ShopAppHandler.php +21 -17 1.4.0 → 1.7.1 View file →
@@ -10,11 +10,11 @@
10 10 use FluentCart\App\Helpers\Helper;
11 11 //use FluentCart\App\Hooks\Handlers\ShortCodes\Buttons\AddToCartShortcode;
12 12 use FluentCart\App\Models\ProductDetail;
13 13 use FluentCart\App\Modules\Templating\AssetLoader;
14 +use FluentCart\App\Services\Renderer\RenderContext;
14 15 use FluentCart\App\Services\Renderer\ShopAppRenderer;
15 16 use FluentCart\App\Services\TemplateService;
16 -use FluentCart\App\Vite;
17 17 use FluentCart\Framework\Support\Arr;
18 18 use FluentCart\Framework\Support\Str;
19 19
20 20 class ShopAppHandler
@@ -44,9 +44,17 @@
44 44 $this->enqueueStyles();
45 45 }
46 46 }, 5);
47 47 add_shortcode(static::SHORT_CODE, function ($shortcodeAttributes, $content, $block) {
48 - return $this->handelShortcodeCall($shortcodeAttributes);
48 + // The shop shortcode registers its own closure rather than going
49 + // through ShortCode::register(), so it declares itself separately.
50 + return RenderContext::declaring(
51 + RenderContext::SOURCE_SHORTCODE,
52 + static::SHORT_CODE,
53 + function () use ($shortcodeAttributes) {
54 + return $this->handelShortcodeCall($shortcodeAttributes);
55 + }
56 + );
49 57 });
50 58 }
51 59
52 60 public function handelShortcodeCall($shortcodeAttributes)
@@ -104,10 +112,9 @@
104 112 'ids' => '',
105 113 'exclude_ids' => '',
106 114 'category' => '',
107 115 'category_id' => '',
108 - 'tag' => '',
109 - 'tag_id' => '',
116 + 'taxonomies' => '',
110 117 'fulfillment_type' => '',
111 118 'product_type' => '',
112 119 'on_sale' => '',
113 120 'sort_by' => '',
@@ -238,9 +245,9 @@
238 245
239 246 $allProducts = $this->getInitialProducts();
240 247 $this->defaultViewData = [
241 248 'products' => Arr::get($allProducts, 'products', []),
242 - 'placeholder_image' => Vite::getAssetUrl('images/placeholder.svg'),
249 + 'placeholder_image' => Helper::getProductPlaceholderUrl(),
243 250 'paginator' => $this->shortcodeAttributes['paginator'],
244 251 'view_mode' => $this->shortcodeAttributes['view_mode'],
245 252 'price_format' => $this->shortcodeAttributes['price_format'],
246 253 'per_page' => $this->shortcodeAttributes['per_page'],
@@ -357,20 +364,17 @@
357 364 $existing = Arr::get($mergedTerms, 'product-categories', []);
358 365 $mergedTerms['product-categories'] = array_unique(array_merge($existing, $categoryTermIds));
359 366 }
360 367
361 - // --- Shortcode attribute: tag (by slug) and tag_id ---
362 - $tagTermIds = [];
363 - if (!empty($this->shortcodeAttributes['tag'])) {
364 - $tagTermIds = Taxonomy::getTermIdsBySlugs($this->shortcodeAttributes['tag'], 'product-tags');
365 - }
366 - if (!empty($this->shortcodeAttributes['tag_id'])) {
367 - $tIds = array_values(array_filter(array_map('intval', array_map('trim', explode(',', $this->shortcodeAttributes['tag_id'])))));
368 - $tagTermIds = array_unique(array_merge($tagTermIds, $tIds));
369 - }
370 - if (!empty($tagTermIds)) {
371 - $existing = Arr::get($mergedTerms, 'product-tags', []);
372 - $mergedTerms['product-tags'] = array_unique(array_merge($existing, $tagTermIds));
368 + // --- Shortcode attribute: taxonomies="product-tags:1,2|product-brands:67" ---
369 + // Any taxonomy registered on products, including store-registered ones.
370 + foreach (Taxonomy::parseShortcodeTaxonomies($this->shortcodeAttributes['taxonomies']) as $taxonomy => $termIds) {
371 + // A segment that resolved to nothing (unknown taxonomy, foreign or
372 + // missing term) must match nothing — dropping it would widen the
373 + // list to products the shortcode never asked for.
374 + $termIds = $termIds ?: [0];
375 + $existing = Arr::get($mergedTerms, $taxonomy, []);
376 + $mergedTerms[$taxonomy] = array_values(array_unique(array_merge($existing, $termIds)));
373 377 }
374 378
375 379 // --- Shortcode attribute: sort_by ---
376 380 if (!empty($this->shortcodeAttributes['sort_by'])) {