WordPress Admin-AJAX возвращать всегда 0

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

Моя проблема в том что admin-ajax запрос с ajax звонок всегда 0 на WordPress.
Мои коды:

Front End call

$.ajax({
url: cubetechform_ajax.ajax_url,
type: "POST",
data: {
action: 'cubetech_contact_form_send_email',
name: name,
phone: phone,
email: email,
message: message
},
cache: false,
success: function(response) {
console.log(response);
},
error: function(XMLHttpRequest, ajaxOptions, thrownError) {
//console.log(XMLHttpRequest.status + '<br/>' + ajaxOptions + '<br/>' + thrownError);
},
});

Back End

/*
* Action hooks
*/
function __construct() {

// Enqueue plugin styles and scripts
add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_cubetech_form_scripts' ) );

// Setup Ajax action hook
add_action( 'wp_ajax_cubetech_send_email', array( $this, 'cubetech_send_email' ) );
add_action( 'wp_ajax_nopriv_cubetech_send_email', array( $this, 'cubetech_send_email' ) );

//$this->cubetech_send_email();
}

/**
* Register plugin styles and scripts
*/
public function register_contactme_scripts() {
wp_register_script( 'contactme_script', get_template_directory_uri() . '/js/contact_me.js', array('jquery','bootstrapValidationScript'), '', true);
}
/**
* Enqueues plugin-specific scripts.
*/
public function enqueue_cubetech_form_scripts() {
wp_enqueue_script( 'contactme_script', plugins_url( '/js/contact_me.js', __FILE__ ), array('jquery','bootstrapValidationScript'), '', true);
//wp_enqueue_script( 'contactme-script' );
wp_localize_script( 'contactme_script', 'cubetechform_ajax', array( 'ajax_url' => admin_url('admin-ajax.php')) );
}public function cubetech_send_email() {
require_once ABSPATH . WPINC . '/class-phpmailer.php';
require_once ABSPATH . WPINC . '/class-smtp.php';

$name = strip_tags(htmlspecialchars($_POST['name']));
$email_address = strip_tags(htmlspecialchars($_POST['email']));
$phone = strip_tags(htmlspecialchars($_POST['phone']));
$message = strip_tags(htmlspecialchars($_POST['message']));

// definisco il messaggio formattato in HTML
$email_body = '<html><body>';
$email_body .= '<p>Nome: '.$name.'<br>';
$email_body .= 'N. Telefono: '.$phone.'<br>';
$email_body .= 'Richiesta: '.$message.'</p>'.'<br>';
$email_body .= '</body></html>';

// definisco il messaggio formattato in HTML
$email_body = '<html><body>';
$email_body .= '<p>Nome: '.$name.'<br>';
$email_body .= 'N. Telefono: '.$phone.'<br>';
$email_body .= 'Richiesta: '.$message.'</p>'.'<br>';
$email_body .= '</body></html>';

$to = get_option('admin_email');
$subject = "Richiesta da: ". $email_address;

$mail = new PHPMailer();

$mail->IsSMTP(); // set mailer to use SMTP
$mail->Host = "smtps.aruba.it";  // specify main and backup server
//$mail->SMTPDebug = 3;  // debugging: 1 = errors and messages, 2 = messages only
$mail->SMTPAuth = true;     // turn on SMTP authentication
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;
$mail->Username = "info@cubetech.it";  // SMTP username
$mail->Password = "*******"; // SMTP password

$mail->From = "info@cubetech.it";
$mail->FromName = "Cube Tech Bologna";
$mail->AddAddress("info@cubetech.it", "Cube Tech Bologna" );  // name is optional
$mail->AddReplyTo("info@cubetech.it", "Reply");
$mail->AddCC($email_address);

$mail->IsHTML(true);  // set email format to HTML

$mail->SetFrom("info@cubetech.it", "Cube Tech Bologna");
$mail->Subject = $subject;
$mail->Body = $email_body;

$mail->AddAddress("info@cubetech.it");

$error = '';

if(!$mail->Send()) {
$error = 'Mail error: '.$mail->ErrorInfo;
echo $error;
exit();
die();
} else {
$error = 'ok';
echo $error;
exit();
die();
}
}

Я перепробовал все, что читаю die(); exit(); $mail = new PHPMailer(); $mail = new PHPMailer(true); и многое другое. Проблема всегда в вызове ajax, потому что если я пытаюсь вызвать прямую функцию cubetech_send_email() он работает отлично и возвращает нормально, и phpmailer отправляет его. Я пытаюсь все это на локальном хосте с сервером электронной почты, и все работает отлично. Кто-то может помочь мне решить это? Спасибо

0

Решение

Ваши крючки должны быть такими:

// Setup Ajax action hook
add_action( 'wp_ajax_cubetech_contact_form_send_email', array( $this, 'cubetech_send_email' ) );
add_action( 'wp_ajax_nopriv_cubetech_contact_form_send_email', array( $this, 'cubetech_send_email' ) );

В вашем объекте данных при выполнении ajax называется «cubetech_contact_form_send_email» как действие. Хуки работают так: wp_ajax_ (action)
https://codex.wordpress.org/Plugin_API/Action_Reference/wp_ajax_(action)

0

Другие решения

После многих и многих дней, когда я пробовал все … каждый код, где я прочитал все посты и решения, я нашел решение … в коде не было никаких ошибок … все было хорошо. Проблема была, когда я передал localhost WordPress на хостинг. Я не знаю почему, но, возможно, что-то пошло не так во время этого процесса … Я удаляю базу данных и каталог на хостинге и переустанавливаю все … Я надеюсь, что это может помочь пользователю, у которого есть эта проблема

0