Programmatically Adding a Newsletter Subscriber

Noptin provides a built-in function add_noptin_subscriber() that allows developers to add new subscribers directly from their codebase.

This function is handy when integrating with custom forms, CRMs, or external APIs.

Function Overview

/**
 * Inserts a new subscriber into the database.
 *
 * @param array $fields Associative array of subscriber data.
 * @return int|string Subscriber ID on success or error message on failure.
 */
add_noptin_subscriber( array $fields );

At a minimum, $fields must include a valid email address.

add_noptin_subscriber(
  array(
    'email' => '[email protected]',
  )
);

You may pass additional fields to enrich the subscriber record. Here are some common and useful keys:

FieldDescriptionExample
nameFull name of the subscriber.
You can also specify this as first_name and last_name if you don’t want to specify the full name.
Jon Doe
statusOne of: subscribed, unsubscribed, pending, bounced, or blocked.

Defaults to pending if double opt-in is enabled, subscribed otherwise.
subscribed
tagsComma-separated string or array of tags.woocommerce, customer
sourceSource of the subscriptionWooCommerce
languageLanguage code. Automatically set if using WPML or Polylang.en_US
ip_addressIP address of the subscriber.8.8.8.8
conversion_pageURL of the page where the subscription happened.https://example.com/sign-up/
update_existingWhether or not to update the existing subscriber if one already exists.true

TIP:

You can also pass any custom fields defined in your Noptin configuration.

Example Usage

$subscriber_id = add_noptin_subscriber( array(
    'email'           => '[email protected]',
    'name'            => 'Jane Doe',
    'status'          => 'subscribed',
    'tags'            => array( 'blog', 'customer' ),
    'source'          => 'api_import',
    'ip_address'      => $_SERVER['REMOTE_ADDR'],
    'conversion_page' => 'https://example.com/thank-you',
    'update_existing' => true, // Optional
) );

if ( is_numeric( $subscriber_id ) ) {
    // Successfully added.
    echo "Subscriber ID: " . $subscriber_id;
} else {
    // Failed to add subscriber.
    echo "Error: " . esc_html( $subscriber_id );
}

Behavior Details

  • If the email already exists:
    • Returns the subscriber ID without updating any data.
    • If update_existing is true, the existing subscriber’s data is updated.
  • Automatically generates a confirmation key and saves it.
  • Sets tracking cookies unless disabled via filter: noptin_disable_cookies.

TIP:

This function will return a string if an error occurs. This usually happens if you pass an invalid email address.

For advanced usage, you can access the subscriber object using noptin_get_subscriber() and inspect with $subscriber->get_data().

Related Guides

  • How to Check if the Current User is Subscribed to Your Newsletter

    The noptin_is_subscriber() function checks if the current visitor is subscribed to your newsletter

    Read More

  • Using the REST API

    Noptin extends the WordPress REST API to allow subscriber management. You can query, create, update, or delete newsletter subscribers via this API. Authentication This API is only available to site admins and users with the manage_noptin capability. This means that all requests must be authenticated using either WordPress Application Passwords, OAuth 1.0a Server, or JSON Web Tokens.…

    Read More