Talabi Order Form for WooCommerce

Description

Cash on delivery is how most of North Africa and the Gulf buys online, and the
standard WooCommerce checkout was not built for it. Asking a shopper to add to
cart, open the cart, go to checkout and fill in a billing address loses most of
them before the order exists.

This plugin replaces that journey with a single form on the product page. Name,
phone, city, address, order. No account, no cart, no payment step.

Built by WooCodForm ( https://woocodform.com/ ).

The form

  • Popup or embedded on the product page, or placed anywhere with a shortcode.
  • Every field can be reordered, renamed, made optional, or switched off.
  • As many custom fields as you need — a delivery window, a size, a gift note.
  • Drag the blocks of the form into the order you want, and write your own
    heading for each one in each language.
  • Full right-to-left layout, with Arabic, French, English, Spanish and Portuguese translations built
    in — no .po files to compile, and every string editable from the admin.
  • Works with simple and variable products.

The order button

  • Its own text, colours, radius, border, shadow, icon and animation.
  • Replaces the Add to cart button, or sits beside it.
  • Optionally sticks to the bottom of the screen on a phone.
  • A second button for WhatsApp or any link of your own.

Delivery

  • One flat fee, free delivery, or your own named options — “In Casablanca 15,
    outside Casablanca 35” — each with a note under it.
  • Your own list of cities and regions, each with its Arabic name.

Keeping the bad orders out

  • A honeypot field no real shopper ever fills in.
  • A minimum time on the form, which no bot spends.

Everything is checked twice

Every price is worked out again on the server before the order is written, from
your settings and the product — never from what the browser sent. The amount the
courier collects always matches what was on screen.

Built for cached sites

Saving a setting clears LiteSpeed, WP Rocket, W3TC, WP Super Cache, WP Fastest
Cache, Autoptimize, SiteGround Optimizer, Cache Enabler and Breeze, so changes
appear straight away. An expired security token on a cached page is refreshed and
the order retried, instead of failing.

Premium

The premium add-on adds the parts that grow an order rather than take it:
quantity offers with a colour and size picker for each piece, order bumps,
post-purchase upsells, a delivery rate table by city or region, WooCommerce
shipping zones, ready-made city lists for nine countries, fraud blocklists and
rate limits, an analytics dashboard, abandoned checkouts, webhooks, Google
Sheets, and the Meta, TikTok, Snapchat, GA4 and Google Ads pixels.

It is a separate plugin that installs on top of this one. Nothing in this
plugin is switched off to sell it: the features above are not here at all.

Screenshots

Installation

  1. Upload the talabi-order-form-for-woocommerce folder to /wp-content/plugins/.
  2. Activate it through the Plugins screen.
  3. Go to COD Form Settings and work through the tabs.
  4. Enable WooCommerce’s Cash on delivery gateway under WooCommerce Settings Payments, so orders carry the right payment title.

FAQ

Does it work with variable products?

Yes. The shopper picks the colour and size with WooCommerce’s own selector on the
product page and the form follows along, updating the price and the image.

Will the customer ever be charged a different amount than the form showed?

No. Every price is recalculated on the server from the product and your saved
settings before the order is written, and the order total is pinned to the figure
the shopper agreed to.

Does it work with taxes?

Yes. With taxes enabled the form shows tax-inclusive prices and the order line
items store the net amount, so WooCommerce records the tax correctly and the
totals still match.

Can I use it with a page builder?

Yes. Use [talorf_form] for the full form or [talorf_button] for a button that opens
the popup. Both accept a product_id.

What happens to my data if I delete the plugin?

All of it goes — settings and tables. Your WooCommerce orders are never touched.
Untick Delete all data on uninstall on the Advanced tab first if you would
rather keep it.

I bought the premium add-on. Do I remove this one?

No. The add-on extends this plugin and does nothing without it. Keep both active.

Reviews

There are no reviews for this plugin.

Contributors & Developers

“Talabi Order Form for WooCommerce” is open source software. The following people have contributed to this plugin.

Contributors

Changelog

2.6.0

  • Spanish and Portuguese join Arabic, French and English in the built-in
    catalog: every label, placeholder, button and message on the form, with
    no .po files to compile. Both are overridable per string on the
    Translations tab like the other three. The premium add-on 2.4.0 ships
    the matching region and city lists for Mexico, Colombia and Brazil.

2.5.2

  • Security: the “minimum time on the form” bot check trusted a timestamp
    the browser sent back, so a bot could leave it out or send an older one
    and skip the wait. The timestamp is now signed by the server when the form
    is rendered; a submission that arrives without a genuine signature is
    treated as a bot. Nothing changes for stores that have the check set to 0.
  • A product page cached before this update still carries the old, unsigned
    stamp. The form recognises that, fetches a fresh one, waits out the
    configured minimum, and sends the order — so page caches do not need
    flushing on upgrade.

2.5.1

  • Fixed: the 2.5.0 rename left three file paths naming a file that was never
    actually renamed — class-talorf-install.php instead of the real
    class-cfu-install.php, and the same for the settings class and the
    storefront’s own stylesheet and script. On some installs this made
    activation fail outright with a fatal error, and on others it left the form
    unstyled with none of its JavaScript running. All three are corrected, and
    a new check now runs before every release that confirms every path a file
    references actually exists on disk.

2.5.0

  • Renamed every internal identifier from the three-letter cfu prefix to
    talorf — class names, hooks, options, the AJAX actions, the admin page
    slugs, the two shortcodes. WordPress.org no longer accepts a prefix shorter
    than four characters. An existing shop keeps its settings, its analytics and
    its abandoned checkouts: on update the settings option is copied across and
    the three tables are renamed in place. Pages built with [cod_form] still work
    — it stays as an alias where nothing else has taken it.
  • The Font family setting on the Design tab is now restricted to what a real
    font stack is made of. Its value goes straight into an inline stylesheet, and
    a crafted one could have closed the rule and injected CSS of its own.
  • A form field submitted as an array — name[]=x — no longer reaches a string
    sanitiser and throws a TypeError on PHP 8; it is treated as absent.
  • A filtered form section is printed through wp_kses with a form-safe
    allow-list rather than echoed as-is.

2.4.1

  • The “Best value” ribbon on a highlighted quantity offer had no setting at
    all — its colour was written into the stylesheet directly, so the only way
    to change it was to edit the plugin. It is now a colour field on the Design
    tab, next to the other tier colours, and shows in the live preview like
    everything else there.

2.4.0

  • The Design tab now shows a live preview of the form beside the settings.
    It is the real form, drawn with the storefront’s own markup and stylesheet,
    and it restyles itself as you drag a colour or type a size — so choosing a
    colour no longer means saving, opening the shop, looking, and coming back.
    The preview also makes plain which control does what, which several of them
    did not say on their own.
  • Add-ons can now re-price what they drew on screen when a shopper picks a
    variation. A quantity offer’s card is built when the page is, from the parent
    product, which is right until a size with its own price is chosen — from then
    on the card and the total underneath disagreed. The new talorf_totals_response
    filter hands the add-on the resolved product on every recalculation, and the
    form puts the new figures back on the cards.

2.3.9

  • Fixed heavy-looking bold Arabic text in the form — the product name, the
    total, the quantity-offer badges and prices, the submit button. An Arabic
    font’s Bold and ExtraBold weights render visibly thicker than the same
    numbers do in Latin script; this is true of the font files themselves, not
    a missing weight or a broken setting, so it showed up however the shop’s
    theme was configured. Arabic text in the form now uses SemiBold instead,
    which reads just as emphasised without the extra weight. English and French
    are unaffected.

2.3.8

  • Renamed from CodForm for WooCommerce to Talabi Order Form for WooCommerce,
    and the slug from codform-for-woocommerce to talabi-order-form-for-woocommerce,
    at the WordPress.org review team’s request — the old name matched an existing
    product’s too closely. Nothing about the plugin changed but its identity: same
    settings, same behaviour, same option names.
  • Removed the Custom CSS field. A shopkeeper could paste arbitrary CSS into it,
    which the directory’s guidelines no longer allow — the styling controls that
    remain cover colours, radius, spacing and font, which was already how most
    of the Design tab worked.
  • A submitted variation id is now checked against the product it claims to
    belong to, and the product itself against the shop’s own include/exclude
    list, before either is trusted to price an order.
  • The three places that printed a <style> or <script> tag directly now
    register them properly instead.
  • Declared WooCommerce as a dependency via Requires Plugins, and dropped a
    translation-loading call WordPress.org has not needed since 4.6.

2.3.7

  • Fixed the empty white half a popup could show after ticking an add-on, which
    2.3.6 introduced. Stopping the wrapper from scrolling was right, but it was
    done with overflow: hidden, and hidden still leaves an element scrollable
    to the browser itself — so the same focus scroll simply moved down a level and
    slid the form up out of the dialog. Both now use overflow: clip, which
    clips without being scrollable at all, and the popup pins itself back for
    browsers too old to know it.

2.3.6

  • Fixed the popup jumping when an add-on was ticked — the real cause this time,
    found by reproducing it rather than guessing. Clicking an add-on focuses its
    checkbox, and a browser scrolls every scrolling ancestor to bring a focused
    element into view. The popup wrapper was a scroll container carrying hundreds
    of pixels of range that nothing was drawn in, so it scrolled through that and
    shoved the dialog off the top of the screen. It is no longer a scroll
    container; the form inside it is the only thing that scrolls.
  • The popup is also no longer sized against 100vh, which on a phone measures the
    space behind the browser toolbars and made the dialog taller than the screen.

2.3.5

  • Fixed the popup jump once more, from its actual cause this time: the browser’s
    own scroll-anchoring feature was quietly re-scrolling the popup right after our
    own code put the scroll position back, since it runs later in the same frame
    and a popup nested two scrolling boxes deep is exactly the layout it trips
    over. Switched it off on both boxes rather than continuing to fight it.

2.3.4

  • Fixed the popup still jumping when a garment add-on’s size and colour pickers
    appeared. The 2.3.2 fix only steadied the delivery list; the pickers reveal
    is now steadied the same way, and against every scroll position involved —
    the popup’s own overlay, its body, and the page — not just one of them.

2.3.3

  • Fixed a critical error on the product page as soon as the premium add-on’s
    quantity offers were configured — introduced in 2.3.2, and hit both the popup
    and the embedded form. A value that had always come back empty was suddenly
    a real one, and the line reading it had never been written to expect that.

2.3.2

  • Fixed the form jumping back to the top when an add-on was ticked. The delivery
    list is now only redrawn when the delivery options have actually changed.
  • Fixed add-on settings being read before add-ons had registered them, which
    could leave a configured feature quietly doing nothing for the whole request.
  • Add-ons that are variable products can now carry their own size and colour,
    and the order is written against that exact variation.

2.3.1

  • Tested against the current WordPress release, and the readme title now matches
    the plugin name exactly, as the directory scanner requires.

2.3.0

  • The premium features now wait for a licence. Installing the add-on used to
    unlock everything on its own; the locked tabs stay locked until a key is
    entered, and a notice says so rather than leaving you to wonder.
  • Fixed: the button for entering a key answered “you are not allowed to access
    this page”. It pointed at a screen that only exists once somebody has opted in
    to the licensing service, which this plugin deliberately never asks them to do.
    It now opens the key dialog directly.

2.2.2

  • The menu is ours again: Contact Us, Account, Pricing and Affiliation are no
    longer added to it by the licensing library. Licence has its own item, and
    Add-Ons stays because that is where the premium is found.

2.2.1

  • Fixed: with the premium add-on installed, submitting the form failed with
    “something went wrong”. A helper the add-on needs to price delivery was not
    reachable from outside its own class, so every submission hit a fatal error.
  • Licence now has its own item in the menu, not only a settings tab.
  • The button for entering a key opens the box you type it into, instead of
    dropping you back on the settings page.

2.2.0

  • A Licence tab: what the licence on this site is, how many of its sites are in
    use, when it runs out, and a button to activate a key. It says so plainly when
    the add-on is not installed rather than showing an empty form.
  • The plugin no longer asks anything on activation. It used to show an opt-in
    screen before you could get on with it; now it just works, and opting in for
    updates and support is a choice you make later from the Licence tab.

2.1.0

  • The plugin now counts the orders it takes, and shows the tally on the new
    Go Premium screen. Nothing is ever limited by it — it is there so you can see
    how the form is doing without paying for anything.
  • A quiet, dismissible note at 25, 100 and 500 orders in a month, suggesting
    what shops that size usually reach for next. It appears once per milestone.
  • A Go Premium screen that lays out, feature by feature, what is in this plugin
    and what the add-on brings, so the line between them is not a guess.

2.0.1

  • Named delivery options, drag-and-drop form layout, per-language section
    titles, unlimited custom fields and custom CSS are all part of this plugin
    now. They were briefly held back for the add-on, which is not how a plugin in
    this directory should work — a feature that ships should run.
  • The features that are genuinely sold separately no longer ship here at all:
    their code lives in the add-on rather than sitting switched off in this one.

2.0.0

  • First release as two plugins. This one is the form: everything needed to take
    a cash-on-delivery order, in Arabic, French or English, free and complete.
  • The features that grow an order — quantity offers, order bumps, upsells,
    delivery rates by city, analytics, abandoned checkouts and integrations — moved
    to a premium add-on that installs on top of this one. The tabs stay visible
    here, showing what each does, until the add-on unlocks them.
  • Settings are shared between the two, so nothing is retyped and nothing is lost
    in either direction.