| 开发者 | timon-dimon |
|---|---|
| 更新时间 | 2026年7月15日 16:15 |
| PHP版本: | 8.0 及以上 |
| WordPress版本: | 7.0 |
| 版权: | GPLv2 or later |
| 版权网址: | 版权信息 |
/wp-content/plugins/ordercrm-for-woocommerce directory, or install through WordPress admin panel (the package includes Composer dependencies under vendor/ for PDF export — no server-side composer install is required for typical ZIP installs)Yes! The plugin is designed to work with any custom order statuses, including those created by other plugins like Advanced Shipment Tracking.
Go to OrderCRM → Settings → Statuses in your admin panel. You can organize statuses into three groups: "In Progress", "Completed", and "Cancelled".
No. The plugin includes an automatic update system that safely migrates order statuses without data loss.
Yes, the plugin is designed to work alongside other WooCommerce plugins without conflicts.
No. The PDF is generated on demand and sent in the AJAX response only; it is not saved as a public file in the media library or uploads folder, to reduce exposure of commercial data.
ordercrm-for-woocommerce ([unique]-for-woocommerce pattern); display name OrderCRM for WooCommerce unchanged./crm-login/ writes CRM login activity (explicit log after wp_signon, symmetric with REST logout).OrderCRM_Routes::load_template(); Chart.js 4.5.1; wp-admin Roles/Users tab fixes (role slug normalization, readable role names).product_brand terms in three columns (A–Z); saved to reports_selected_product_brands; Post/Redirect/Get save flow.brands_categories_chart_image snapshot (#salesBrandsCategoriesChart) with SVG fallback.#B2BEB5 (distinct from all-products statistics #DBDBDB).SALES_CRM_STRICT_REST_NONCE (default OFF), with staged rollout/rollback controls and staging smoke validation.wc_customer_lookup.num_orders; CRM login asset isolation fix to avoid plugin-induced root-relative static requests; logs UI refresh delay reduced to 10 seconds (sales_crm_logs_cache_invalidate_delay default)./sales-crm/v1/* with Origin validation and explicit cross-origin 403 blocking, without frontend/report regressions on staging.sales-crm-invoices, deny direct access) and invoice filenames are now unpredictable ({order}-{random}.{ext}) while user download name remains unchanged.?tab=logo redirects to General.readme.txt and plugin header synchronized).handle_add_order_page_post() and get_add_order_view() centralize POST dispatch and display data (totals, customer, country options); add-order.php template is display-focused. No CRM UI changes.all_checks_passed: true.Sales_CRM_Order_Service::handle_add_order_draft_mutations_post(); template dispatches a single service call; REST customer selection unchanged.handle_create_order_post() and handle_create_new_customer_post() (redirect to order card, JS fallback when headers already sent).Sales_CRM_Order_Draft_Session (WC session with user-meta fallback); template no longer defines global session helpers.Sales_CRM_Order_Service::handle_temp_cart_post(); correct message when adding the same simple SKU again (Product quantity increased.).Sales_CRM_Products_List_Service; template is display-focused./crm-dashboard/reports/, Statistics among all products shows TOP-5 products (table) and TOP-5 categories (Chart.js pie, integer % to 100, Other for the rest); cached per report period.sales-crm-table-container).Sales_CRM_Admin_Settings./crm-dashboard/logs/ shows names as Last name First name, sorted A–Z by last name (same display rules as customer/order profiles)./crm-dashboard/products/ built from WooCommerce product_brand taxonomy (A–Z); combines with search, category, and stock filters; REST GET /products accepts brand query param. Select is hidden when the taxonomy is not registered.sales_crm_pdf_export_async_enabled, default off — sync download unchanged).wave682_*, wave683_*, wave684_*).sales_crm_deferred_report_cache_invalidation_enabled, sales_crm_report_cache_invalidate_delay.wp_enqueue_scripts already ran.wave682_*, report invalidation after debounce). No CRM UI changes.functions.php defer filters required).pending in the database; client receives the standard WooCommerce notification (customer_on_hold_order); managers receive New order; billing_email required with user-email fallback.sales_crm_enable_wc_deferred_transactional_emails and sales_crm_defer_transactional_emails_on_order_mutation default to false; set to true for faster REST TTFB with queue flush on REST/shutdown.Sales_CRM_Background_Jobs (group sales-crm); runtime runner wave68_* checks.sales_crm_delete_old_login_logout_logs); legacy WP-Cron removed on migrate; filter sales_crm_login_logout_log_retention_days (default 62 days). No UX change.init; lazy admin settings tabs; capability slugs without early __() on plugins_loaded; early custom order status registration without textdomain before init.customer-refunded-order.php without $user_login.all_checks_passed: true, wave68_login_logout_cleanup_*).orders-table.php) — all display logic moved to Sales_CRM_Order_Service::build_orders_table_rows(); customer card sidebar totals use pre-formatted HTML from get_customer_profile_for_view(). No UX changes; staging smoke passed.PRODUCTION_HTTPS_CHECKLIST.md); runtime runner checks wave67_* (cookie pattern, login nocache, URL scheme on HTTPS).shop_order) for reliable wave4/wave64 checks.POST /auth/logout (class sales-crm-logout) instead of wp_logout_url() — no WordPress "confirm logout" page; redirect straight to /crm-login/.has_crm_access() check that logged out valid users with false no_access (regression from 3.1.5–3.1.6). Access is enforced on CRM pages after redirect — same as before 3.1.5.wp_signon( $creds, false ) as in 3.1.4 for production HTTPS cookie compatibility.data-sales-crm-version on <body> for deploy verification when HTML comments are stripped.error query var on /crm-login/ (collision caused false "An error occurred during login" banner on HTTPS production). CRM errors now use crm_login_error only./crm-login/ when the form was not submitted (stale nonce redirect, unknown error query codes, or cached login HTML).invalid_nonce); show errors only for known codes; wp_signon() uses secure cookies on HTTPS; check CRM access after sign-in; nocache_headers() on the login page./crm-reports/ and PDF export on repeat views; cache invalidates on order status change and new orders. No UX changes.wave64_* and wave65_*.get_logs() — removes unbounded PHP merge for pagination count; faster logs screen on large datasets.wave62_* and wave63_*; phase-f scenarios S1–S6 passed.sales_crm_user_can() and Sales_CRM_Capabilities; aligned UI menus, REST permission callbacks, and CRM role settings sync.add_order_notes (with legacy edit_sales_crm fallback) consistently in templates and REST.view_reports capability.wave61_rbac_* passed.includes/modules/ — orders/, customers/, logs/, products/ with module loaders.Sales_CRM_Products_List_Service; CRM products page uses a prepared view-model (no SQL in template).GET /sales-crm/v1/products — paginated catalog list with filters (search, category, stock, page); stock filter accepts all WooCommerce stock statuses (including custom statuses such as out of production).wc_get_product_stock_status_options(); fixes for status-only updates from the dashboard modal.sales-crm/v1 (orders, customers, products search, order card, catalog edit, logout, invoices, report PDF); see CHANGELOG.md for full notes.outofstock / out_of_production items to orders; faster order status change (deferred transactional emails).Sales_CRM_Customer_Repository and Sales_CRM_Activity_Log_Repository; DTO read-models for customer list/profile and activity logs; templates customer.php, customers.php, and logs.php use service layer instead of direct DB/user API calls.sales_crm_enqueue_phone_input_assets()._price meta is empty; CRM discount VAT display; customer password reset white screen.docs/reports/WAVE_3_ACCEPTANCE_REPORT.md; see CHANGELOG.md for full developer notes.Sales_CRM_Order_Discount_Service, Sales_CRM_Order_Line_Item_Service, Sales_CRM_Order_Crm_Actions_Service, shared Sales_CRM_Order_Mutation_Support; Sales_CRM_Order_Service is a thin facade delegating to them.wc_create_order() path removed from add-order.php; creation always uses Sales_CRM_Order_Service::create_order_from_crm_session() (no WOO_SALES_CRM_V3_ENABLED branch).Sales_CRM_Order_Repository::query_for_crm_list() — single entry for CRM status-group filters before wc_get_orders.get_vat_rate_label_for_order() and VAT (XX%) in order totals; historical rate from order tax snapshot.ARCHITECTURE_IDEALSTATE_PLAN.md; updated SERVICES_FACADE.md.get_total_tax() / get_subtotal().order-items-table.php).docs/guides/WOOCOMMERCE_TAX_PRICING_CRM.md — CRM discount and VAT calculation (with/without discount).Sales_CRM_Order_Repository and Sales_CRM_Service_Factory::order_repository(); optional Strangler path for Create order in CRM when WOO_SALES_CRM_V3_ENABLED is set in wp-config (Sales_CRM_Order_Service::create_order_from_crm_session). Template views use order service helpers (get_wc_order, get_order_statuses_for_ui, get_status_display_name, get_order_notes_for_display) instead of scattered WooCommerce calls.wc_prices_include_tax, WC totals); preview totals for the temporary cart use a short-lived WC_Order + calculate_totals().docs/guides/WOOCOMMERCE_TAX_PRICING_CRM.md.ARCHITECTURE_IDEALSTATE_PLAN.md, template order-logic inventory, Strangler create-order acceptance on staging (see CHANGELOG.md).VAT (%s): — recompile languages/sales-crm-ru_RU.mo if you ship custom PO files.Sales_CRM_Customer_Service, Sales_CRM_Log_Service (with log() for WC logger and CRM login/logout events), continued use of Sales_CRM_Order_Service; Sales_CRM_Orders loads customer display data via Customer Service; plugin boot order updated (customers → customer-service → orders).Sales_CRM_Log_Service instead of direct Sales_CRM_Logger in touched code; Sales_CRM_Admin_Settings::get_logs() uses the same log pipeline as the CRM logs UI.%PDF even if Content-Type is wrong); AJAX URL uses relative admin-ajax.php; header band uses primary color from settings.define( 'SALES_CRM_DISABLE_PDF_RATE_LIMIT', true ); in wp-config disables PDF rate limiting (remove after tests).<body class="mobile-blocked-page"> so primary color background from settings applies.msgid must match __() placeholders %1$s / %2$d); recompile .mo after .po updates.CHANGELOG.md (Keep a Changelog); internal docs: docs/features/SERVICES_FACADE.md, updated REPORTS_PDF_EXPORT.md and REFACTORING_3_0_STRATEGY.md.docs/reports/HPOS_CODE_INVENTORY.md; added REFACTORING_SECURITY_AUDIT_MATRIX.md and REFACTORING_ACCEPTANCE_CRITERIA.md (audit matrix + formal acceptance criteria for next phases).WOO_SALES_CRM_V3_ENABLED (aligned with CRM 3.0 naming; see developer/docs/reports/REFACTORING_3_0_STRATEGY.md).define('WOO_SALES_CRM_V3_ENABLED', true); or CRM_V3_ENABLED in wp-config.php when you are ready to test the refactored branch (default remains legacy). Old names WOO_SALES_CRM_V2_ENABLED / CRM_V2_ENABLED are still read for backward compatibility.version.php, plugin header, and Stable tag set to 3.0.0; Composer require PHP ^8.0.rub. string in PDF output where the ruble glyph is unreliable in PDF fontsuploads; delivery only through authenticated AJAX (view_reports / administrator)composer.json, composer.lock, and vendor/ (mPDF) for “upload and run” installs; developer docs: docs/features/REPORTS_PDF_EXPORT.md