Menu
DocumentationDevelopers / Compatibilities

Developers

Compatibilities

Which plugins are supported (WooCommerce) and which aren't officially yet (ACF, Elementor), how support is built from the public hooks, and how a plugin ships its own.

Support for another plugin is a compatibility: a file that uses only the public hooks. The plugin ships one, for WooCommerce; any plugin can add its own — or replace the bundled one.

At a glance

Plugin Status What to expect
WooCommerce Supported Products, variations, orders and coupons as content types; shop, cart, checkout, my account and terms pages as linked settings; product galleries and category images; products shown by blocks suggested; product reviews in their own row; the product lookup table refreshed after an import
Advanced Custom Fields (ACF) Not officially supported yet, not tested See below
Elementor Not officially supported yet, not tested See below

Not tested means just that: nothing here was checked against these plugins. What follows comes from how they store their data, and from what the WordPress Importer does with it.

Advanced Custom Fields

  • Field values live in each post’s custom fields (post meta), and the WXR carries every post’s custom fields, so they come along with the items exported.
  • Fields that hold IDs (image, file, gallery, relationship, post object, page link, user) keep the IDs of the old site: the WordPress Importer doesn’t remap IDs inside custom fields. Where the other site gives the items new IDs, those fields point to the wrong item or to nothing.
  • Field groups are stored by ACF as its own post types, or in local JSON files in the theme; neither is chosen for you. Export them with ACF’s own tools (ACF → Tools → Export), or keep them in the theme’s JSON.
  • Options pages store their values in site options (names starting with options_), which the Options row can export by name.

Elementor

  • Designs live in each page’s custom fields (_elementor_data, a JSON holding the widgets, with image IDs and URLs), so they come along with the pages.
  • IDs and URLs inside that JSON aren’t remapped by the WordPress Importer: images can keep pointing to the old site’s IDs and addresses.
  • Global styles and templates (the site kit, saved templates) are Elementor’s own content; Elementor’s Import / Export Kit tool is made for them.
  • Generated CSS files aren’t exported; Elementor builds them again (Elementor → Tools → Regenerate CSS & Data).

Using one of these and want it supported? Open an issue with what you export — or write a compatibility, below.

The WooCommerce compatibility

includes/compat/woocommerce.php, registered on eizport_register_compat when WooCommerce exists:

Hook Adds
eizport_linked_options Shop, Cart, Checkout, My account and Terms and conditions pages, as roles
eizport_option_groups The WooCommerce pages group
eizport_denied_options woocommerce_version, woocommerce_db_version
eizport_media_used Product and variation galleries (_product_image_gallery), and the images of the products’ categories
eizport_term_media Product categories’ thumbnail_id, mapped to the imported image
import_end Saves each imported product the way WooCommerce does and refreshes its row in wc_product_meta_lookup (prices, SKU, stock: what the shop’s filters and sorting read)
eizport_suggested_items Products that blocks and [products ids="…"] show in the items chosen
export_wp + query Product reviews: only the ones chosen, when the export says which (reviews)

Writing one

add_action( 'eizport_register_compat', function () {
	if ( ! class_exists( 'My_Plugin' ) ) {
		return;
	}
	add_filter( 'eizport_linked_options', 'my_plugin_eizport_linked' );
	add_filter( 'eizport_option_groups', 'my_plugin_eizport_groups' );
	add_filter( 'eizport_denied_options', 'my_plugin_eizport_denied' );
} );

eizport_register_compat fires on plugins_loaded at priority 20, after every plugin has loaded, so class_exists() checks are reliable.

Replacing the bundled one

A plugin that ships its own support removes the bundled one first:

remove_action( 'eizport_register_compat', 'Eizport\Compat\WooCommerce\register' );

Testing

Test the compatibility’s functions directly, so tests pass without the other plugin installed, and check that it registers only when that plugin is active.