Skladify – Price & Stock Sync for MoySklad

Description

Skladify – Price & Stock Sync for MoySklad updates existing WooCommerce products from MoySklad without importing or creating products.

This is an independent integration. It is not developed, endorsed, sponsored by or affiliated with the owners of MoySklad or WooCommerce. Those names are used here only to describe the services this plugin connects to, as permitted by nominative fair use.

MoySklad is a trademark of its respective owner. WooCommerce is a trademark of Automattic Inc. No trademark logo, wordmark or visual identity of either owner is bundled with or displayed by this plugin.

The matching rule is explicit:

WooCommerce SKU = MoySklad article

Free plugin scope:

  • Manual synchronization started by an authorized WooCommerce administrator.
  • Background batch processing after the manual start, using one-off WordPress queue events.
  • Stock from exactly one explicitly selected MoySklad warehouse.
  • WooCommerce regular-price updates.
  • WooCommerce stock quantity and stock-status updates.
  • Simple products and individual variations.
  • Dry-run mode and synchronization logs.
  • No plugin-imposed limit on the number of product cards.

This plugin does not register a recurring synchronization schedule. It also does not contain multi-warehouse selection or cross-warehouse stock aggregation code. Those capabilities can be implemented by a separately distributed add-on through the public provider and settings hooks.

The plugin never creates or deletes WooCommerce products. Variable parent products are skipped; put the MoySklad article on each variation SKU that should be synchronized.

External services

This plugin connects to the MoySklad JSON API because prices, products, warehouses, and stock values are stored in MoySklad and cannot be synchronized without that service.

Requests are sent to https://api.moysklad.ru/ only when an authorized administrator tests the connection or starts a manual synchronization, and while the resulting one-off queue is processing.

Depending on the selected action, the plugin sends:

  • An authorization header containing the saved MoySklad access token, or Basic authorization derived from the saved MoySklad login and password.
  • MoySklad product UUIDs needed for a stock-report request.
  • The one selected MoySklad warehouse UUID.
  • Product-list pagination and the configured stock-value type.

The plugin does not send WooCommerce customer, order, payment, or shipping data to MoySklad.

Service information and policies:

  • MoySklad website: https://www.moysklad.ru/
  • MoySklad API documentation: https://dev.moysklad.ru/doc/api/remap/1.2/
  • MoySklad privacy policy: https://www.moysklad.ru/upload/files/policy.pdf
  • MoySklad service terms: https://www.moysklad.ru/upload/files/oferta.pdf

Use of the external service is subject to MoySklad’s account terms, availability, API limits, and privacy policy.

Security and data storage

  • Administrative pages and actions require the manage_woocommerce capability.
  • Manual actions use WordPress nonces.
  • Settings are sanitized server-side; the Free warehouse setting accepts one scalar UUID only.
  • Secrets are stored in the WordPress options table with autoload disabled and are not written to synchronization logs.
  • Log context recursively redacts common password and token keys.
  • The plugin retains at most 1,000 synchronization log records in its own table.

Screenshots

Installation

  1. Back up the WordPress database and files.
  2. Deactivate the legacy “MoySklad WC Standalone Price & Stock Sync” plugin if it is active.
  3. Upload the plugin ZIP through Plugins > Add New > Upload Plugin, then activate it.
  4. Open WooCommerce > MoySklad Sync.
  5. Save a MoySklad access token, or save a login and password.
  6. Click Test connection to load warehouses and sampled price types.
  7. Select exactly one warehouse and save the settings.
  8. Keep Dry run enabled for the first synchronization and click Synchronize now.
  9. Review the counters and logs. Disable Dry run only after the matches and settings are correct.

If the previous plugin had exactly one selected warehouse, that warehouse is migrated. If it had several selected warehouses, this plugin leaves the warehouse empty and requires an explicit selection; it never chooses an arbitrary warehouse.

FAQ

Does the plugin create products?

No. Products and variations must already exist in WooCommerce. Only products whose SKU exactly matches the MoySklad article are considered.

Is there a product-card limit?

No. The plugin does not impose a catalog-size limit. Products are read from MoySklad in bounded background batches.

Does the plugin synchronize automatically?

No recurring schedule is included. An administrator must start each run manually. After that click, the run continues through one-off background queue events until all MoySklad product pages have been processed or the queue is stopped.

Why can I select only one warehouse?

This plugin intentionally reads stock from one explicitly selected warehouse. It sends one warehouse UUID in the stock request and does not aggregate stock across warehouses.

Can a separate add-on add scheduling and multiple warehouses?

Yes. The plugin exposes a stock-provider interface, a pssmwc_stock_provider filter, settings-page hooks, and the public PSSMWC\Sync::start() entry point. A separate add-on must contain its own scheduler, multi-warehouse settings, and aggregation implementation.

What happens when a stock value is missing?

A missing or null stock value is treated as unknown and is not written to WooCommerce. It is not silently converted to zero.

What if WP-Cron is disabled?

The manual run still depends on one-off WordPress queue events between batches. When DISABLE_WP_CRON is enabled, configure a real server cron request for wp-cron.php; otherwise a queued run can remain in the Running state.

Are settings removed on deactivation?

No. Deactivation stops the queue but retains settings and logs so the plugin can be reactivated safely. The legacy plugin option is also retained during migration to allow rollback.

What is removed when I delete the plugin?

Uninstall removes this plugin’s settings, queue state, cached reference data, log table, and private mapping metadata. WooCommerce product prices and stock values already written by a completed synchronization are preserved. Data owned by the legacy plugin is not deleted.

Reviews

There are no reviews for this plugin.

Contributors & Developers

“Skladify – Price & Stock Sync for MoySklad” is open source software. The following people have contributed to this plugin.

Contributors

“Skladify – Price & Stock Sync for MoySklad” has been translated into 1 locale. Thank you to the translators for their contributions.

Translate “Skladify – Price & Stock Sync for MoySklad” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.

Changelog

1.0.6

  • Moved the synchronization keep-alive JavaScript into an enqueued asset loaded only on this plugin’s settings page while a run is active.
  • Passed the REST endpoint and nonce through wp_add_inline_script() instead of printing a raw script tag in PHP.
  • No settings change and no data migration.

1.0.5

  • Removed a discouraged PHP execution-limit override; queue processing remains bounded by the existing execution-time budget.
  • Kept SSL verification at the WordPress HTTP API default for same-site loopback requests and retained the existing fallback queue channels when loopback is unavailable.
  • No settings change and no data migration.

1.0.4

  • Limited dependency and action messages to the plugin row and the plugin’s own settings screen.
  • Moved loopback runner authentication into the REST permission callback.
  • Removed bundled translation catalogues so WordPress.org language packs can provide translations.
  • No settings change and no data migration.

1.0.3

  • A synchronization run now processes as many batches as the request can afford instead of exactly one, so throughput no longer depends on how often the site happens to receive traffic.
  • The batch time budget is derived from the host’s own max_execution_time, and a run stops before starting a batch that could not finish inside it.
  • Background work is carried by Action Scheduler, by a self-chaining loopback request and by WP-Cron, whichever the host supports; losing one channel no longer stalls a run.
  • The loopback channel authenticates with a site-specific secret compared in constant time, verifies once every twelve hours that loopback requests reach the site, and can be disabled with the pssmwc_enable_loopback filter.
  • The settings screen keeps a running queue moving while it is open and reloads itself when the run ends.
  • A running queue is now considered abandoned after six hours rather than one, because restarting a queue resets its offset and a shorter threshold could make a scheduled run repeat the same catalogue indefinitely. The threshold is filterable through pssmwc_stale_queue_ttl.
  • The settings screen reports which background channels are available instead of warning only about DISABLE_WP_CRON.
  • New filter pssmwc_drain_time_budget for hosts with unusual execution limits.
  • No settings change and no data migration.

1.0.2

  • Action notices are now stored server side for one minute instead of being carried in the page URL, so their text can no longer be supplied through the address bar.
  • Log table queries now pass the table name through the %i placeholder of $wpdb->prepare(), which raises the minimum WordPress version to 6.2.
  • Recent log rows are served from the object cache and invalidated on write.
  • Removed the manual load_plugin_textdomain() call; WordPress loads translations on demand.
  • No settings change and no data migration.

1.0.1

  • Added the table-row level action pssmwc_render_stock_source_row, so an add-on that replaces the stock source owns a complete table row including its own header cell and field label.
  • The built-in warehouse row is now skipped entirely when an add-on both suppresses the default field and supplies a replacement row, which removes an orphaned field label from the settings screen.
  • The cell level action pssmwc_render_stock_source_field is retained and documented as cell content only, so add-ons written against 1.0.0 keep working unchanged.

1.0.0

  • Initial public Free release.
  • Manual synchronization only.
  • One selected warehouse only.
  • No product-card limit.
  • Added extension points for a separately distributed scheduler and stock provider.
  • Added safe migration from the legacy multi-warehouse build without selecting an arbitrary warehouse.