Turn More Visitors Into
Customers—Now For Less

  1. 1Instant savings.
  2. 2Easy setup.
  3. 3Real impact.

View Special Pricing Offer

View Categories

Integrating Form Provider with Popup Maker

Example based on Contact Form 7. #

PHP integration registration. #

add_filter( 'pum_integrations', function ( $integrations = [] ) {
	return array_merge( $integrations, [
		// key should match the key defined in your PHP class.
		'contactform7'   => new PUM_Integration_Form_ContactForm7,
	] );
} );

PHP integration class #

<?php
/*******************************************************************************
 * Copyright (c) 2020, WP Popup Maker
 ******************************************************************************/

class PUM_Integration_Form_ContactForm7 extends PUM_Abstract_Integration_Form {

	/**
	 * Unique key identifier for this provider.
	 *
	 * @var string
	 */
	public $key = 'contactform7';

	/**
	 * Only used to hook in a custom action for non AJAX based submissions.
	 *
	 * Could be used for other initiations as well where needed.
	 */
	public function __construct() {
		add_action( 'wpcf7_mail_sent', array( $this, 'on_success' ), 1 );
	}

	/**
	 * Text label that will be used throughout the various options screens.
	 *
	 * @return string
	 */
	public function label() {
		return __( 'Contact Form 7' );
	}

	/**
	 * Should return true when the required form plugin is active.
	 *
	 * @return bool
	 */
	public function enabled() {
		return class_exists( 'WPCF7' ) || ( defined( 'WPCF7_VERSION' ) && WPCF7_VERSION );
	}

	/**
	 * Return a useable array of all forms from this provider.
	 *
	 * @return array
	 */
	public function get_forms() {
		return get_posts( [
			'post_type'      => 'wpcf7_contact_form',
			'posts_per_page' => - 1,
		] );
	}

	/**
	 * Return a single form by ID.
	 *
	 * @param string $id
	 *
	 * @return mixed
	 */
	public function get_form( $id ) {
		return get_post( $id );
	}

	/**
	 * Returns an array of options for a select list.
	 *
	 * Should be in the format of $formId => $formLabel
	 *
	 * @return array
	 */
	public function get_form_selectlist() {
		$form_selectlist = [];

		$forms = $this->get_forms();

		foreach ( $forms as $form ) {
			$form_selectlist[ $form->ID ] = $form->post_title;
		}

		return $form_selectlist;
	}

	/**
	 * Hooks in a success functions specific to this provider for non AJAX submission handling.
	 *
	 * @param WPCF7_ContactForm $cfdata
	 */
	public function on_success( $cfdata ) {
		/**
		 * @see pum_integrated_form_submission
		 */
		pum_integrated_form_submission( [
			'popup_id'      => isset( $_REQUEST['pum_form_popup_id'] ) && absint( $_REQUEST['pum_form_popup_id'] ) > 0 ? absint( $_REQUEST['pum_form_popup_id'] ) : false,
			'form_provider' => $this->key,
			'form_id'       => $cfdata->id(),
		] );
	}

	/**
	 * Load a custom script file to handle AJAX based submissions or other integrations with Popup Maker frontend.
	 *
	 * @param array $js
	 *
	 * @return array
	 */
	public function custom_scripts( $js = [] ) {
		$js[ $this->key ] = [
			// Path to a file that will be bundled with our own Assets when required.
			'content'  => file_get_contents( Popup_Maker::$DIR . 'assets/js/pum-integration-contactform7.js' ),
			'priority' => 8,
		];

		return $js;
	}

	/**
	 * Load custom styles for hacking some elements specifically inside popups, such as datepickers.
	 *
	 * @param array $css
	 *
	 * @return array
	 */
	public function custom_styles( $css = [] ) {
		$css[ $this->key ] = [
			'content'  => ".datepicker-container { z-index: 2000000000 !important; }n",
			'priority' => 8, // Always use priority 8 for the best results.
		];

		return $css;
	}
}

JavaScript file contents #

(function ($) {
	var formProvider = 'contactform7';

	$(document).on('wpcf7:mailsent', '.wpcf7', function (event, details) {
		const $form = $(this),
			formId = $form.find('input[name="_wpcf7"]').val(),
			// Converts string like wpcf7-f190-p2-o11 and reduces it to simply 11, the last o11 is the instance ID.
			// More accurate way of doing it in case things change in the future, this version filters out all but the o param.
			// formInstanceId = .split('-').filter((string) => string.indexOf('o') === 0)[0].replace('o','');
			// Simpler version that simply splits and pops the last item in the array. This requires it always be the last.
			formInstanceId = $form.attr('id').split('-').pop().replace('o', '');

		// All the magic happens here.
		window.PUM.integrations.formSubmission($form, {
			formProvider: formProvider
			formId: formId,
			formInstanceId: formInstanceId
		});
	});
}(jQuery));

Leave the first comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.