Mailchimp Форма подписки Wordpress AJAX - PullRequest
0 голосов
/ 26 сентября 2019

Я создаю форму подписки на Mailchimp с использованием AJAX, чтобы избежать перезагрузки страницы PHP при отправке формы.

Вот что я получил до сих пор:

MailChimp.php Оболочка получила форму здесь: https://github.com/drewm/mailchimp-api

sm_mailchimp.php Мой код и до сих пор он выглядит следующим образом:

<?php

include('MailChimp.php');  // path to API wrapper downloaded from GitHub
use \DrewM\MailChimp\MailChimp;

function sm_mailchimp_subscribe()
{
    $mcAPIKey = 'e7bab977bb31af5709e3889eec2d4eb4-us19';
    $mcListID = '02da2478bd';

    $MailChimp = new MailChimp($mcAPIKey);

    $email = $_POST['mailchimp-email'];
    $fname = $_POST['mailchimp-fname'];
    $sname = $_POST['mailchimp-sname'];
    $merge_vars = array(
        'FNAME' => $fname,
        'SNAME' => $sname
    );

    $result = $MailChimp->post("lists/" . $mcListID . "/members", [
        'email_address' => $email,
        'merge_fields'  => $merge_vars,
        'status'        => 'subscribed',
    ]);

    return json_encode($result);
}

function sm_mailchimp_form_shortcode($atts)
{
    $action =  site_url() . "/wp-admin/admin-ajax.php";
    $form = '
<form action="' . $action . '" name="sm_mailchimp" method="post" id="sm_mailchimp" class="sm_mailchimp">
    <input type="text" name="fname" id="mailchimp-fname" placeholder=" First Name">
    <input type="text" name="sname" id="mailchimp-sname" placeholder="Last Name">
    <input type="email" name="mailchimp-email" id="mailchimp-form" placeholder="Email">
    <button type="submit">SIGN UP</button>
</form>
';
    return $form;
}
add_shortcode('sm_mailchimp', 'sm_mailchimp_form_shortcode');

function sm_mailchimp_enqueue_scripts()
{
    wp_register_script('sm-mailchimp-js', get_stylesheet_directory_uri() . '/sm_mailchimp/sm_mailchimp.js', array('jquery'), '1.0', true);

    wp_localize_script('sm-mailchimp-js', 'ajax_obj', array('ajax_url' => get_stylesheet_directory_uri() . '/sm_mailchimp/sm_mailchimp.php'));

    wp_enqueue_script('sm-mailchimp-js');
}
add_action('wp_enqueue_scripts', 'sm_mailchimp_enqueue_scripts');


sm_mailchimp.js Наконец, код JS, в котором реализован AJAX

jQuery(function($) {
  $(document).ready(function() {
    // From wp_localized
    const ajaxURL = ajax_obj.ajax_url;
    console.log("TCL: ajaxURL", ajaxURL);

    $("#sm_mailchimp").submit(function() {
      var form = $(this);
      $.ajax({
        url: ajaxURL,
        type: "POST",
        data: form.serialize(),
        success: function(data) {
          console.log(data);
        }
      });
      return false;
    });
  });
});

Получение следующей ошибки на консоли: Fatal error: Uncaught Error: Call to undefined function add_shortcode() in /Users/stefanomonteiro/Local Sites/real-homes/app/public/wp-content/themes/realhomes-child/sm_mailchimp/sm_mailchimp.php on line 43

РЕДАКТИРОВАТЬ: Если я удаляю шорткод и функцию постановки в очередь на function.php, console.log ничего не возвращает.

...