Здравствуйте уважаемые, мне часто помогают на этом форуме ,поэтому решил обратиться снова к вам за советом. Решил сам написать дополнение кнопки быстрого заказа, уровень знаний не велик у меня, подскажите как правильно прикрутить форму?
<?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 почитать?