Здравствуйте уважаемые, мне часто помогают на этом форуме ,поэтому решил обратиться снова к вам за советом. Решил сам написать дополнение кнопки быстрого заказа, уровень знаний не велик у меня, подскажите как правильно прикрутить форму?
<?php
add_action('the_content','quick_order', 100);
function quick_order($content){
$out = $content . '<a href="#modal" class="button openModal">Заказать обратный звонок</a>';
if( get_post_type() == 'products' )
return $out;
else
return $content;
}
Здравствуйте.
WP-Recall я тут вижу нисколько. Обычный апи вордпресса.
Тему наверно стоит перенести в вопросы вордпресс.
По коду - ну вижу кнопку. А где обработчики? js, php?
и the_content - это не экшен, а фильтр:
Правильнее писать add_filter('the_content' - потом сами не будете в заблуждение вводиться от кода.
А разве хуки вордпреса нельзя использовать в дополнениях для recall? я поискал в api recall но ничего похожего не нашел для вывода на страницу товара. обработчики естественно будут, мне бы наколочку как форму прикрутить? вынести в отдельный файл и вызывать ее include или ее можно в переменную записать, просто не пойму как ее правильно на страницу выводить. Просто через конкатенацию выводить мне кажется как то неправильно, а мне получается надо сразу за кнопкой вывести саму форму чтобы она была в теле страницы, а потом уже я ее спрячу и сделаю вызов по кнопке.
А разве хуки вордпреса нельзя использовать в дополнениях для recall?
- где я об этом говорил?
мне бы наколочку как форму прикрутить
- азы html. И даже вордпресс тут ни причем.
Вы задали общий вопрос по вордпрессу. Суть сводится к тому - "я использовал фильтр the_content, вывел кнопку, теперь я не знаю как мне написать обработчик для того что я хочу".
А эта основная масса работы
логика такая: по клику вызываете js функцию, передаете в нее нужные данные. Потом ajax запрос, потом ловите на php запрос. Обрабатываете , если все ок - пишете в бд и возвращаете результат.
Kirill Zzz сказал(а)
Не могу указать путь до обработчика,
Вы не можете просматривать опубликованные ссылки…%d0%b0%d1%80%d1%81%d0%ba%d0%b8%d0%b5-%d1%87%d0%b0%d1%81%d1%8b/callback.php 404 (Not Found)
используя кастомный файл обработчика ajax запроса вы зарабатываете себе дополнительные проблемы, которые вам будет решить очень трудно, используйте стандартное указание на файл admin-ajax.php, путь уже содержится в переменной объекта Rcl.ajaxurl
Вот как это работает в плагине wp-recall, самая суть:
1. на стороне js
//собираем данные для отправки в
//указанную php-функцию my_php_function
var dataString = 'action=my_php_function&custom1=1&custom2=2';
dataString += '&ajax_nonce='+Rcl.nonce;
jQuery.ajax({
type: 'POST',
data: dataString,
dataType: 'json',
url: Rcl.ajaxurl,
success: function(result){
//получаем ответ и обрабатываем его
console.log(result);
}
});
2. на стороне php
add_action('wp_ajax_my_php_function','my_php_function');
add_action('wp_ajax_nopriv_my_php_function','my_php_function');
function my_php_function(){
//проверка nonce
rcl_verify_ajax_nonce();
//формируем массив с данными для ответа
$result = array(
'success' => true,
'custom' => 1
);
//посылаем ответ
echo json_encode($result);
exit;
}
Я так понял что для каждого скрипта нужно создавать Переменную ajaxurl ?или можно воспользоваться уже созданной? и как зарегистрировать обработчик? У меня получается что запрос уходит без ошибок , но ничего не возвращаеться
add_action('wp_ajax_(action)', 'my_action_callback');
add_action('wp_ajax_nopriv_(action)', 'my_action_callback');
использую эти хуки
<?php
add_action( 'wp_ajax_my_action', 'my_action_callback' );
add_action( 'wp_ajax_nopriv_my_action', 'my_action_callback' );
function my_action_callback(){
//Если поступили данные..
if( isset($_POST['name'],$_POST['phone'])){
$name = trim( htmlspecialchars( substr($_POST['name'], 20) ) );
$phone = trim( htmlspecialchars( substr($_POST['phone'], 20) ) );
$admin_email = get_option('admin_email');
if( $name != '' AND $phone != '' ){
$email = $admin_email;
$domen = "test2.ru";
$message = 'Имя: '.$name.'<br>Телефон: '.$phone;
$headers = "Content-type: text/html; charset=utf-8
";
$headers .= "From: ".$domen." <robot@".$domen.">
";
$subject = "Обратный звонок";
mail($email, $subject, $message, $headers);
echo 1;
}else echo 0;
}
wp_die();
}
?>
jQuery(document).ready(function(){
//Показать форму
jQuery('#callback').click(function(){
jQuery('#callback_form').slideDown();
});
//Скрыть форму
jQuery('#close').click(function(){
jQuery('#callback_form').slideUp();
});
//Нажали на кнопку - заказать звонок
jQuery('#send').click(function(){
name = jQuery('#name').val();
phone = jQuery('#phone').val();
//Если поля заполнены, то отправляем данные
if( name != '' && phone != '' ){
jQuery.post(ajaxurl,{name: name,phone: phone},function success(data){
if( data != 0 ) jQuery('#callback_form').html('Отправлено!').slideUp(3000);
});
}else jQuery(this).siblings('input').animate({opacity: 0.25}, 500).animate({opacity: 1}, 500);
});
});
Я так понял что для каждого скрипта нужно создавать Переменную ajaxurl
вот она: url: Rcl.ajaxurl,
и как зарегистрировать обработчик?
В js это видели? action=my_php_function
Вы начните с малого - в обработчике попробуйте все убрать - и верните в нем хоть какой-то ответ - простую строку. По клику на кнопке получите ее? Если да - то где-то ошибка в функции обработчика. Действуйте постепенно. Тогда баг выявите.
Хорошая статья по ajax в вп
ДА спасибо, я догадался что это переменная Rcl.ajaxurl, Я вот только не могу понять как скрипт понимает куда ему вернуть эти значения, В конце там идет если письмо отправлено то вывети 1, а если не отправлено 0, правильно же? А как он понимает куда нужно вернуть значения не пойму. Буду действовать по вашему совету может что и получиться. Спасибо.
Otshelnik-Fm сказал(а)
Я так понял что для каждого скрипта нужно создавать Переменную ajaxurl
вот она: url: Rcl.ajaxurl,
и как зарегистрировать обработчик?
В js это видели? action=my_php_function
Вы начните с малого - в обработчике попробуйте все убрать - и верните в нем хоть какой-то ответ - простую строку. По клику на кнопке получите ее? Если да - то где-то ошибка в функции обработчика. Действуйте постепенно. Тогда баг выявите.
Хорошая статья по ajax в вп
Вы не можете просматривать опубликованные ссылки
Получается у меня что в запросе отправляются имя и телефон , не пойму нужно как то указывать какой файл должен обработать этот запрос или wp сам догадается его отправить куда нужно да потом еще и вернуть куда нужно, нигде не нашел описание этого механизма или он на текущую страницу возвращает, как он понимает что нужно значения отправить в файл? парсит все файлы на предмет наличия хука?
jQuery(document).ready(function($){
//Показать форму
jQuery('#callback').click(function(){
jQuery('#callback_form').slideDown();
});
//Скрыть форму
jQuery('#close').click(function(){
jQuery('#callback_form').slideUp();
});
//Нажали на кнопку - заказать звонок
jQuery('#send').click(function(){
var name = jQuery('#name').val();
var phone = jQuery('#phone').val();
var dataString = {action: 'my_php_function', name: name , phone: phone};
//Если поля заполнены, то отправляем данные
if( name != '' && phone != '' ){
jQuery.post (Rcl.ajaxurl, dataString, function success(data){
if ( data != 0 ) jQuery('#callback_form').html('Отправлено!').slideUp(3000);
});
}else jQuery(this).siblings('input').animate({opacity: 0.25}, 500).animate({opacity: 1}, 500);
});
});
Код немного измеился, но результат тот же, запрос отправляется , и возвращается 0
<?php
add_action( 'wp_ajax_my_php_function', 'my_php_function' );
add_action( 'wp_ajax_nopriv_my_php_function', 'my_php_function' );
function my_php_function(){
//Если поступили данные..
if( isset($_POST['name'],$_POST['phone'])){
$name = trim( htmlspecialchars( substr($_POST['name'], 20) ) );
$phone = trim( htmlspecialchars( substr($_POST['phone'], 20) ) );
$admin_email = get_option('admin_email');
if( $name != '' AND $phone != '' ){
$email = $admin_email;
$domen = "test2.ru";
$message = 'Имя: '.$name.'<br>Телефон: '.$phone;
$headers = "Content-type: text/html; charset=utf-8
";
$headers .= "From: ".$domen." <robot@".$domen.">
";
$subject = "Обратный звонок";
mail($email, $subject, $message, $headers);
echo 1;
}else echo 0;
}
wp_die();
}
?>
Спасибо за дельный совет про школу, не понимаю только зачем озвучивать очевидные вещи. Статью я прочитал и еще штук 15 похожих, вроде делаю все по написанному а выходит , ничего не выходит. Пол дня вчера прогуглил про этот 0, ничего путного не нашел, если вас не затруднит , ткните носом где про этот 0 почитать?