Skip to content

Instantly share code, notes, and snippets.

@gblnovaes
Forked from elclanrs/email-confirmation.php
Last active November 24, 2022 14:09
Show Gist options
  • Save gblnovaes/68a9f43b19f6ea1370ac to your computer and use it in GitHub Desktop.
Save gblnovaes/68a9f43b19f6ea1370ac to your computer and use it in GitHub Desktop.

Email Confirmation for WordPress

Send an email to the user with confirmation code and store form data in database until user confirms.

Requires: PHP 5.3+

How To

Installation

Drop the plugin in /wp-content/plugins/email-confirmation and activate in WordPress.

Usage

Make sure to validate all your data before using Email Confirmation, then you can call the plugin anywhere in your templates:

<?php
$headers = 'From: admin <noreply@admin>';
$to = $_POST['email'];
$subject = 'Confirm';
// The unique token can be inserted in the message with %s
$message = 'Thank you. Please <a href="<?= home_url('confirm') ?>?token=%s">confirm</a> to continue';

if ($isAllValid) {
  EmailConfirmation::send($to, $subject, $message, $headers);
}

The above will send an email with a unique token for confirmation and store the $_POST array in the DB.

The confirmation link can be any page or template you want. For a minimal setup all you need is to pass the token in $_GET. The check method will retrieve the data for a specific token and return it, then remove it from the DB. If the token doesn't exist it will return null.

<?php
$data = EmailConfirmation::check($_GET['token')); // $_POST saved for this token
<?php
/**
* Plugin Name: Email Confirmation
* Description: Send an email to the user with confirmation code and store form data in database until user confirms.
* Author: Cedric Ruiz
*/
class EmailConfirmation
{
const PREFIX = 'email-confirmation-';
public static function send($to, $subject, $message, $headers)
{
$token = sha1(uniqid());
$oldData = get_option(self::PREFIX .'data') ?: array();
$data = array();
$data[$token] = $_POST;
update_option(self::PREFIX .'data', array_merge($oldData, $data));
wp_mail($to, $subject, sprintf($message, $token), $headers);
}
public static function check($token)
{
$data = get_option(self::PREFIX .'data');
$userData = $data[$token];
if (isset($userData)) {
unset($data[$token]);
update_option(self::PREFIX .'data', $data);
}
return $userData;
}
}
@starapple2
Copy link

I have my subscribers saved in wpdb. How does the get_option() translate into that scenario? I'm not sure what I am retrieving from email-confirmation-data.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment