plugin-icon

Kramar – Toolkit for eCommerce: Invoices, Email, Compliance & More

作者 Naiche·
PDF invoices, email builder, EU/NL compliance, checkout editor, custom order statuses & more — one modular toolkit for WooCommerce.
版本
1.0.0
最近更新:
Jul 15, 2026
Kramar – Toolkit for eCommerce: Invoices, Email, Compliance & More

Kramar is a modular WooCommerce toolkit built for EU compliance and performance. Instead of installing a dozen separate single-purpose plugins, Kramar provides a focused set of tools in one clean package — 27 modules across ten areas. Every module is opt-in and disabled by default, so you only run what you actually use.

About the name: Kramar (крамар) is an old Ukrainian word for a merchant — the town shopkeeper who dealt in wares. Its root, kram (goods), is a medieval German trade-loanword that travelled east into the Slavic languages, a small echo of Europe’s old merchant network. Kramar is the toolkit that equips the merchant.

What’s included

  • EU & NL compliance — Legal consent checkboxes, EU payment-obligation order-button text (Dutch Hoge Raad ruling), Omnibus 30-day lowest-price display, unit-price / delivery-time / tax notices, and a 14-day right-of-withdrawal / return flow.
  • PDF documents — Article 226-compliant invoices, packing slips, and credit notes, with sequential numbering and encrypted storage.
  • Email — A drag-and-drop email template builder, custom transactional emails with status / time-delay / manual triggers, and a developer API.
  • Checkout — A checkout field editor (classic + block checkout), address validation, EU VAT ID format validation for B2B orders, and a delivery-date picker.
  • Order management — Custom order statuses, sequential order numbers, and a refund / return workflow.
  • Products — Variation swatches (colour or image), minimum / maximum / step quantity rules, extra product option fields, and enhanced reviews (verified-buyer badge, helpful voting, rating breakdown).
  • Marketing — Google Shopping product feed, back-in-stock notifications, abandoned-cart recovery, and post-purchase review reminders — all consent-first.
  • Customer account — An enhanced My Account dashboard with order tracking, one-click reorder, and a smoother registration flow.
  • Shipping — Weight-based shipping rates.
  • Performance — Disable cart-fragment polling, dequeue unused WooCommerce CSS/JS, and strip WooCommerce admin bloat.
  • Privacy — Order and review IP anonymisation, data-retention warnings, and scheduled PII cleanup.

Built for the EU

Kramar was designed from the ground up for EU and Dutch law. The compliance modules consider the GDPR, the Consumer Rights Directive, the Omnibus Directive, and Dutch civil-code requirements. They are entirely optional — the invoicing, email, product, performance, and order tools work for any store, anywhere.

Modular

Enable only what you need. Disabled modules have zero overhead — no hooks, no queries, no assets loaded.

For Developers

Kramar’s Email Manager module exposes a small PHP API for sending and scheduling custom emails from themes or other plugins. No code is needed to create a custom email — use Kramar Emails Add New Email in the admin to build and configure it. Once it exists you can trigger it programmatically.

Finding a custom email’s id

Every custom email created through the UI gets an id of the form kramar_custom_{slug}, where the slug is derived from the email name: spaces become underscores, all characters are lowercased, and the result is passed through sanitize_key(). Example: an email named “Review Request” becomes kramar_custom_review_request. The exact id is shown in the Custom Emails table on Kramar Emails.

Sending immediately

kramar_send_email( string $id, mixed $context = null ): bool

Sends the custom email right now. Returns true if the email was dispatched (the email was found, is enabled, and passed the send filters). $context may be a WC_Order object, an order id (integer or numeric string), or null.

kramar_send_email( 'kramar_custom_review_request', $order_id );

Scheduling for later

kramar_schedule_email( string $id, mixed $context, int $timestamp ): bool

Schedules the email via Action Scheduler at the given Unix timestamp. Returns true if the action was queued (or was already queued). Requires WooCommerce’s bundled Action Scheduler.

kramar_schedule_email( 'kramar_custom_review_request', $order_id, time() + 7 * DAY_IN_SECONDS );

Idiomatic do_action aliases

Both functions are also wired to do_action so callers that prefer hooks over direct function calls can use:

do_action( 'kramar_send_email', $id, $context ); do_action( 'kramar_schedule_email', $id, $context, $timestamp );

Filters

kramar_email_recipient — Override the To address before the email is sent.

apply_filters( 'kramar_email_recipient', string $recipient, string $id, WC_Order|null $order )

kramar_email_should_send — Return false to prevent a send entirely.

apply_filters( 'kramar_email_should_send', bool $should, string $id, WC_Order|null $order )

kramar_email_merge_field_values — Add or replace merge-field values used inside email content.

apply_filters( 'kramar_email_merge_field_values', array $replacements, WC_Order $order )

Worked example: review request 7 days after order completion

add_action( 'woocommerce_order_status_completed', function ( $order_id ) { kramar_schedule_email( 'kramar_custom_review_request', $order_id, time() + 7 * DAY_IN_SECONDS ); } );

Note: The WooCommerce mailer caches its email list per request. A custom email created in the same PHP request as your kramar_send_email() call will not yet be registered and the call will return false. In normal use — emails created in the admin, triggered later by frontend or cron events — this is never a concern.

Delivery time (template tag)

Display a product’s delivery-time estimate anywhere in your theme:

kramar_get_delivery_time( int $product_id = 0 ): string

Returns the product’s own delivery-time term, falling back to the shop-wide default set in the EU Product Compliance module (or an empty string when neither is set). Works even when the automatic front-end display is turned off. Pass 0 to use the current global $product.

echo esc_html( kramar_get_delivery_time( $product->get_id() ) );

kramar_delivery_time_label — Filter the resolved label.

apply_filters( 'kramar_delivery_time_label', string $label, int $product_id )

kramar_delivery_time_html — Filter the rendered <span class="kramar-delivery-time"> markup (escape your own output).

apply_filters( 'kramar_delivery_time_html', string $html, string $label, WC_Product $product )
目前已測試版本
WordPress 7.0.1
此外掛程式已可供下載,並可用於你 系統。