Directory / plugin
PersoNailit
v1.1.1 · by ridehome
Add personalization fields to WooCommerce products: text, image upload, color and box swatches, with per-value pricing and combinations.
About this plugin
PersoNailit adds a “PersoNailit” tab to the WooCommerce product data panel,
letting store owners attach one or more personalization elements to any
simple or variable product:
- Text — a free-text field with max length, allowed-character
restrictions (letters only / numbers only) and text transform (uppercase,
lowercase, capitalize). Can carry its own extra price. - Image Upload — single or multiple file upload, with configurable
maximum size and allowed file types (PNG, JPG, GIF, PDF). Can carry its
own extra price. - Color Swatches — a repeater of clickable colors, each with its own
optional price, sale price, stock status, weight/dimensions, reference and
preview image. - Box Swatches — a repeater of clickable boxes (text or image), with the
same per-value price, sale price, stock, shipping and reference options as
Color, plus a configurable size (Small/Medium/Large) and an option to
display the price inside the box itself.
Each element can be marked as required. Submitted values are validated on
add-to-cart, shown in the cart and stored as order item meta, so store
owners see exactly what the customer requested on every order.
Combinations
Available on simple products only (see the FAQ below for why). When a
product has two or more Color/Box elements, PersoNailit can generate every
combination of their values automatically (“Generate Combinations”). Each
combination can then be given its own price, sale price, image, stock
status, weight and dimensions — overriding the individual color/box values
for that specific pairing. Bulk actions are available to set price, stock
status, weight or dimensions across several combinations at once.
Out of stock handling
Colors, boxes and combinations can each be marked as out of stock. The
storefront automatically blocks “Add to cart” and shows a message when the
customer’s current selection (or active combination) is unavailable.
Element Sets
A product’s configured elements can be saved as a reusable “set” from the
product panel, then added to any other product in one click — useful when
several products share the same personalization style.
Global Settings & Element Settings
Two admin screens (under the main PersoNailit menu) let store owners:
- customize the personalization box’s appearance (background color, accent
color, title, padding, border radius) and whether new elements are
required by default — Global Settings; - set global defaults per element type (placeholder text, default file
types and size, default swatch size, default box size, etc.), used
whenever a product doesn’t override them — Element Settings.
Uploaded files are stored in a temporary, .htaccess-protected directory
until checkout completes, then moved to a final protected directory and
attached to the order. Unclaimed temporary uploads are deleted automatically
after 3 days.
Shop listing swatches
Optionally (Global Settings “Shop Listing Swatches”), each product card in
the shop and category pages previews its personalization options (colors,
boxes…) over the product image. Picking one changes the card’s image and
price, and the card’s links open the product with those options already
chosen. On phones, a small chip opens a panel from the bottom of the screen
with every option and an “Add to cart” button, while the product card itself
stays highlighted (its height is set in “Phone panel height”).
Mobile product panel
Optionally (Global Settings “Mobile Product Panel”), on phones the
personalization box stays within reach on the product page: docked at the
bottom of the screen while the customer looks at the product images (with
the price and an “Add to cart” shortcut), minimizable to a
slim bar, and settling back into its place when they scroll down to it. Its
open height is set in “Open height”; it shares its look (bar, accent color,
cart button) with the shop’s phone panel.
Extending PersoNailit
Developers can register additional element types without modifying plugin
files, by dropping a class implementing PersoNailit_Element_Interface
into includes/elements/{type}/class-element-{type}.php, or by hooking into
the personailit_elements filter to register/remove elements
programmatically. See docs/hooks.md for the full list of available hooks.