| 开发者 | codersajjad |
|---|---|
| 更新时间 | 2026年8月1日 14:23 |
| PHP版本: | 7.4 及以上 |
| WordPress版本: | 6.9 |
| 版权: | GPL-2.0-or-later |
| 版权网址: | 版权信息 |
shoe-1.jpg and shoe-2.jpg become one product with a galleryblue-cotton-hoodie.jpg become "Blue Cotton Hoodie" automatically_dropproduct_cost_price (never shown to customers)blue-hoodie.jpg → Blue Hoodie (1 product, 1 image)blue-hoodie-1.jpg, blue-hoodie-2.jpg → Blue Hoodie (1 product, 2-image gallery)-) or underscores (_) to separate words. Trailing numbers are stripped automatically.
🔒 Safe & Secure
manage_woocommerce)DropProduct folder to /wp-content/plugins/Yes. WooCommerce must be installed and active. DropProduct requires WooCommerce 6.0 or higher.
You can edit: Title, Short Description, Regular Price, Sale Price, SKU, Stock Status, Category, and Cost Price (internal — not shown to customers).
Order Shield uses a rule-based scoring engine to assess risk at checkout. Each suspicious signal (disposable email, IP velocity, country mismatch, failed payments, checkout speed) adds risk points. If the total exceeds your "Block" threshold, the order is rejected; if it exceeds your "Review" threshold, the order is set to "On Hold". No external APIs are used.
Cost prices are stored in wp_postmeta under the key _dropproduct_cost_price. They are private and never shown to customers.
Yes. DropProduct is fully compatible with WooCommerce High-Performance Order Storage (HPOS).
No. DropProduct loads its CSS and JavaScript only on the DropProduct admin page.
product_id, quantity and total from wc_woocommerce_order_items, a table which has none of those columns — it holds only order_item_id, order_item_name, order_item_type and order_id. Every query raised a MySQL error, every result came back empty, and the dashboard reported zero sales on every install since the feature shipped in 1.1.0.wc_order_product_lookup, wc_order_stats, wc_customer_lookup). These are indexed and pre-aggregated, so reports are also considerably faster than the original design would have been.wc_get_orders() in a single pass. The response now includes a data_source field indicating which path produced the figures.date(), which ignores the WordPress timezone, so on many hosts the reporting window was shifted by hours against every other date shown in WooCommerce.dropproduct_analytics_sales_by_channel and dropproduct_analytics_conversion_metrics filters.NaN in the KPI cards.woocommerce_checkout_process and woocommerce_checkout_before_customer_details, neither of which the Checkout block fires. Not a single rule was evaluated, while the admin screen continued to display "🛡 Protected". Order Shield now hooks the Store API equivalents, so blacklist, disposable email, IP velocity, repeated contact, IP/country mismatch, failed payments and card-testing detection all apply to block checkouts. Blocked orders are rejected with a proper Store API error.wp_posts/wp_postmeta into dedicated tables, but Order Shield still queried post_type = 'shop_order' and _billing_email / _customer_ip_address post meta directly. Those queries matched nothing, so the IP velocity and repeated phone/email rules silently never fired on any HPOS store. All order lookups now go through wc_get_orders(), which routes to whichever data store is active.X-Forwarded-For, Client-IP and CF-Connecting-IP are supplied by the client and were trusted unconditionally. An attacker could send a different value on each request to walk past IP velocity limits, failed-payment counting and the COD restriction — or reuse someone else's address to inflate their counters and get them blocked. Forwarded headers are now only honoured when the store is explicitly configured as sitting behind a reverse proxy, and only when the connecting address matches the trusted-proxy allowlist. New "Network & Proxy" settings section, disabled by default, with an optional allowlist of proxy IPs and CIDR ranges (IPv4 and IPv6).woocommerce_checkout_create_order, before the order had an ID — so the on-hold status was overwritten by the payment gateway moments later, and the explanatory order notes were silently discarded. It now runs on woocommerce_checkout_order_processed, where the order is saved. Flagged orders are held, and the risk score and triggered rules are recorded as private order notes.is_checkout(), which is always false during a Store API request.=, +, -, @, TAB or CR are now neutralised, so a malicious product title can no longer execute when the exported report is opened in Excel, LibreOffice, or Google Sheets. Fields are now properly quoted and escaped, and a UTF-8 BOM is added so accented product names open correctly.prepare() in the Activity Log query. A prepared fragment was being nested inside a second prepare() call, which double-escapes and triggers _doing_it_wrong() on WordPress 6.2+. Each query is now prepared exactly once.stock_quantity, which the server had no handler for, so the value was silently dropped while the UI still flashed "Saved". Editing it now enables stock management, stores the quantity, and keeps the stock status column in sync.O'Brien. Escaping now happens once, at the point of output.dropproduct_wc_notice_snooze_period.WC() function rather than the WooCommerce class, and WooCommerce installed to a non-standard directory is now detected correctly.dbDelta() — which issues a DESCRIBE for every column — ran unguarded on each page load, including every front-end view. It is now guarded by a stored schema version, matching how the fraud log table already worked.dropproduct_grid_limit filter; return -1 for the previous behaviour.remove_all_actions() on all four notice hooks, which also swallowed core update warnings, recovery-mode alerts, paused-plugin notices and the default-password nag. Suppression is now selective: theme registration nags, plugin-recommendation blocks, review prompts and license reminders are unhooked, while WordPress core notices continue to display._dropproduct_* post meta. Uninstall is multisite-aware. Product posts are deliberately left untouched.Tested up to in the plugin readme (it referenced a WordPress version that does not exist).dropproduct_analytics_sales_by_channel — supply real channel attribution data.dropproduct_analytics_conversion_metrics — supply real device/conversion data.dropproduct_grid_limit — control how many products the editing grid loads.dropproduct_suppress_admin_notices — opt out of third-party notice hiding.dropproduct_allowed_admin_notices — keep specific notice callbacks visible.dropproduct_trust_proxy_headers — control proxy-header trust per request.dropproduct_trusted_proxies — supply the trusted proxy allowlist programmatically.dropproduct_wc_notice_snooze_period — control how long the WooCommerce dependency notice stays snoozed._dropproduct_cost_price post meta. Colour-coded display: green (profitable), red (loss), grey (no data).{prefix}dropproduct_fraud_log.confirm() with a styled modal popup for delete confirmations.handle_bulk_price_adjust() AJAX response refactored: returns flat {id, regular_price, sale_price} per product instead of nested fields[] array — eliminates the "price disappears after apply" bug.