{"id":351132,"date":"2026-08-23T22:37:48","date_gmt":"2026-08-23T22:37:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/personailit\/"},"modified":"2026-10-19T20:53:01","modified_gmt":"2026-10-19T20:53:01","slug":"personailit","status":"publish","type":"plugin","link":"https:\/\/ug.wordpress.org\/plugins\/personailit\/","author":23545402,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.1","stable_tag":"1.1.1","tested":"7.1.3","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"PersoNailit","header_author":"RideHome","header_description":"Product personalization system for WooCommerce. Lets store owners add configurable personalization fields (text, image upload, color swatches, box swatches, and combinations) to any product.","assets_banners_color":"f7f4f1","last_updated":"2026-10-19 20:53:01","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/personailit.ridehome.shop","header_author_uri":"https:\/\/ridehome.shop","rating":0,"author_block_rating":0,"active_installs":0,"downloads":333,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"ridehome","date":"2026-08-23 22:37:35","revision":3662385},"1.1.0":{"tag":"1.1.0","author":"ridehome","date":"2026-10-16 18:09:34","revision":3750923},"1.1.1":{"tag":"1.1.1","author":"ridehome","date":"2026-10-19 20:53:01","revision":3755537}},"upgrade_notice":{"1.1.1":"<p>The mobile product panel no longer covers the site&#039;s menu.<\/p>","1.1.0":"<p>Shop listing swatches, the mobile product panel, extra price on Text, and a\ntidier cart. Both new features are off by default (Global Settings).<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3662393,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3662393,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3662393,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3662393,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.1.0","1.1.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3662401,"resolution":"1","location":"assets","locale":"","width":1600,"height":1200},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3662401,"resolution":"2","location":"assets","locale":"","width":1600,"height":1200},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3662401,"resolution":"3","location":"assets","locale":"","width":1600,"height":1200},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3662401,"resolution":"4","location":"assets","locale":"","width":1600,"height":1200}},"screenshots":[]},"plugin_section":[],"plugin_tags":[2010,5887,155785,185062,286],"plugin_category":[45],"plugin_contributors":[277142],"plugin_business_model":[],"class_list":["post-351132","plugin","type-plugin","status-publish","hentry","plugin_tags-custom-fields","plugin_tags-file-upload","plugin_tags-product-options","plugin_tags-product-personalization","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-ridehome","plugin_committers-ridehome"],"banners":{"banner":"https:\/\/ps.w.org\/personailit\/assets\/banner-772x250.png?rev=3662393","banner_2x":"https:\/\/ps.w.org\/personailit\/assets\/banner-1544x500.png?rev=3662393","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/personailit\/assets\/icon-128x128.png?rev=3662393","icon_2x":"https:\/\/ps.w.org\/personailit\/assets\/icon-256x256.png?rev=3662393","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/personailit\/assets\/screenshot-1.png?rev=3662401","caption":""},{"src":"https:\/\/ps.w.org\/personailit\/assets\/screenshot-2.png?rev=3662401","caption":""},{"src":"https:\/\/ps.w.org\/personailit\/assets\/screenshot-3.png?rev=3662401","caption":""},{"src":"https:\/\/ps.w.org\/personailit\/assets\/screenshot-4.png?rev=3662401","caption":""}],"raw_content":"<!--section=description-->\n<p>PersoNailit adds a \"PersoNailit\" tab to the WooCommerce product data panel,\nletting store owners attach one or more personalization elements to any\nsimple or variable product:<\/p>\n\n<ul>\n<li><strong>Text<\/strong> \u2014 a free-text field with max length, allowed-character\nrestrictions (letters only \/ numbers only) and text transform (uppercase,\nlowercase, capitalize). Can carry its own extra price.<\/li>\n<li><strong>Image Upload<\/strong> \u2014 single or multiple file upload, with configurable\nmaximum size and allowed file types (PNG, JPG, GIF, PDF). Can carry its\nown extra price.<\/li>\n<li><strong>Color Swatches<\/strong> \u2014 a repeater of clickable colors, each with its own\noptional price, sale price, stock status, weight\/dimensions, reference and\npreview image.<\/li>\n<li><strong>Box Swatches<\/strong> \u2014 a repeater of clickable boxes (text or image), with the\nsame per-value price, sale price, stock, shipping and reference options as\nColor, plus a configurable size (Small\/Medium\/Large) and an option to\ndisplay the price inside the box itself.<\/li>\n<\/ul>\n\n<p>Each element can be marked as required. Submitted values are validated on\nadd-to-cart, shown in the cart and stored as order item meta, so store\nowners see exactly what the customer requested on every order.<\/p>\n\n<h4>Combinations<\/h4>\n\n<p>Available on simple products only (see the FAQ below for why). When a\nproduct has two or more Color\/Box elements, PersoNailit can generate every\ncombination of their values automatically (\"Generate Combinations\"). Each\ncombination can then be given its own price, sale price, image, stock\nstatus, weight and dimensions \u2014 overriding the individual color\/box values\nfor that specific pairing. Bulk actions are available to set price, stock\nstatus, weight or dimensions across several combinations at once.<\/p>\n\n<h4>Out of stock handling<\/h4>\n\n<p>Colors, boxes and combinations can each be marked as out of stock. The\nstorefront automatically blocks \"Add to cart\" and shows a message when the\ncustomer's current selection (or active combination) is unavailable.<\/p>\n\n<h4>Element Sets<\/h4>\n\n<p>A product's configured elements can be saved as a reusable \"set\" from the\nproduct panel, then added to any other product in one click \u2014 useful when\nseveral products share the same personalization style.<\/p>\n\n<h4>Global Settings &amp; Element Settings<\/h4>\n\n<p>Two admin screens (under the main PersoNailit menu) let store owners:<\/p>\n\n<ul>\n<li>customize the personalization box's appearance (background color, accent\ncolor, title, padding, border radius) and whether new elements are\nrequired by default \u2014 <strong>Global Settings<\/strong>;<\/li>\n<li>set global defaults per element type (placeholder text, default file\ntypes and size, default swatch size, default box size, etc.), used\nwhenever a product doesn't override them \u2014 <strong>Element Settings<\/strong>.<\/li>\n<\/ul>\n\n<p>Uploaded files are stored in a temporary, <code>.htaccess<\/code>-protected directory\nuntil checkout completes, then moved to a final protected directory and\nattached to the order. Unclaimed temporary uploads are deleted automatically\nafter 3 days.<\/p>\n\n<h4>Shop listing swatches<\/h4>\n\n<p>Optionally (Global Settings \u2192 \"Shop Listing Swatches\"), each product card in\nthe shop and category pages previews its personalization options (colors,\nboxes...) over the product image. Picking one changes the card's image and\nprice, and the card's links open the product with those options already\nchosen. On phones, a small chip opens a panel from the bottom of the screen\nwith every option and an \"Add to cart\" button, while the product card itself\nstays highlighted (its height is set in \"Phone panel height\").<\/p>\n\n<h4>Mobile product panel<\/h4>\n\n<p>Optionally (Global Settings \u2192 \"Mobile Product Panel\"), on phones the\npersonalization box stays within reach on the product page: docked at the\nbottom of the screen while the customer looks at the product images (with\nthe price and an \"Add to cart\" shortcut), minimizable to a\nslim bar, and settling back into its place when they scroll down to it. Its\nopen height is set in \"Open height\"; it shares its look (bar, accent color,\ncart button) with the shop's phone panel.<\/p>\n\n<h4>Extending PersoNailit<\/h4>\n\n<p>Developers can register additional element types without modifying plugin\nfiles, by dropping a class implementing <code>PersoNailit_Element_Interface<\/code>\ninto <code>includes\/elements\/{type}\/class-element-{type}.php<\/code>, or by hooking into\nthe <code>personailit_elements<\/code> filter to register\/remove elements\nprogrammatically. See <code>docs\/hooks.md<\/code> for the full list of available hooks.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Make sure WooCommerce is installed and active.<\/li>\n<li>Upload the <code>personailit<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install\nthe zip via <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> screen.<\/li>\n<li>Edit any product, open the <strong>PersoNailit<\/strong> tab, check <strong>Enable\nPersoNailit<\/strong> and add one or more elements.<\/li>\n<li>Optional: visit the <strong>PersoNailit<\/strong> admin menu to configure global\nappearance and per-element defaults before adding elements to products.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20work%20with%20variable%20products%3F\"><h3>Does this work with variable products?<\/h3><\/dt>\n<dd><p>Yes, the PersoNailit tab and all personalization elements (Text, Image,\nColor, Box) are available on both simple and variable products.<\/p>\n\n<p>Combinations specifically are only available on simple products.\nWooCommerce's own variations already provide per-variation price, stock\nand image, so on a variable product you'd have two systems trying to\ncontrol the same thing with no clean rule for which one should win. On a\nvariable product, personalize with individual Color\/Box elements\nalongside your WooCommerce variations instead.<\/p><\/dd>\n<dt id=\"what%27s%20the%20difference%20between%20an%20element%27s%20own%20price%20and%20a%20combination%27s%20price%3F\"><h3>What's the difference between an element's own price and a combination's price?<\/h3><\/dt>\n<dd><p>Each color or box can have its own price\/sale price, used as-is when the\nproduct has fewer than two combinable elements (or Combinations isn't\nenabled). Once Combinations is active and a matching combination has a\nprice set, that combination's price takes over for that specific pairing.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20uploaded%20files%20if%20the%20order%20is%20abandoned%3F\"><h3>What happens to uploaded files if the order is abandoned?<\/h3><\/dt>\n<dd><p>Files uploaded but never used in a completed order are stored in a\ntemporary directory and are automatically deleted after 3 days by a\nscheduled cleanup task.<\/p><\/dd>\n<dt id=\"can%20i%20reuse%20the%20same%20set%20of%20elements%20across%20several%20products%3F\"><h3>Can I reuse the same set of elements across several products?<\/h3><\/dt>\n<dd><p>Yes \u2014 use \"Save Element Set\" on any product's PersoNailit tab, then \"Add\nSet\" on any other product to apply it.<\/p><\/dd>\n<dt id=\"can%20i%20add%20my%20own%20element%20type%3F\"><h3>Can I add my own element type?<\/h3><\/dt>\n<dd><p>Yes \u2014 see \"Extending PersoNailit\" above.<\/p><\/dd>\n<dt id=\"why%20isn%27t%20svg%20offered%20as%20an%20allowed%20file%20type%20for%20image%20uploads%3F\"><h3>Why isn't SVG offered as an allowed file type for image uploads?<\/h3><\/dt>\n<dd><p>It's intentionally left out. SVG files can embed executable content (e.g.\n    <\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Fix: on phones, the product page's panel now slides out of the way while\nthe site's menu is open (WordPress, Astra and Elementor menus, drawers and\npopups) instead of covering it, and comes back when the menu closes.<\/li>\n<li>Dev: <code>personailit_panel_menu_selectors<\/code> filter to add other themes' menus.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>New: Shop listing swatches \u2014 preview and pick a product's options on its\nshop\/category card (image and price follow the choices). On computers the\noptions open on hover; on phones a chip opens a panel with every option\nand a direct \"Add to cart\".<\/li>\n<li>New: Mobile product panel \u2014 the personalization box docked at the bottom\nof the screen on phones, minimizable, settling into its place on scroll,\nwith the price and an \"Add to cart\" shortcut.<\/li>\n<li>New: products open with options already chosen from a link (<code>?pi=<\/code>).<\/li>\n<li>New: Text element can carry an extra price.<\/li>\n<li>New: collapsible \"PersoNailit\" details in the cart and mini-cart, with\nlabel, color and size in Global Settings.<\/li>\n<li>New: <code>personailit_get_listing_swatches_html()<\/code> \u2014 prints the shop listing\nswatches in product cards that don't use WooCommerce's loop hooks\n(custom loops, page-builder product widgets).<\/li>\n<li>New: filters and actions for developers: <code>personailit_shop_swatches_selectors<\/code>\n(card, image, price and title selectors) and <code>personailit_after_frontend_box<\/code>.<\/li>\n<li>New: <code>data-personailit-spotlight=\"off\"<\/code> on any element around product\ncards opens the phone panel without the spotlight \u2014 for one-column grids\nwhere the card already fills the screen.<\/li>\n<li>Improved: the box title keeps the capitalization typed in Global Settings.<\/li>\n<li>Improved: saving a product redraws the PersoNailit panel without\nreloading, and combinations left without one of their values are removed.<\/li>\n<li>Improved: adding to the cart without files no longer needs a page nonce\n(works with page caching and from the shop panel); file uploads still\nrequire a logged-in customer and a valid nonce.<\/li>\n<li>Fixed: the zoom on the product image now shows the chosen color\/box\nimage.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Text, Image Upload, Color Swatches and Box Swatches elements.<\/li>\n<li>Combinations: auto-generated combos of Color\/Box values with their own\nprice, sale price, image, stock, weight and dimensions, plus bulk\nactions.<\/li>\n<li>Out of stock handling for individual values and combinations.<\/li>\n<li>Element Sets: save and reuse a product's element configuration.<\/li>\n<li>Global Settings and Element Settings admin screens.<\/li>\n<li>Cart and order integration with per-element validation.<\/li>\n<li>Temporary\/final upload handling with automatic cleanup.<\/li>\n<\/ul>","raw_excerpt":"Add personalization fields to WooCommerce products: text, image upload, color and box swatches, with per-value pricing and combinations.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/351132","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=351132"}],"author":[{"embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/ridehome"}],"wp:attachment":[{"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=351132"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=351132"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=351132"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=351132"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=351132"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=351132"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}