Mailchimp Wordpress Плагин - PullRequest
       49

Mailchimp Wordpress Плагин

1 голос
/ 21 января 2020

Я создал этот плагин для подписки на рассылку Mailchimp. PHP это не моя сила, поэтому я не могу исправить ошибку, которую он имеет.

Я использовал эту оболочку Mailchimp: https://github.com/drewm/mailchimp-api.

My PHP файл:

<?php

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

function sm_mailchimp_subscribe()
{

    // Settings:
    $mcAPIKey = '70000000000000000007e-us00';
    $mcListID = '323231214212';
    $status = 'subscribed';
    // Settings End

    $MailChimp = new MailChimp($mcAPIKey);

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

    if (isset($email) and isset($fname) and isset($sname)) {
        $result = $MailChimp->post("lists/" . $mcListID . "/members", [
            'email_address' => $email,
            'merge_fields'  => $merge_vars,
            'status'        => $status,
        ]);

        return json_encode($result);
    }
}

if ($_POST['ajax']) {
    echo sm_mailchimp_subscribe();
} elseif ($_POST['action'] == 'setCookies') {
    echo setCookiesTemp();
}


function setCookiesTemp()
{
    setcookie('sm_mailchimp-temp', true, time() + (86400 * 28), '/');
}
function setCookiesPerm()
{
    setcookie('sm_mailchimp-perm', true, time() + (86400 * 28 * 24), '/');
}


А вот JS:

jQuery(function($) {
  // From wp_localized
  const ajaxURL = ajax_obj.ajax_url;

  $(document).ready(function() {
    var body = $("body");
    var modal = `<div class="sm_mailchimp-modal">
                    <div class="sm_mailchimp-box">
                      <button class="sm_mailchimp-close">X</button>
                        <h3>Join Our Mailing List</h3>
                        <form name="sm_mailchimp-form" method="post" class="sm_mailchimp-form light">
                           <p>Subscribe to our newsletter and receive tips for a successful business.</p>
                            <input type="email" name="email" placeholder="Type Your Email" class="sm_sname">
                            <div class="sm_mailchimp-message"></div>
                            <button type="submit">SIGN UP</button>
                        </form>
                    </div>
                </div>`;

    if (!document.cookie.includes("sm_mailchimp-temp=1")) {
      $(modal)
        .hide()
        .appendTo(body);
      setTimeout(function() {
        $(".sm_mailchimp-modal").fadeIn();
      }, 5000);
    }

    $(".sm_mailchimp-close").click(function() {
      closeModal();
    });

    $(".sm_mailchimp-modal").click(function(e) {
      if (e.target == this) {
        closeModal();
      }
    });

    function closeModal() {
      $(".sm_mailchimp-modal").fadeOut();

      $.ajax({
        url: ajaxURL,
        method: "POST",
        data: { action: "setCookies" },
        success: function(data) {
          console.log("Cookie added as sm_mailchimp-temp=1");
        }
      });
    }

    $(".sm_mailchimp-form").submit(function() {
      var emailVal, fnameVal, snameVal;
      emailVal = $(".sm_email", this).val();
      fnameVal = $(".sm_fname", this).val();
      snameVal = $(".sm_sname", this).val();

      if (emailVal === "" || fnameVal === "" || snameVal === "") {
        $(".sm_mailchimp-message").html("Please fill out all the fields!");
        return false;
      } else {
        $(".sm_mailchimp-message").html("Adding your email address...");

        var form = $(this);
        $.ajax({
          url: ajaxURL,
          type: "POST",
          data: form.serialize() + "&ajax=true",
          success: function(msg) {
            var message = $.parseJSON(msg),
              result = "";
            if (message.status === "pending") {
              result =
                "Success!  Please click the confirmation link that will be emailed to you shortly.";
            } else if (message.status === "subscribed") {
              result =
                "Success!  You have been subscribed to our mailing list.";
            } else {
              result = "Oops: " + message.title;
              console.log("Error: ", message);
            }
            $(".sm_mailchimp-message").html(result);
          }
        });
        return false;
      }
    });
  });
});

Ошибка следующая:

После нажатия кнопки «Зарегистрироваться» сообщение «Добавление вашего адреса электронной почты ...» показывает, как должно, но затем останавливается там. Консоль показывает следующую ошибку:

enter image description here

Странно, раньше работало нормально. И без изменений это прекратилось. Я построил это пару месяцев go.


ОБНОВЛЕНИЕ

Ошибка на самом деле исходит из строки success: function(msg) {. msg пусто. Таким образом, когда он достигает message.status, он не может прочитать свойство status null.

Вопрос: Почему обратный вызов успешного завершения возвращает msg пусто?

enter image description here

...