Домой Wp-Recall WP-Recall: Пишем свое дополнение и кастомизация Свое дополнение wp-recall требуется помощь
65ответ(ов) в теме
Kirill Zzz
не в сети 1 год
На сайте с 27.03.2015
Участник
Тем 23
Сообщения 134
1
12:00

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

<?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;

}

0
Kirill Zzz
не в сети 1 год
На сайте с 27.03.2015
Участник
Тем 23
Сообщения 134
2
12:02

Кнопку вывел, а вот как на нее теперь форму повесить , что то застопорился на этом вопросе.

0
Вова (Otshelnik-Fm)
не в сети 4 дня
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18647
3
12:21

Здравствуйте.
WP-Recall я тут вижу нисколько. Обычный апи вордпресса.
Тему наверно стоит перенести в вопросы вордпресс.

По коду - ну вижу кнопку. А где обработчики? js, php?

и the_content - это не экшен, а фильтр:

Вы не можете просматривать опубликованные ссылки

Правильнее писать add_filter('the_content' - потом сами не будете в заблуждение вводиться от кода.

0
Kirill Zzz
не в сети 1 год
На сайте с 27.03.2015
Участник
Тем 23
Сообщения 134
4
12:39

А разве хуки вордпреса нельзя использовать в дополнениях для recall? я поискал в api recall но ничего похожего не нашел для вывода на страницу товара. обработчики естественно будут, мне бы наколочку как форму прикрутить? вынести в отдельный файл и вызывать ее include или ее можно в переменную записать, просто не пойму как ее правильно на страницу выводить. Просто через конкатенацию выводить мне кажется как то неправильно, а мне получается надо сразу за кнопкой вывести саму форму чтобы она была в теле страницы, а потом уже я ее спрячу и сделаю вызов по кнопке.

0
Вова (Otshelnik-Fm)
не в сети 4 дня
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18647
5
13:10

А разве хуки вордпреса нельзя использовать в дополнениях для recall?

- где я об этом говорил?

мне бы наколочку как форму прикрутить

- азы html. И даже вордпресс тут ни причем.

Вы задали общий вопрос по вордпрессу. Суть сводится к тому - "я использовал фильтр the_content, вывел кнопку, теперь я не знаю как мне написать обработчик для того что я хочу".
А эта основная масса работы

логика такая: по клику вызываете js функцию, передаете в нее нужные данные. Потом ajax запрос, потом ловите на php запрос. Обрабатываете , если все ок - пишете в бд и возвращаете результат.

0
Kirill Zzz
не в сети 1 год
На сайте с 27.03.2015
Участник
Тем 23
Сообщения 134
6
13:15

Ничего не понял, но все равно спасибо!

0
Вова (Otshelnik-Fm)
не в сети 4 дня
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18647
7
13:22

Поэтому я и написал что то что вы сделали - минимально. Основная работа предстоит после нажатия кнопки. Такие вещи пишут в статьях. В интернете есть подобные руководства. Остается понять принцип и писать под свою задачу

0
Kirill Zzz
не в сети 1 год
На сайте с 27.03.2015
Участник
Тем 23
Сообщения 134
8
13:35

Как написать форму и обработчик к ней я изучил. это не проблема, я имел в виду правильно ли будет вывести эту форму под кнопкой как HTML и уже потом с помощью css ее оформить как всплывающее окно?

Вы не можете просматривать опубликованные ссылки
0
Вова (Otshelnik-Fm)
не в сети 4 дня
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18647
9
13:39

Не видя кода давать советы что правильно, а что нет опираясь на скриншот... Я промолчу.
Валидатор не ругается? В браузерах во всех работает? Код выполняет все возложенные функции? Если везде да - какие еще советы давать?

0
Kirill Zzz
не в сети 1 год
На сайте с 27.03.2015
Участник
Тем 23
Сообщения 134
10
16:05

Подскажите как указать путь до php обработчика в ява скрипте, обработчик лежит в папке с дополнением. Не пойму как задавать относительный путь.

jQuery.post("callback.php"

0
Kirill Zzz
не в сети 1 год
На сайте с 27.03.2015
Участник
Тем 23
Сообщения 134
11
16:26

Не могу указать путь до обработчика,

Вы не можете просматривать опубликованные ссылки

…%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)

0
Андрей CS
не в сети 23 часа
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16855
12
17:38

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

0
Kirill Zzz
не в сети 1 год
На сайте с 27.03.2015
Участник
Тем 23
Сообщения 134
13
19:00

Здравствуйте Андрей, подскажите где можно подробнее об этом почитать, так все почти получилось, единственное что скрипт не может отправить данные обработчику так как его не находит. Спасибо.

0
Андрей CS
не в сети 23 часа
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16855
14
19:54

это стандартный функционал ВП, легко находится в поиске, отправка запросов в сторонний файл не соотвествует кодексу ВП, поэтому от них надо отказываться и учиться работать с admin-ajax.php

0
Kirill Zzz
не в сети 1 год
На сайте с 27.03.2015
Участник
Тем 23
Сообщения 134
15
20:06

Да я уже загуглил, почитал, получается что по умолчанию он только для админки применим, а для лица его нужно отдельно подключать

0
Андрей CS
не в сети 23 часа
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16855
16
20:14

что то не то вы почитали значит, ищите простейшие примеры ajax на ВП

0
Андрей CS
не в сети 23 часа
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16855
17
20:25

Вот как это работает в плагине 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;
	
}

0
Kirill Zzz
не в сети 1 год
На сайте с 27.03.2015
Участник
Тем 23
Сообщения 134
18
13:11

Я так понял что для каждого скрипта нужно создавать Переменную 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();
   }
?>

0
Kirill Zzz
не в сети 1 год
На сайте с 27.03.2015
Участник
Тем 23
Сообщения 134
19
13:11

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);
         
    });
 
});

0
Вова (Otshelnik-Fm)
не в сети 4 дня
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18647
20
13:17

Я так понял что для каждого скрипта нужно создавать Переменную ajaxurl

вот она: url: Rcl.ajaxurl,

и как зарегистрировать обработчик?

В js это видели? action=my_php_function

Вы начните с малого - в обработчике попробуйте все убрать - и верните в нем хоть какой-то ответ - простую строку. По клику на кнопке получите ее? Если да - то где-то ошибка в функции обработчика. Действуйте постепенно. Тогда баг выявите.

Хорошая статья по ajax в вп

Вы не можете просматривать опубликованные ссылки
0
Kirill Zzz
не в сети 1 год
На сайте с 27.03.2015
Участник
Тем 23
Сообщения 134
21
13:26

ДА спасибо, я догадался что это переменная Rcl.ajaxurl, Я вот только не могу понять как скрипт понимает куда ему вернуть эти значения, В конце там идет если письмо отправлено то вывети 1, а если не отправлено 0, правильно же? А как он понимает куда нужно вернуть значения не пойму. Буду действовать по вашему совету может что и получиться. Спасибо.

0
Kirill Zzz
не в сети 1 год
На сайте с 27.03.2015
Участник
Тем 23
Сообщения 134
22
19:24

Otshelnik-Fm сказал(а)

Я так понял что для каждого скрипта нужно создавать Переменную ajaxurl

вот она: url: Rcl.ajaxurl,

и как зарегистрировать обработчик?

В js это видели? action=my_php_function

Вы начните с малого - в обработчике попробуйте все убрать - и верните в нем хоть какой-то ответ - простую строку. По клику на кнопке получите ее? Если да - то где-то ошибка в функции обработчика. Действуйте постепенно. Тогда баг выявите.

Хорошая статья по ajax в вп

Вы не можете просматривать опубликованные ссылки

Получается у меня что в запросе отправляются имя и телефон , не пойму нужно как то указывать какой файл должен обработать этот запрос или wp сам догадается его отправить куда нужно да потом еще и вернуть куда нужно, нигде не нашел описание этого механизма или он на текущую страницу возвращает, как он понимает что нужно значения отправить в файл? парсит все файлы на предмет наличия хука?

0
Kirill Zzz
не в сети 1 год
На сайте с 27.03.2015
Участник
Тем 23
Сообщения 134
23
01:42

Вы не можете просматривать опубликованные ссылки

Вы не можете просматривать опубликованные ссылки

Что то бьюсь я бюсь третий день ничего не получается, запрос отправляется судя по консоли и возвращает 0, никак не цепляется на хук, даже простую строку не выводит.

0
Preci
не в сети 20 часов
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1643
24
01:54

Если код с прошлой страницы не менялся, то может быть из-за этого:

 name = jQuery('#name').val();
        phone = jQuery('#phone').val();

Вы не указали что это переменные, надо заменить на

var name = jQuery('#name').val();
var phone = jQuery('#phone').val();

0
Kirill Zzz
не в сети 1 год
На сайте с 27.03.2015
Участник
Тем 23
Сообщения 134
25
02:04

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();
   }
?>

0
Вова (Otshelnik-Fm)
не в сети 4 дня
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18647
26
06:36

Я давал вам ссылку на работу с ajax в вордпрессе. Изучайте вначале его на стандартных примерах. В интернете описано почему ВП возвращает ноль. Эту школу за вас никто не пройдет.

0
Kirill Zzz
не в сети 1 год
На сайте с 27.03.2015
Участник
Тем 23
Сообщения 134
27
10:34

Спасибо за дельный совет про школу, не понимаю только зачем озвучивать очевидные вещи. Статью я прочитал и еще штук 15 похожих, вроде делаю все по написанному а выходит , ничего не выходит. Пол дня вчера прогуглил про этот 0, ничего путного не нашел, если вас не затруднит , ткните носом где про этот 0 почитать?

0
Андрей CS
не в сети 23 часа
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16855
28
10:45

в функцию my_php_function вообще что-то приходит?
вставьте в ее начало print_r($_POST); и в консоли браузера посмотрите ответ, так узнаете получает ли функция вообще данные запроса

0
Kirill Zzz
не в сети 1 год
На сайте с 27.03.2015
Участник
Тем 23
Сообщения 134
29
11:27

Ответ запроса к admin-ajax.php всегда возвращает 0

Вы не можете просматривать опубликованные ссылки

Я же там где надо смотрю?

0
Андрей CS
не в сети 23 часа
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16855
30
11:32

а во вкладке Headers данные на сервер отправляются?

0
Тема закрыта. Публикация новых сообщений запрещена.