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