Путь к файлу для скрипта AJAX (в Wordpress)


Я использую этот скрипт jquery-ajax для отправки электронной почты:

    $.ajax({
        url: process.php,    
        type: "POST",
        data: data,        
        cache: false,
    ...

В url Я вызываю php-файл, который отправляет электронную почту, но ajax получает его, только если я укажу полный путь:

url: "http://www.domain.com/wp-content/themes/site_theme/templates/process.php",

Но я должен использовать такой синтаксис:

url: "../../templates/process.php",

Или использование переменной для объявления в верхнем/нижнем колонтитуле html

Html

<script type="text/javascript">
  var urlMail = '<?php bloginfo('template_url'); ?>/templates/process.php';
</script>

Сценарий

url: "../../templates/process.php",

Но в обоих вышеперечисленных случаях консоль браузера извлекает эту ошибку:

POST http://www.domain.com/templates/process.php 404 Not Found 1.56s

Где я нахожусь неправильно?

Author: Fred K, 2013-04-29

3 answers

Это не тот способ реализации ajax в wordpress. Все запросы ajax должны быть сделаны на admin-ajax.php.

В файле шаблона:

<script type="text/javascript">
var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>';
</script>

В вашем js:

$.ajax({
        url: ajaxurl,    
        type: "POST",
        cache: false,
        data: data + '&action=sendmail' //action defines which function to use in add_action
});

В вашем functions.php :

function send_my_mail(){
#do your stuff
}

add_action('wp_ajax_sendmail', 'send_my_mail');
add_action('wp_ajax_nopriv_sendmail', 'send_my_mail');

Читайте о Ajax in Plugins.

 23
Author: RRikesh, 2014-03-11 17:09:41

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

Шаблон проектирования реестра

Есть мой небольшой плагин jQuery, если это может быть вам интересно. Представитель GitHub

<script type="text/javascript">
    $.Registry.set('urlMail', '<?php get_bloginfo('template_url'); ?>/templates/process.php';
</script>

И чтобы получить значение из реестра, вы должны использовать $.Registry.get('urlmail');

 0
Author: Sergei Khaletskiy, 2013-04-29 09:13:18

Я решил, используя код, предоставленный RRIKESH, но заменив

data: data 

С

data: data + '&action=sendmail'
 0
Author: Fred K, 2017-05-23 12:34:08