Shopkit commerce plugin

Thanks for that article. I didn’t know he invested in Stripe too!

Shopkit v1.1.5 is here :bug:

Just a small bugfix release to fix a couple of issues with the Panel.

Download it here:

v2.0 is still in the works. Beta testers, expect something in the next two weeks…

How can i implement a Clear Cart/Empty Basket Button ? Or is there already sth. like this ? thx

Customers can delete items from their cart one-by-one on the /shop/cart page.

There’s no one-click action for clearing the whole cart, though.

To clear the cart in one fell swoop, you’d have to remove its session variable, like this: s::remove('cart');

2 posts were split to a new topic: Problem with file and folder creation

A post was split to a new topic: Problem receiving emails from sendmail

v1.1.6 is here :closed_lock_with_key:

This is a security-and-bugfix release that is highly recommended for all Shopkit websites.

Download Shopkit v1.1.6

  • Security fixes
    • c::set('debug', true) no longer enables mail logging
  • Bug fixes
    • Fix getDiscount() check for flat discounts
    • Fix per-variant sale price codes
    • Fix negative stock bug

PS: Yes, v2.0 is still coming! Thank you for your patience…

Hi. Quick question: can a product live in multiple categories? It seems that can only work if you create a product page under each desired category (e.g. there are multiple instances of 1 product).

Each product must live under a single category. This follows the folder structure of the content folder.

You can, however, assign as many tags as you want to any product.

Are there no unique bins you can put them into?

That’s what I asked the client. :blush:

I’ve been struggling with this concept of one item in multiple categories.

The alternative would be a flat structure without a hierarchy if there is absolutely no way to categorize them uniquely. It certainly doesn’t make sense to duplicate content in multiple folders, and it doesn’t make sense to force categorize them in some sort of arbitrary way that is not logical. What sort of products are you talking about?

The products are crystal glassware (wine glasses, vases, etc.). I’m working to create the US version of this site

Each item lives in at least two categories. For example…

Drinkware > Wine Glasses > Wine Master White Wine Glasses


Collections > Drinkware > Wine Glasses > Wine Master White Wine Glasses

Same product found/navigated-to two different ways, through two different categories.

It seems as though I need to store all products in 1 folder, id/tag/categorize them, and use routes to produce the friendly URLs. Now I’m taking less about Shopkit and more about categories here. This post is starting to resurface in my mind. Maybe that’s my ticket to pulling this off. Offering multiple languages not a challenge I have to overcome.

I’d still put them into the two main categories Drinkware and Homeware (and their subcategories, and then add additional categories/tags for the collections. I wine glass is a wine glass after all, no matter where you put it.

Thanks for your input.

*whispers* There’s an alpha dev preview of Shopkit v2.0 available now.

If you enjoy the thrill of testing an unstable release and reporting bugs, this is for you!

This is also your last chance to ask for new features that might – might – just make it into the final release.

Please file issues on GitHub, message me on this forum, or email if you find any bugs. I am also very interested to hear about how the upgrade process goes for existing Shopkit sites, and especially how it breaks your custom themes :wink:

So far, the changelog looks like this:

- Panel
    - Consolidate Shop options into Site options page
    - New Site options
        - Set default country
        - Show quantity in stock on Product pages
        - Number formatting (decimal and thousands separator)
    - Remove slider option from Product blueprints
    - Replace structure fields with snippetfield plugin (better entry summaries)
    - Replace Visual Markdown with WYSIWYG editor
- Widgets
    - Basic visitor stats (forked from [Fabian Sperrle](
    - Aggregate order stats (abandoned, pending, paid & shipped)
- New cart handling
    - Store cart details in transaction file instead of session variable
    - Rename `order.create` snippet to `order.process`
    - New transaction status: "abandoned"
- New theme
    - Remove the UIKit framework
    - Use normal URLs instead of data-URIs for product photos
    - AJAX quantity selector on Cart page
    - AJAX product slideshow
    - Tag cloud in sidebar
    - Shop by Brand in the sidebar
    - Use radio buttons instead of select box for shipping options on Cart page
    - Remove base colour in colour options (only link and accent colour can be edited from Site options)
    - Product-specific page descriptions for better SEO
    - New frontend admin buttons
- Easier to change default language in `config.php`
- Bug fixes
    - Fix false error message on registration
    - Fix multiple orders bug (#131)
- Performance enhancements
    - Limit use of `index()`
    - Limit re-declaration of `site()` and `page()`
    - Faster font loading
    - Consolidate most logic into `shopkit.php`

I’m all ears! :rabbit:

Shopkit v2.0 beta

After two weeks of bug fixes, I’m confident enough to present the beta of Shopkit v2.0. If you want to test it out, please clone from the dev branch at

v2.0 includes a new payment gateway, Square. I am using it on the Shopkit site now, so if you want to get a feel for the user experience, just try to make a purchase.

Note: Square requires that the currency matches the country where your business is registered. For this reason, Shopkit licenses are now $25 Canadian Dollars instead of $19 USD.

Speaking of the Shopkit website, it is running v2.0 beta so you can explore the new theme. It should be faster, smoother, and easier to modify than before!

And a reminder, if you want to get involved in this beta test, I’ll give you a free license key.

Thanks everyone!


v2.0 is here :cherries:

This is a major release with new features, a new payment gateway, lots of bugfixes, and a brand new theme (and new logo too)!


  • New gateway: Square
  • New widgets: visitor stats and order stats
  • Replace Visual Markdown editor with WYSIWYG editor
  • New theme which removed UIKit framework and reduced total page weight by 75%
  • Performance and usability improvements

Download Shopkit v2.0

View the full changelog here:

This is a big release! Upgrading your existing Shopkit installation will probably cause some merge conflicts. If you only want bugfixes, run git checkout v1-stable to upgrade to v1.1.7 instead. The v1-stable branch will continue getting bugfixes only, and will not be updated to work with Kirby 2.5 when it is eventually released.

Thank you to everyone who helped me during the beta phase!

Now I’m off to a birthday party, so no difficult questions until tomorrow please :stuck_out_tongue_winking_eye:

1 Like

v2.0.1 is here :bread:

Just a couple small bug fixes, and some form validation messages for the shop/confirm page.

Download it here:

v2.1 is here :lollipop:

Some bug fixes and improved multilanguage features.

Download it here:

  • Moved translation files to site/plugins/shopkit/languages
  • Bug fixes
    • Stop reverting to default language through the checkout process
    • Explicit type casting to prvent PHP warnings
  • Updated dependencies
    • Kirby and Panel (2.5.2)
    • Stripe SDK (v5.1.1)
    • Square SDK (2.0.2)
    • Multiselect field (2.1.1)
    • Color field (now packaged as a plugin)
  • Added local config files for development environments (debugging enabled, whoops disabled)

If you have custom templates or snippets that override Shopkit’s default, you’ll want to make sure to update any calls to l::get($key) or l($key). Shopkit v2.1 now uses a new function, _t($key), to return translated strings.

This new function makes it possible to compartmentalize Shopkit’s language files within the plugin folder. The other benefit is that it allows you to override those defaults by setting your own strings through l::set().

More information: