=== Opt-In === Contributors: berginformatik Tags: opt-in, double-opt-in, cf7 Requires at least: 4.9.8 Tested up to: 5.9 License: GPLv3 Provides features and functions to create an opt-in or double-opt in with contact form 7 (cf7) and other form plugins. === Save contacts === To store your contacts, please install the additional plugin called bin contact. This plugin assists you installing all the necessary dependencies. === Opt-In Function ===
BinOptIn::optIn($postdata, [
	'opt_in_admin_message' => false,
	'double_opt_in' => false,
	'admin_unlock' => false,
	'unlock_message' => false
]);
* **opt_in_admin_message** (bool) Notify the site owner of any new contact, regardless of whether or not he has confirmed his e-mail address. Default false. * **double_opt_in** (bool) The contact must confirm the e-mail address by clicking on a confirmation link. Default false. * **admin_unlock** (bool) The site owner has to confirm every new contact by clicking on a confirmation link. This is useful if you want to show a list of contacts (like a committee or a list of supporters). Default false. * **unlock_message** (bool) This option allows you to specify whether the contact should receive a notification once the site owner has confirmed the committee subscription. Default false. * **mailchimp_opt_in** (bool) This option allows you to specify whether the contact will be forwarded to Mailchimp. Default false. === Accepted postdata === * **salutation** (int) Default empty. * 0 (Mister) * 1 (Miss) * 2 (Other) * **polite_form** (int) Default empty. * 0 (Personally) * 1 (Formally) * **language_of_correspondence** (int) Check this functions to see a list of all available languages: BinContact::formLanguage() and BinContact::formLanguageValue() * **name_suffix** (string) Default empty. * **first_name** (string) Default empty. * **last_name** (string) Default empty. * **designation** (string) Default empty. * **mobile** (string) Default empty. * **phone_private** (string) Default empty. * **phone_work** (string) Default empty. * **street_and_number** (string) Default empty. * **zip** (string) Default empty. * **city** (string) Default empty. * **country** (string) Default empty. * **website** (string) Default empty. * **facebook** (string) Default empty. * **twitter** (string) Default empty. * **instagram** (string) Default empty. * **flickr** (string) Default empty. * **linkedin** (string) Default empty. * **xing** (string) Default empty. * **youtube** (string) Default empty. * **socialmedia_other1** (string) Default empty. * **socialmedia_other2** (string) Default empty. * **socialmedia_other3** (string) Default empty. * **terms_and_conditions_accepted** (string) Default empty. * empty (Not filled) * no (No) * yes (Yes) * **privacy_policy_accepted** (string) Default empty. * empty (Not filled) * no (No) * yes (Yes) * **contact_group** (string) Comma seperated list of contact_group taxonomy terms or ID's. Default empty. === Integrate with Contact Form 7 === Bin Opt-In works best with contact form seven. To integrate it into your contact forms, you need to add custom code like this to your theme functions.php.
add_action('wpcf7_before_send_mail', 'bin_opt_in_contact');
function bin_opt_in_contact($cf7)
{
    // Get current form id
	$formId = $cf7->id;

	// Array of form ids
	$forms = [159, 454];

	// Only apply to certain forms
	if(in_array($formId, $forms))
	{
		// Dont do anything if class is missing
		if(class_exists('BinOptIn'))
		{
			// At least, the email must be present
			if(is_email($_POST['email']))
			{
				// map salutation
				$salutationMap = [ 
					'Frau' => 0,
					'Madame' => 0,
					'Mrs' => 0,
					'Herr' => 1,
					'Monsieur' => 1,
					'Mr' => 1,
					'*' => 2
				];

				// assign form data with corresponding meta fields
				$postdata = [];
				$postdata['email'] = sanitize_email($_POST['email']);
				$postdata['first_name'] = sanitize_text_field($_POST['first_name']);
				$postdata['last_name'] = sanitize_text_field($_POST['last_name']);
				$postdata['salutation'] = $salutationMap[$_POST['salutation']];
				$postdata['terms_and_conditions_accepted'] = isset($_POST['terms_and_conditions_accepted']) ? 'yes' : '';

				// save contact
				BinOptIn::optIn($postdata, [
					'opt_in_admin_message' => false,
					'double_opt_in' => false,
					'admin_unlock' => false,
					'unlock_message' => false
				]);
			}
		}
	}
}
=== Integrate with Contact Form 7 Multi-Step Pro === Save form data at every step by using the filter *wpcf7_validate*.
add_filter('wpcf7_validate', 'save_contact_step', 10, 2);
function save_contact_step($result, $tags)
{
	// Get current form id
	$formId = $_POST['_wpcf7'];

	// Array of form ids
	$forms = [159, 454];

	// Only apply to certain forms
	if(in_array($formId, $forms))
	{
		// Dont do anything if class is missing
		if(class_exists('BinOptIn'))
		{
			// save contact info here
			// BinOptIn::optIn()
		}
	}

	return $result;
}
== Installation == 1. Download, unzip and upload to your WordPress plugins directory 2. Activate the plugin within you WordPress Administration Backend == Screenshots == 1. Backend: Settings page == Changelog == * Version 1.2.3 * Image embedding removed: not supported by gmail * Translation corrections * Version 1.2.2 * Minor bugfix * Version 1.2.2 * Fix: fatal error if bin-contact is not installed * Version 1.2.0 * New: Mailchimp integration * New: Add default settings on plugin activate * New: Text settings * New: Change button color * Fix: Wrong link to wpml translation page * Fix: Wrong installation path of bin-contact plugin * Fix: Missing hero background image * Version 1.1.0 * New option for Social Share Buttons * BinOptIn_UrlLinker removed * Double-opt-in routing fix * Show additional content on confirmation page * Logo height setting added * Image embed enhancements * Attribute publicly_visible added * Wpml-config file added * More options for optIn * Better email template management * Version 1.0.1 * Backend text correction * Conditional logic update * Do not delete settings on plugin deactivate * Version 1.0.0 * Initial release == Upgrade Notice == Nothing here :)