2016-02-03 4 views
0

Я беру на себя веб-сайт Wordpress, который переместился с Wordpress на лазурный. На сайте есть кнопка внизу, которая отправляет электронное письмо при нажатии. Вот HTML для метода OnClickОтладка функции Wordpress Email

<div class="w-form-json hidden" onclick="return {ajaxurl:http:\/\/loancoreignite.azurewebsites.net\/engine\/wp-admin\/admin-ajax.php,success:Thank you! Your message was sent.,errors:{name:Please enter your Name,email:Please enter your Email,phone:Please enter your Phone Number}}"></div> 

Когда я иду к этому АЯКС URL, я получаю 0 в верхнем левом углу с 404 ошибкой в ​​инструменты отладки. Таким образом, я нашел файл admin-ajax.php и попытался выяснить его там, но здесь я теряюсь. Ниже приведен файл admin-ajax.php.

<?php 
/** 
* WordPress AJAX Process Execution. 
* 
* @package WordPress 
* @subpackage Administration 
* 
* @link https://codex.wordpress.org/AJAX_in_Plugins 
*/ 

/** 
* Executing AJAX process. 
* 
* @since 2.1.0 
*/ 
define('DOING_AJAX', true); 
if (! defined('WP_ADMIN')) { 
    define('WP_ADMIN', true); 
} 

/** Load WordPress Bootstrap */ 
require_once(dirname(dirname(__FILE__)) . '/wp-load.php'); 

/** Allow for cross-domain requests (from the frontend). */ 
send_origin_headers(); 

// Require an action parameter 
if (empty($_REQUEST['action'])) 
    die('0'); 

/** Load WordPress Administration APIs */ 
require_once(ABSPATH . 'wp-admin/includes/admin.php'); 

/** Load Ajax Handlers for WordPress Core */ 
require_once(ABSPATH . 'wp-admin/includes/ajax-actions.php'); 

@header('Content-Type: text/html; charset=' . get_option('blog_charset')); 
@header('X-Robots-Tag: noindex'); 

send_nosniff_header(); 
nocache_headers(); 

/** This action is documented in wp-admin/admin.php */ 
do_action('admin_init'); 

$core_actions_get = array(
    'fetch-list', 'ajax-tag-search', 'wp-compression-test', 'imgedit-preview', 'oembed-cache', 
    'autocomplete-user', 'dashboard-widgets', 'logged-in', 
); 

$core_actions_post = array(
    'oembed-cache', 'image-editor', 'delete-comment', 'delete-tag', 'delete-link', 
    'delete-meta', 'delete-post', 'trash-post', 'untrash-post', 'delete-page', 'dim-comment', 
    'add-link-category', 'add-tag', 'get-tagcloud', 'get-comments', 'replyto-comment', 
    'edit-comment', 'add-menu-item', 'add-meta', 'add-user', 'closed-postboxes', 
    'hidden-columns', 'update-welcome-panel', 'menu-get-metabox', 'wp-link-ajax', 
    'menu-locations-save', 'menu-quick-search', 'meta-box-order', 'get-permalink', 
    'sample-permalink', 'inline-save', 'inline-save-tax', 'find_posts', 'widgets-order', 
    'save-widget', 'delete-inactive-widgets', 'set-post-thumbnail', 'date_format', 'time_format', 
    'wp-remove-post-lock', 'dismiss-wp-pointer', 'upload-attachment', 'get-attachment', 
    'query-attachments', 'save-attachment', 'save-attachment-compat', 'send-link-to-editor', 
    'send-attachment-to-editor', 'save-attachment-order', 'heartbeat', 'get-revision-diffs', 
    'save-user-color-scheme', 'update-widget', 'query-themes', 'parse-embed', 'set-attachment-thumbnail', 
    'parse-media-shortcode', 'destroy-sessions', 'install-plugin', 'update-plugin', 'press-this-save-post', 
    'press-this-add-category', 'crop-image', 'generate-password', 'save-wporg-username', 
); 

// Deprecated 
$core_actions_post[] = 'wp-fullscreen-save-post'; 

// Register core Ajax calls. 
if (! empty($_GET['action']) && in_array($_GET['action'], $core_actions_get)) 
    add_action('wp_ajax_' . $_GET['action'], 'wp_ajax_' . str_replace('-', '_', $_GET['action']), 1); 

if (! empty($_POST['action']) && in_array($_POST['action'], $core_actions_post)) 
    add_action('wp_ajax_' . $_POST['action'], 'wp_ajax_' . str_replace('-', '_', $_POST['action']), 1); 

add_action('wp_ajax_nopriv_heartbeat', 'wp_ajax_nopriv_heartbeat', 1); 

if (is_user_logged_in()) { 
    /** 
    * Fires authenticated AJAX actions for logged-in users. 
    * 
    * The dynamic portion of the hook name, `$_REQUEST['action']`, 
    * refers to the name of the AJAX action callback being fired. 
    * 
    * @since 2.1.0 
    */ 
    do_action('wp_ajax_' . $_REQUEST['action']); 
} else { 
    /** 
    * Fires non-authenticated AJAX actions for logged-out users. 
    * 
    * The dynamic portion of the hook name, `$_REQUEST['action']`, 
    * refers to the name of the AJAX action callback being fired. 
    * 
    * @since 2.8.0 
    */ 
    do_action('wp_ajax_nopriv_' . $_REQUEST['action']); 
} 
// Default status 
die('0'); 

Возможно, это проще, чем им сделать это, и все, что нужно, - это что-то в Wordpress?

ответ

1

Вы, наверное, нет, но я чувствую себя обязанным сказать:

Пожалуйста, не редактировать WP Основные файлы !!

Что касается вашей проблемы, это может быть несколько вещей. WP Ajax требует установки «действия». Пожалуйста, смотрите эту ссылку для получения дополнительной информации о настройке AJAX «действия»: https://codex.wordpress.org/Plugin_API/Action_Reference/wp_ajax_(action)

Во-вторых, когда WP AJAX возвращает 0, что означает либо AJAX «действие» (как упоминалось выше), не может быть найден или функция PHP не имеет die() в конце. Вы должны добавить die(); в конце функции PHP, вызванной AJAX, и вы должно объявить действие по указанной выше ссылке.

Создайте функцию PHP, чтобы отправить электронное письмо в файл functions.php. Создайте действие из указанной выше ссылки и установите обратный вызов как функцию PHP. В конце функции поставьте die();, а затем все должно начаться, как и следовало ожидать.

Существует два типа действий AJAX: wp_ajax-your-function и wp_ajax_nopriv-your-function. Первый из двух позволит выполнить ваш запрос AJAX из wp-admin, второй (тот, который с _nopriv) позволит вашему аякс-запросу запускаться из внешнего интерфейса.

Если вам нужен пример, просто спросите. Я могу вытащить один из существующего сайта, чтобы показать вам.

+0

Мне бы понравился пример. Как вы говорите, так как он возвращает 0, это может быть либо действие не найдено, либо функция не имеет штампа в конце. Как вы можете видеть из файла, у файла есть конец в конце. Так должно быть, что действие не может быть найдено. Как я могу попытаться найти его на основе самого файла PHP. Кроме того, будет ли у меня способ пройти через admin-ajax.php, чтобы увидеть, где код возвращает 0, чтобы увидеть потенциально, где мне нужно идти дальше? – Monz

0

нужно исправить ваш JSON

<div class="w-form-json hidden" onclick="return {ajaxurl:'http:\/\/loancoreignite.azurewebsites.net\/engine\/wp-admin\/admin-ajax.php',success:'Thank you! Your message was sent.',errors:{name:'Please enter your Name',email:'Please enter your Email',phone:'Please enter your Phone Number'}}"></div> 

даже до сих пор не понимаю, как это делает ничего.

Смежные вопросы