Every January (marking the anniversary of WP Fusion), we spend the month working on the next milestone release. This year we’re proud to announce WP Fusion 3.0.
Like version 2.0, 3.0 is a major rewrite of WP Fusion (while being fully backwards compatible). Almost all of our plugin integrations have been rewritten to be more efficient, extensible, and developer friendly. We’ve spent a lot of time focusing on performance, especially with regards to batch operations (like re-syncing) on sites with large numbers of users. In addition, we’ve added new integrations and several new features.
#New Integrations and Features
- New bulk processing tool, available under the Advanced tab. You can export users from your site to your CRM, push the meta data for all existing users, and perform the post-purchase actions (like applying tags) on WooCommerce / Woo Subscriptions order. More bulk tools will follow.
- New integration with Formidable Forms.
- WP Fusion’s content restrictions can now be applied in bulk. Select the checkboxes next to the posts/pages you want to edit and click Bulk Actions >> Edit to configure the settings for multiple posts at a time.
- Added an option to remove tags when a LifterLMS membership is cancelled.
- You can now link a tag with a Paid Membership Pro membership level. When the tag is applied to a user, they will automatically be enrolled in the membership level, and they’ll be removed if the tag is removed.
- User roles can now be updated via the “update” method in a webhook or HTTP POST.
All of WP Fusion’s active integrations are now available by accessing
wp_fusion()->integrations. This makes it easier to interface with our integration classes, as well as removing actions. For example, to prevent an order (or all orders) from triggering post-checkout actions with Easy Digital Downloads, you can now use:
remove_action( 'edd_complete_purchase', array( wp_fusion()->integrations->edd, 'complete_purchase' ));
Our new batch processing system is based on WP Background Processing. It uses a queue system (with locking) and the database to work through large operations in increments. Our old user sync, for example, attempted to sync users in batches of 50 at a time. This worked for 90% of customers, but some sites didn’t have enough memory to sync that many users at once. Other customers had more powerful hosts and could have easily handled larger batches, but the process was slowed down by going in increments of 50.
The new system works through the queue as long as it can before it becomes close to exceeding available memory or reaching the server’s script timeout limit. Once it gets close, it saves the current state of the queue to the database, sends a remote_post to itself, and then dies. When the remote_post is received, the system picks up the queue where it left off.
This results in significant performance improvements, as well as the speed of the system adjusting to the available resources of the server at any given time.
In our tests, we were able to resync the contact IDs and tags for 1,000 users in 2 minutes and 40 seconds. Exporting 1000 users to new contacts in ActiveCampaign took 6 minutes and 43 seconds. This is about a 300% speed increase over the previous solution, and even if a request times out or fails, it will intelligently restart itself until the queue has been completed.