Wordpress + ajax-форма отзыва, коллбэка. Как правильно подключить ajaxurl

S3
На сайте с 29.03.2012
Online
358
2408

Не получается правильно навесить переменную для работы ajax-формы. Делаю так


//ajax-form Форма обратной связи

add_action( 'wp_enqueue_scripts', 'myajax_data', 99 );
function myajax_data(){

wp_localize_script('jquery', 'ajaxurl',
array(
'url' => admin_url('admin-ajax.php')
)
);

}

add_action('wp_footer', 'my_action_javascript', 99); // для фронта

function my_action_javascript() {
?>
<script type="text/javascript" >
$('form').on('submit', function (e) {
e.preventDefault();
var name = $("form [name='name']").val();
var email = $("form [name='email']").val();
var phone = $("form [name='phone']").val();
var message = $("form [name='message']").val();
$.ajax({
data: {
action: 'my_action',
name: name,
email: email,
phone: phone,
message: message
},
type: 'post',
url: "/wp-admin/admin-ajax.php", /// Это- неправильно!!!!
success: function(data) {
alert(data); //should print out the name since you sent it along
$('#respon').html(data);
document.getElementById('contact-form').reset();

}
});
});
</script>
<?php
}

add_action('wp_ajax_my_action', 'my_action_callback');
add_action('wp_ajax_nopriv_my_action', 'my_action_callback');

function my_action_callback()
{
тут обработка и отправка письма
}

Привел весь код, он рабочий, но не нравится мне что приходится использовать так -


url: "/wp-admin/admin-ajax.php",

должно быть


url: ajaxurl.url,

В таком варианте получаю ошибку -

ReferenceError: myajax_data is not defined

url: myajax_data.url,

Что естественно - моя переменная не видна в коде.

Вопрос к чему ее надо привязывать? я пытаюсь в jquery, но получается, это неправильно. в другим моим скриптам в теме тоже не могу прикрутить.

Как надо?

TA
На сайте с 12.06.2009
Offline
116
TiA
#1

Для получения ссылки просто меняете


url: "/wp-admin/admin-ajax.php",

на


url: "<?php echo admin_url('admin-ajax.php'); ?>",

Эта функция уже используется у вас в коде, но в другом месте.

Профессиональная верстка и разработка сайтов на WordPress (http://www.maultalk.com/topic139110s0.html)
S3
На сайте с 29.03.2012
Online
358
#2

TiA, Это не то что я хочу. Работает и тот и тот вариант, но противоречит кодексу. Мне нужно понять, как правильно подключать wp_localize_script в моем случае, чтобы использовать переменную вида url: ajaxurl.url, это будет универсальное решение и мне не придется заботиться, подключен ли wp-admin.php ранее или нет. В кодексе читаю, но не могу разобраться с wp_localize_script

TA
На сайте с 12.06.2009
Offline
116
TiA
#3

Что значит подключен wp-admin.php или нет? Описанная функция выводит ссылку на обработчик AJAX. Если вы используете вывод скриптов как есть прямо в коде, то это достаточно неплохое решение.

Если вы хотите все делать правильно, то скрипты нужно выносить в отдельные файлы и подключить вместе с зависимостями и переменными. Это подробно описано в документации.

Сначала скрипты нужно вынести в отдельный файл, зарегистрировать его вместе с зависимостями, подключить через wp_localize_script нужные переменные и только после этого подключить сам скрипт через wp_enqueue_script на нужной странице. Как это все делается в случае с AJAX хорошо показано в последнем примере по ссылке выше.

В вашем примере вообще никак не проверяется подключен ли jQuery и локализация почему-то зазывается на него. Также не уделяется внимание очередности вывода. Сначала регистрация, потом локализация и только потом вывод.

S3
На сайте с 29.03.2012
Online
358
#4

TiA, спасибо, попробую разобраться. вопрос и был в том, как правильно подключить)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий