Skip to content

Storefront

What shoppers see outside the admin: the shop archive and its filters, the customer account, and the structured data search engines read.

The shop archive

The shop archive as the default theme renders it — filter sidebar, product grid, sale badges, and add-to-cart.

Shop filters

The shop page and every product category archive carry a filter sidebar:

FilterSource
SearchProduct title, excerpt and SKU — including variation SKUs
PriceA dual-handle slider bounded by the cheapest and dearest product on offer
CategoryProduct categories, with a count each
AttributesEvery attribute marked Show in filters — see Products
In stock onlyThe same availability rule the stock badge uses
On saleOnly sales that are actually running

Filtering happens over AJAX and rewrites the address bar, so:

  • a filtered view is a real URL you can share or bookmark
  • the back button steps back through the filters
  • sorting and pagination keep the filters applied

With JavaScript switched off the panel is a plain GET form with an Apply filters button, and every filter still works.

URLs

Filters are ordinary query parameters, so you can link straight to a filtered view:

/product?s=phone&min_price=1000&max_price=25000
/product?product_cat[]=samsung&in_stock=1
/product?attr[color][]=blue&attr[size][]=xl&on_sale=1

Values within one attribute are OR'd, separate attributes are AND'd — picking Red and Blue widens the results, adding a size narrows them.

The attribute index

Attribute filtering reads a derived table that is rebuilt whenever a product is saved. If it ever drifts — after a bulk import, or a direct database edit — rebuild it:

bash
php artisan falcon:reindex-attributes
RowWhereChosen by
You may also likeProduct pageYou, in Product Data → Linked Products
Related productsProduct pageAutomatically, from the product's category
You may be interested inCartYou, as cross-sells on the products in the cart

Cross-sells never suggest something already in the cart.

Customer accounts

Under My Account, signed-in customers get orders, downloads, profile, password — and:

Saved addresses

Customers save addresses under My Account → Addresses, each with an optional label (Home, Office). Separate defaults are kept for billing and shipping, because being billed at home and shipped to work is ordinary.

At checkout the default address fills the form server-side, so it works with JavaScript off. When more than one address is saved, a picker appears to switch between them. A Save this address tick on checkout adds the address after the order is placed — near duplicates are recognised and not added twice.

Structured data

Product pages emit schema.org JSON-LD, which is what puts price, availability and star ratings into a search result instead of a bare link.

ProductMarkup
SimpleOffer with price, currency, availability, and priceValidUntil while a sale runs
VariableAggregateOffer with lowPrice, highPrice and offerCount

Reviews add an aggregateRating. An attribute named Brand is emitted as the product's brand.

Prices in the markup come from the same helper the page itself uses, so the structured data can never advertise a price the shop will not honour — search engines treat that as a violation, not a rounding error.

Testing it

Paste the page's JSON-LD into Google's Rich Results Test using the Code tab. Once the site is public, test by URL instead — a rich result only appears when the product URL and its image are reachable from the internet.

Released under the MIT License.