Noptin_Ajax::add_subscriber()
Adds a new subscriber via ajax
Return Return
(void)
Source Source
File: includes/class-noptin-ajax.php
public function add_subscriber() { // Verify nonce. if ( noptin_verify_subscription_nonces() ) { check_ajax_referer( 'noptin' ); } // avoid bot submissions. if ( ! empty( $_POST['noptin_confirm_submit'] ) ) { return; } /** * Fires before a subscriber is added via ajax. * * @since 1.2.4 */ do_action( 'noptin_before_add_ajax_subscriber' ); // Prepare form fields. $form = 0; if ( empty( $_POST['noptin_form_id'] ) ) { $fields = array( array( 'type' => array( 'label' => __( 'Email Address', 'newsletter-optin-box' ), 'name' => 'email', 'type' => 'email', ), 'require' => 'true', 'key' => 'email', ), ); } else { // Get the form. $form = noptin_get_optin_form( $_POST['noptin_form_id'] ); if ( empty( $form ) || ! $form->is_published() ) { echo __( 'This form is in-active.', 'newsletter-optin-box' ); exit; } $fields = $form->fields; } $filtered = array(); // Check gdpr. if ( is_object( $form ) && $form->gdprCheckbox && empty( $_POST['noptin_gdpr_checkbox'] ) ) { echo __( 'You must consent to receive promotional emails.', 'newsletter-optin-box' ); exit; } if ( ! empty( $_POST['noptin_gdpr_checkbox'] ) ) { $filtered['GDPR_consent'] = 1; } foreach ( $fields as $field ) { $type = $field['type']['type']; // Prepare the field name. $name = ''; if ( 'email' == $type ) { $name = 'email'; } if ( 'first_name' == $type ) { $name = 'first_name'; } if ( 'last_name' == $type ) { $name = 'last_name'; } if ( 'name' == $type ) { $name = 'name'; } if ( empty( $name ) ) { $name = $field['type']['name']; } $key = esc_attr( $field['key'] ); if ( isset( $_POST[ $key ] ) ) { $value = $_POST[ $key ]; } else { $value = ''; } // required fields. if ( ! empty( $field['require'] ) && 'false' !== $field['require'] && empty( $value ) ) { die( __( 'Ensure that you fill all required fields.', 'newsletter-optin-box' ) ); } // Sanitize email fields. if ( 'email' === $type && ! empty( $value ) ) { $value = sanitize_email( $value ); if ( empty( $value ) ) { die( __( 'That email address is not valid.', 'newsletter-optin-box' ) ); } } // Sanitize checkboxes. if ( 'checkbox' === $type && empty( $value ) ) { $value = __( 'No', 'newsletter-optin-box' ); } // Sanitize text fields. if ( 'textarea' !== $type && ! is_array( $value ) ) { $value = sanitize_text_field( urldecode( $value ) ); } else { if ( ! is_array( $value ) ) { $value = esc_html( urldecode( $value ) ); } } $filtered[ $name ] = $value; } // Add the subscriber's IP address. $address = noptin_get_user_ip(); if ( ! empty( $address ) && '::1' !== $address ) { $filtered['ip_address'] = $address; } if ( ! empty( $_POST['conversion_page'] ) ) { $filtered['conversion_page'] = esc_url_raw( trim( $_POST['conversion_page'] ) ); } if ( is_object( $form ) ) { $filtered['_subscriber_via'] = $form->ID; } /** * Filters subscriber details when adding a new subscriber via ajax. * * @since 1.2.4 */ $filtered = apply_filters( 'noptin_add_ajax_subscriber_filter_details', wp_unslash( $filtered ), $form ); $inserted = add_noptin_subscriber( $filtered ); if ( is_string( $inserted ) ) { die( $inserted ); } do_action( 'noptin_add_ajax_subscriber', $inserted, $form ); $result = array( 'action' => 'msg', 'msg' => get_noptin_option( 'success_message' ), ); if ( empty( $result['msg'] ) ) { $result['msg'] = esc_html__( 'Thanks for subscribing to the newsletter', 'newsletter-optin-box' ); } if ( is_object( $form ) ) { $count = (int) get_post_meta( $form->ID, '_noptin_subscribers_count', true ); update_post_meta( $form->ID, '_noptin_subscribers_count', $count + 1 ); // msg. if ( $form->subscribeAction === 'message' ) { $result['msg'] = $form->successMessage; } else { // redirects. $result['action'] = 'redirect'; $result['redirect'] = $form->redirectUrl; } } wp_send_json( $result ); exit; }
Expand full source code Collapse full source code View on GitHub
Changelog Changelog
Version | Description |
---|---|
1.0.5 | Introduced. |