Skip to content

Shoplex Modules Reference

Shoplex organizes European Union e-commerce compliance into 20 independent modules. Each module targets a specific EU directive, regulation, or national legal requirement. You can enable or disable each module individually under WooCommerce > Shoplex.

Ten modules are active by default. Ten are disabled because their applicability depends on the products sold or the shop’s operational setup.

┌────────────────────────────────────────────────────────────────────────┐
│ Shoplex Module Pipeline │
├───────────────────────────────┬────────────────────────────────────────┤
│ Storefront Price Block │ Checkout & Orders │
│ • unit_price (98/6/EC) │ • legal_checkboxes (2011/83/EU, GDPR) │
│ • omnibus (2019/2161) │ • country_compliance (Button-Lösung) │
│ • tax_display (98/6/EC) │ • vies (2006/112/EC B2B VAT) │
│ • shipping_notice (PAngV) │ • withdrawal (14-day statutory return) │
│ • from_price (98/6/EC) ├────────────────────────────────────────┤
├───────────────────────────────┤ Endpoints & Legal Forms │
│ Product Details & Safety │ • complaint_template (2019/771 form) │
│ • delivery_time (2011/83/EU) │ • cra_readiness (RFC 9116 security.txt)│
│ • consumer_information (771) │ • dsa_toolkit (Art. 16 DSA notice) │
│ • gpsr (2023/988 safety) │ • business_info & dispute_resolution │
└───────────────────────────────┴────────────────────────────────────────┘

Module ID Module Name Default State Legal Basis Configuration Tab
unit_price Unit price Enabled Directive 98/6/EC Prices (shoplex_prices)
omnibus Lowest price in 30 days Enabled Directive (EU) 2019/2161 Lowest price (shoplex_omnibus)
tax_display VAT notice Enabled Directive 98/6/EC, 2011/83/EU art. 6 VAT (shoplex_taxes)
shipping_notice Shipping cost notice Enabled Directive 2011/83/EU art. 6(1)(e) Prices (shoplex_prices)
from_price From-price on variable products Disabled Directive 98/6/EC Prices (shoplex_prices)
delivery_time Delivery time Disabled Directive 2011/83/EU art. 6(1)(g) Delivery time (shoplex_delivery)
consumer_information Legal guarantee and durability Enabled Directives (EU) 2019/771 & 2019/770 Guarantees (shoplex_consumer_info)
country_compliance Country-specific EU rules Enabled § 312j BGB, Art. L. 221-14, RDL 7/2021 Country compliance (shoplex_country_compliance)
withdrawal 14-day right of withdrawal Disabled Directive 2011/83/EU Annex I(B) Checkout consent (shoplex_checkout)
gpsr Product safety information Disabled Regulation (EU) 2023/988 (GPSR) Product safety (shoplex_gpsr)
legal_checkboxes Checkout consent Enabled Directive 2011/83/EU art. 8, GDPR art. 7 Checkout consent (shoplex_checkout)
business_info Trader identity Enabled Directive 2000/31/EC art. 5 Trader (shoplex_general)
dispute_resolution Dispute resolution notice Enabled Directive 2013/11/EU, as amended by Directive (EU) 2025/2647 Trader (shoplex_general)
vies EU VAT ID validation Disabled Directive 2006/112/EC art. 138 VIES VAT (shoplex_vies)
complaint_template Statutory complaint form Disabled Directive (EU) 2019/771 Built-in template page
cra_readiness Cyber Resilience Act Disabled Regulation (EU) 2024/2847 / RFC 9116 CRA security.txt (shoplex_cra)
dsa_toolkit Digital Services Act reporting Disabled Regulation (EU) 2022/2065 art. 16 Public form shortcode
deposit Packaging deposit scheme (Pfand) Disabled German VerpackG § 31; EU PPWR Deposit (shoplex_deposit)
food_information Food information and nutrition Disabled Regulation (EU) 1169/2011 Food (shoplex_food)
consent_manager Cookie consent and content blocker Enabled GDPR art. 7; ePrivacy; TDDDG § 25 Consent (shoplex_consent)

Directive 98/6/EC on consumer protection in the indication of the prices of products offered to consumers. Selling goods quantified by weight, volume, length, or area requires displaying both the selling price and the price per reference unit (e.g., per 1 kg or 1 liter).

Calculates the base price and displays it directly beside the sales price in both single product summaries and product catalog loops. If a product does not specify content amount meta, the module outputs nothing for that product.

  • unit_price_enabled (bool, default: true): Enables unit price rendering.
  • unit_price_text (string, default: "{price} / {unit}"): Display template. Replaces {price} with the formatted unit price and {unit} with the localized reference unit abbreviation.
  • unit_price_show_loop (bool, default: true): Toggles rendering in product catalog archives.

Found in Product Data > Shoplex:

  • _shoplex_unit_price_product_amount (float): Package volume or weight (e.g., 500 for a 500 g jar).
  • _shoplex_unit_price_base (float, default: 1 or 1000): Reference base amount (e.g., 1000 for 1 kg, or 100 for 100 ml).
  • _shoplex_unit_price_unit (string select): Unit of measure. Supported values: kg, g, l, ml, m, cm, m2, m3, piece.

$$\text{Unit Price} = \frac{\text{Product Price}}{\text{Product Amount}} \times \text{Base Amount}$$

For example, a 250 g product selling for €5.00 with reference base 1000 g: $$\frac{€5.00}{250} \times 1000 = €20.00/\text{kg}$$


Directive (EU) 2019/2161 (Omnibus Directive), amending Directive 98/6/EC Art. 6a. Mandates that any announcement of a price reduction must indicate the lowest price applied by the trader during a period not shorter than 30 days prior to the application of the price reduction.

Watches price modifications across all products and writes historical price events to a dedicated database table. When a product is put on sale, it determines the lowest regular price within the configured time window and prints a statutory notification on the storefront.

[!NOTE] The lowest-price notice is not retroactive. Historical recording starts upon module activation; earlier price modifications prior to plugin installation are not recorded.

Table: {wp_prefix}shoplex_price_history

CREATE TABLE wp_shoplex_price_history (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
product_id BIGINT UNSIGNED NOT NULL,
price DECIMAL(19,4) NOT NULL,
sale_price DECIMAL(19,4) DEFAULT NULL,
price_type VARCHAR(20) NOT NULL DEFAULT 'regular',
currency VARCHAR(3) NOT NULL,
recorded_at DATETIME NOT NULL,
INDEX product_recorded (product_id, recorded_at)
);
  • enabled (bool, default: true): Activates price tracking and notice rendering.
  • days (int, default: 30): Evaluation lookback window (minimum 30 days under EU law).
  • display_text (string, default: "Lowest price in the last {days} days: {price}"): Notice format. Supports {days} and {price} tags.
  • display_on_sale_only (bool, default: true): Restricts notice display exclusively to products currently on sale.
  • prune_after_days (int, default: 90): Retains database records up to $N$ days before purging old audit rows.
  • show_regular_price (bool, default: false): Displays regular price when no discount is active.
  • no_history_text (string select: hide | current | custom, default: hide): Fallback action when a newly added product goes on sale before 30 days of history accumulate.
  • no_history_custom_text (string): Text used when no_history_text is set to custom.
  • price_count_from (string select: sale_start | today, default: sale_start):
    • sale_start: Evaluates the 30-day window immediately preceding the start of the discount (prevents progressive discounting loopholes).
    • today: Evaluates the rolling 30-day window ending today.
  • include_tax (bool, default: true): Whether the Omnibus historical price includes taxes matching store display settings.

Directive 98/6/EC, Directive 2011/83/EU Art. 6, and Directive 2006/112/EC Art. 284 (Small Business Scheme). Prices displayed to B2C consumers must indicate whether they include or exclude statutory value-added tax.

Injects the appropriate VAT notice directly adjacent to the product price based on WooCommerce tax settings and product tax classes.

Configuration Options (shoplex_taxes & shoplex_prices)

Section titled “Configuration Options (shoplex_taxes & shoplex_prices)”
  • tax_display_mode (string select: gross | net, default: gross): Governs price display mode.
  • vat_notice_text (string, default: "incl. {rate}% VAT"): Wording for gross pricing. Interpolates {rate} dynamically.
  • vat_notice_net_text (string, default: "excl. {rate}% VAT"): Wording for net pricing.
  • vat_exempt_notice (string, default: "VAT exempt under the small business scheme"): Rendered when small_business is enabled under Trader settings (e.g., German Kleinunternehmerregelung § 19 UStG or Polish art. 113 ust. 1 ustawy o VAT).

Directive 2011/83/EU Art. 6(1)(e) and German PAngV § 6. When shipping costs cannot reasonably be calculated in advance or are charged separately from the product price, the fact that delivery costs will be payable must be stated immediately next to the price.

Appends a “plus shipping” statement next to product prices and links directly to the store’s shipping information page.

  • shipping_costs_notice_enabled (bool, default: true): Enables notice display.
  • shipping_costs_text (string, default: "plus shipping"): Custom label, automatically wrapped in a link to the store shipping policy.

5. From-Price on Variable Products (from_price)

Section titled “5. From-Price on Variable Products (from_price)”

Directive 98/6/EC. Price clarity obligations prohibit misleading price ranges where the lowest price does not reflect a readily purchasable configuration.

Replaces the standard WooCommerce price range (e.g., $10.00 - $50.00) with a clear starting price (e.g., from $10.00).

  • from_price_enabled (bool, default: false): Activates single starting price display.
  • from_price_text (string, default: "from {price}"): Custom template string.

Directive 2011/83/EU Art. 6(1)(g). Before a consumer is bound by a distance contract, the trader must provide the arrangements for payment, delivery, performance, and the time by which the trader undertakes to deliver the goods.

Displays exact delivery windows on product pages and product loops using a dedicated taxonomy and product overrides.

  1. Per-product override: Meta key _shoplex_delivery_time_id assigned on the product Shoplex tab.
  2. Product taxonomy assignment: Term assigned from the shoplex_delivery_time custom taxonomy.
  3. Shop-wide fallback: Term selected in shoplex_delivery.default_delivery_time.
  • default_delivery_time (term ID, default: 0): Default delivery term applied across products without custom overrides.
  • display_format (string, default: "Delivery time: {time}"): Output template string.
  • show_in_loop (bool, default: false): Renders delivery time directly in category archives.

Section titled “7. Legal Guarantee and Durability (consumer_information)”

Directive (EU) 2019/771 (Sale of Goods Directive), Directive (EU) 2019/770 (Digital Content Directive), and Directive (EU) 2024/825 (Empowering Consumers for the Green Transition).

Prints the mandatory legal conformity guarantee notice on product pages, along with optional commercial durability guarantees, software update periods for goods with digital elements, and repairability information.

Configuration Options (shoplex_consumer_info)

Section titled “Configuration Options (shoplex_consumer_info)”
  • show_legal_guarantee (bool, default: true): Enables statutory conformity guarantee notice.
  • legal_guarantee_text (string textarea, default: "All goods are covered by the seller's legal guarantee of conformity for a minimum of two years from delivery.").

[!NOTE] When Shoplex detects a customer in Spain, it automatically alters this notice to state a 3-year guarantee period in accordance with Spanish Royal Decree-Law 7/2021.

  • _shoplex_durability_guarantee_months (int): Commercial durability guarantee period (months), if offered by the manufacturer beyond the legal minimum.
  • _shoplex_update_period_months (int): Period (months) during which security and feature updates are guaranteed for digital products or goods with digital elements.
  • _shoplex_repair_info (string textarea): Availability of spare parts and repair instructions.

8. Country-Specific EU Rules (country_compliance)

Section titled “8. Country-Specific EU Rules (country_compliance)”

German § 312j BGB, French Art. L. 221-14, Italian Art. 51 Codice del Consumo, Spanish RDL 7/2021, Polish Art. 17 Ustawy o prawach konsumenta, German VerpackG, French AGEC, and Polish BDO.

Adapts the final order button text on both Classic and Block checkouts according to the customer’s resolved destination country (“Button-Lösung”), updates guarantee duration for Spain, and injects statutory environmental register numbers into merchant identity blocks.

For a full breakdown of national legal rules, see Country Compliance Guide.

Configuration Options (shoplex_country_compliance)

Section titled “Configuration Options (shoplex_country_compliance)”
  • lucid_number (string): German VerpackG registration number (ZSVR LUCID).
  • epr_number (string): French AGEC Unique Identification Number (IDU REP/EPR).
  • bdo_number (string): Polish waste database registration number (Numer BDO).
  • order_button_text_de (string, default: "Zahlungspflichtig bestellen").
  • order_button_text_fr (string, default: "Commande avec obligation de paiement").
  • order_button_text_it (string, default: "Ordina e paga").
  • order_button_text_es (string, default: "Pedido con obligation de pago").
  • order_button_text_pl (string, default: "Zamówienie z obowiązkiem zapłaty").

9. 14-Day Right of Withdrawal (withdrawal)

Section titled “9. 14-Day Right of Withdrawal (withdrawal)”

Directive 2011/83/EU Annex I(B) and Directive (EU) 2023/2673 (Right of withdrawal for financial services and digital distance contracts). Consumers have the right to withdraw from a distance contract within 14 calendar days without giving any reason.

Provides an automated withdrawal processing workflow:

  1. Shortcode [shoplex_withdrawal_form] for embedding public withdrawal declarations.
  2. Account integration: Adds a “Withdraw from contract” action button in My Account > Orders for eligible orders.
  3. Guest order verification: Allows guests to look up orders via order number and billing email.
  4. Magic link authentication: Sends a cryptographic single-use redemption link with a 30-minute time-to-live (TOKEN_TTL_SECONDS = 1800) to guest buyers.
  5. Security controls: Anti-enumeration masking (uniform messages regardless of match) and transient rate limiting (maximum 5 requests per 15 minutes).
  6. Partial returns: Tracks quantity remaining per order line item to prevent double-returns.
  7. HPOS-safe metadata: Stamps withdrawal clock start timestamp (_shoplex_withdrawal_clock_start) when order transitions to completed.
  8. Confirmation emails: Dispatches HTML acknowledgment emails to the customer and store administrator upon receipt.

Embed the withdrawal form on any WordPress page:

[shoplex_withdrawal_form]

Regulation (EU) 2023/988 (General Product Safety Regulation - GPSR). Mandatory as of December 13, 2024. All non-food consumer products sold online in the EU must display manufacturer contact information, EU Responsible Person details (for non-EU producers), product identification, and safety warnings.

Renders a structured product safety disclosure tab or section on the single product page. If safety fields are not populated for a given product, no empty safety container is output.

  • show_on_product (bool, default: true): Enables public rendering of safety data on product pages.

Found in Product Data > Shoplex:

  • _shoplex_gpsr_manufacturer_name (string): Registered company name of the manufacturer.
  • _shoplex_gpsr_manufacturer_address (textarea): Physical mailing address.
  • _shoplex_gpsr_manufacturer_contact (string): Electronic point of contact (email or web form URL).
  • _shoplex_gpsr_responsible_person (string): Name of the EU Responsible Person (mandatory if manufacturer is based outside the EU).
  • _shoplex_gpsr_responsible_address (textarea): Physical postal address in the European Union.
  • _shoplex_gpsr_responsible_contact (string): Email or web contact for the EU Responsible Person.
  • _shoplex_gpsr_importer_name (string): Importer name (if applicable).
  • _shoplex_gpsr_importer_address (textarea): Importer address.
  • _shoplex_gpsr_importer_contact (string): Importer contact.
  • _shoplex_gpsr_product_identifier (string): Batch number, serial number, type, or model code.
  • _shoplex_gpsr_safety_warnings (textarea): Mandatory hazard statements, age restrictions, and risk warnings.
  • _shoplex_gpsr_instructions (textarea): Safe operation, assembly, and usage instructions.

Under GPSR Art. 9(5), products must bear a type, batch, serial number, or other element allowing identification. When managing products in the WooCommerce admin, Shoplex automatically provides real-time GS1 check-digit validation (GTIN-8, GTIN-12, GTIN-13, GTIN-14) on the native WooCommerce barcode field (#_global_unique_id). If an invalid check digit is entered, an inline warning notice appears beneath the field to alert the merchant without blocking saving.


Directive 2011/83/EU Art. 8, GDPR (Regulation EU 2016/679) Art. 7, and Directive 2011/83/EU Art. 16(m) (loss of right of withdrawal for immediate supply of digital content).

Displays legal checkboxes during checkout and logs customer consent status directly in the order metadata and order notes. Supports both Classic Checkout (woocommerce_review_order_before_submit) and Block Checkout (via WooCommerce Additional Fields Store API).

  1. Terms and conditions: Required agreement to store terms.
  2. Privacy policy: Required agreement to privacy policy.
  3. Withdrawal information acknowledgment: Confirmation of return rights.
  4. Digital content waiver: Mandatory opt-in for downloadable products where delivery begins before the 14-day return period expires.
  5. Marketing / Newsletter: Voluntary consent for marketing communications.
  6. Carrier data sharing: Explicit consent to pass phone numbers or emails to courier services for shipment tracking.
  7. Review reminders: Voluntary consent for follow-up review invitations.

Consent states are saved in order meta _shoplex_consents:

{
"terms": { "agreed": true, "timestamp": 1775577600 },
"privacy": { "agreed": true, "timestamp": 1775577600 },
"digital_waiver": { "agreed": true, "timestamp": 1775577600 }
}

An order note is also recorded for compliance verification.


Directive 2000/31/EC Art. 5 (e-Commerce Directive) and Directive 2011/83/EU Art. 6. Sellers must provide permanent, rapid, and direct access to essential commercial registration details.

  • company_name (string): Legal entity or commercial trader name.
  • company_address (string textarea): Physical address of establishment.
  • company_email (string): Active contact email.
  • company_phone (string): Telephone number.
  • company_vat_id (string): Value-Added Tax ID (e.g., DE123456789).
  • company_registration_number (string): Commercial register identifier (e.g., HRB 123456, KRS 0000123456, RCS Paris B 123 456 789).
  • small_business (bool, default: false): Declares small-business VAT exemption.

13. Dispute Resolution Notice (dispute_resolution)

Section titled “13. Dispute Resolution Notice (dispute_resolution)”

The EU’s online dispute resolution platform has been discontinued. Regulation (EU) 524/2013 was repealed with effect from 20 July 2025 by Regulation (EU) 2024/3228. Directive 2013/11/EU, amended by Directive (EU) 2025/2647, provides the EU framework for alternative dispute resolution. This module only provides an editable notice. Check its wording against the national rules that apply to your shop and link to the relevant ADR body where required.

  • dispute_resolution_enabled (bool, default: true): Enables notice output.
  • dispute_resolution_text (string textarea): Default text instructing consumers to contact store support first, while acknowledging access to national out-of-court settlement entities.

Directive 2006/112/EC Art. 138 (Zero-rate VAT exemption on intra-Community B2B supplies).

Validates intra-EU B2B VAT numbers in real time against the European Commission’s official VIES REST API: https://ec.europa.eu/taxation_customs/vies/rest-api/ms/{CC}/vat/{NUMBER}

  • Validates national syntax regex across all 27 EU member states plus Northern Ireland (XI).
  • Obtains qualified consultation proof: when the merchant configures their own VAT number (requester_vat), the VIES service issues a unique consultation number (requestIdentifier). This serves as audit evidence for tax authorities.
  • Adds an administrative panel to WooCommerce order details showing company name, address, consultation ID, and validation timestamp.
  • requester_vat (string): Merchant’s own EU VAT ID (e.g., DE987654321) to request audit consultation numbers.
  • cache_hours (int, default: 24): Cache lifetime for repeat validations.

15. Statutory Complaint Form (complaint_template)

Section titled “15. Statutory Complaint Form (complaint_template)”

Directive (EU) 2019/771 on contracts for the sale of goods. Regulates consumer remedies for non-conforming goods: repair, replacement, proportionate price reduction, or contract rescission.

Provides a ready-to-print or embeddable warranty claim template (Formularz reklamacyjny / Complaint template).

[shoplex_complaint_template]

Store administrators can preview and download a clean, print-ready HTML file directly under WooCommerce > Shoplex > Complaint template by clicking Download as standalone HTML.


Regulation (EU) 2024/2847 (Cyber Resilience Act - CRA) and RFC 9116 (A File Format to Aid in Security Vulnerability Disclosure).

Publishes a standardized vulnerability disclosure file at: /.well-known/security.txt

The endpoint intercepts incoming HTTP requests on the parse_request hook and serves a standard text/plain file.

  • security_contact (string email): Security vulnerability inbox (defaults to store admin_email if blank).
  • security_policy_url (string URL): Optional link to coordinated disclosure policy.
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Contact: mailto:[email protected]
Policy: https://example.com/security-policy/
Preferred-Languages: en, de, fr, es, it, pl
Expires: 2027-10-07T12:00:00Z

Regulation (EU) 2022/2065 (Digital Services Act - DSA), specifically Article 16 (Notice and action mechanisms for illegal content or products) and Articles 11-12 (Points of contact).

Provides a public notice-and-action form allowing users, authorities, and rights holders to report illegal products or content.

[shoplex_dsa_report]
  • Reporter Name / Organisation
  • Electronic Mail Address
  • Exact URL of the Product or Content
  • Reason for Notice:
    • illegal_product (Illegal / non-compliant product under EU/national law)
    • ip_infringement (Intellectual property / trademark infringement)
    • misleading_ad (Misleading advertisement / unfair commercial practice)
    • other (Other legal violation)
  • Detailed explanation / legal basis

Adds a configurable, non-taxable deposit fee to the WooCommerce cart and displays a deposit notice on product pages. The module is disabled by default. Product fields _shoplex_deposit_type and _shoplex_deposit_units define the deposit category and number of units; variations can inherit these values from the parent product.

The default rates are €0.25 for single-use packaging, €0.08 for reusable beer bottles, €0.15 for reusable mineral-water bottles and €0.25 for cans. Rates can be changed with the shoplex_deposit settings. The module calculates the fee and shows the notice; it does not record physical returns or issue deposit refunds.


Displays product information configured in Product Data > Shoplex, including ingredients, allergens, nutrition values, Nutri-Score, alcohol content, net quantity, place of origin and food business operator details. The module is disabled by default and targets food information under Regulation (EU) 1169/2011.

Nutrition values use a pipe-separated list of key:value pairs, for example energy_kcal:250|fat:12|salt:0.9. Supported keys include energy_kj, energy_kcal, fat, saturated_fat, carbohydrates, sugars, fibre, protein and salt. Only populated information is displayed.


Section titled “20. Cookie Consent and Content Blocker (consent_manager)”

Displays a cookie consent banner with Necessary, Analytics, Marketing and Preferences categories. It integrates Google Consent Mode v2 and can hold supported YouTube, Vimeo, Google Maps, OpenStreetMap and SoundCloud embeds until the visitor gives consent. A control lets visitors reopen their preferences. The module is enabled by default and uses the shoplex_consent settings.

The blocker applies to supported media embeds in content and short descriptions. It is not a general-purpose blocker for arbitrary third-party scripts.