Поддержка Плагины добавить ajax в плагин

  • Решено slo_nik

    (@slo_nik)


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

    <?php
    /**********************************************/
    /* подключаю свой js код для ajax */
    function smsdeluxe_key_js(){
     $acc_id = get_option('sms_acc_id');
     $logo_name = get_option('sms_logo');
    
     wp_register_script('smsdeluxe_key.js', plugin_dir_url( __FILE__ ) . 'smsdeluxe_key.js');
     wp_enqueue_script('smsdeluxe_key', plugin_dir_url( __FILE__ ) . 'smsdeluxe_key.js');
      wp_localize_script('smsdeluxe_key', 'myStrs', array(
          'ajaxurl' => plugin_dir_url( __FILE__ ) . 'data.php', // файл обработки запросов, сюда мне надо передать данные
          'acc_id' => $acc_id,
          'logo_type' => plugin_dir_url( __FILE__ ) . 'img/'.$logo_name
        ));
    }
    add_action('wp_head', 'smsdeluxe_key_js');
    /*********************************************
    /* в самом низу файла есть функция обработки обычного S_POST, на этой функии работает стандартный вариант плагина */
    function smsdeluxe_post_filter($content){
     // тут обработка данных и вывод на страницу...
    return $content;
    }

    Пробовал указать обработчиком ajax запросов основной файл плагина, раз в нём есть функция обработки ответа сервера, но выдаёт ошибку, «неопределённая функция add_action»
    Как мне передать данные из основного файла плагина в файл обработки запроса?
    Извините если не совсем понятно пишу, но это мой первый опыт написания плагина…
    Если нужна будет дополнительная информация по коду — напишу. Просто пока не понимаю, что ещё может понадобится…

Просмотр 15 ответов — с 1 по 15 (всего 19)
  • Дело в том, что когда файл плагина вызывается из аякса, к нему не подрубается весь остальной вордпресс, т.е. php считает, что никакого вордпресса вообще нет. Посему, когда вы обрабатываете ajax-запрос, вы не должны вызывать функции wordpress. Чтобы решить эту задачу, когда всё-таки нужно пользоваться функциями движка, в ворпрессе есть специальные функции для обработки AJAX-запросов: http://blogcoding.ru/archives/json-i-ajax-v-plaginax-dlya-wordpress/

    Автор slo_nik

    (@slo_nik)

    Читал статью по ссылке, и эту так же, но до конца не понял как сделать. как подключить дополнительный php файл и передать в него параметры?

    А что непонятно? Если при обработке AJAX-запроса вам необходимо использовать функции wordpress, то вам нужно зарегистрировать функцию-обработчик аякс-запросов, и запросом обращаться не к своему скрипту, а к скрипту, имя которого записано в ajaxurl. Если же вы обращаетесь напрямую к какому-то скрипту, в нём не должны использоваться функции вордпресс, поскольку в процессе выполнения скрипта php не знает о том, что есть функции вордпресс. Вот ещё интересный вариант: http://anton.shevchuk.name/wordpress/wordpress-quick-tricks-01-ajax-and-more/

    Автор slo_nik

    (@slo_nik)

    Вот что получается.
    файл smsdeluxe_key.php — это основной файл плагина, в нём все настройки плагина. так же есть функция, которая запрашивает удалённый сервер и обрабатывает ответ. этот плагин работает просто при клике по кнопке формы, отправка данных методом $_POST.
    Я добавил в этот файл функцию в которой регистрируется мой js файл и параметры для этого файла, в приведённом коде это function smsdeluxe_key_js(). рядом с основным файлом положил файл data.php, в котором запрашивается удалённый сервер.
    но потом подумал, почитал http://codex.wordpress.org/AJAX_in_Plugins и попробовал использовать для обработки ответа сервера уже готовую функцию, которая была изначально в плагине function smsdeluxe_post_filter($content), исходил из того, что зачем лишний файл? тем более, что в этой функции формируются данные для окончательной проверки.
    но ни чего из этой затеи не вышло, ругается на отсутствие add_action, но ведь файл изначально зарегистрирован…

    Не, что-то не могу понять, что вы делаете. Нужно смотреть ваш код. Раз ругается на отсутствие add_action, значит происходит именно то, что я вам описал

    Автор slo_nik

    (@slo_nik)

    чтобы не лепить сюда «портянку», куда можно файл с кодом скинуть?

    ну выложите на обменник какой-нибудь.

    куда можно файл с кодом скинуть?

    Сервис http://pastebin.com для этого предназначен

    Автор slo_nik

    (@slo_nik)

    А что такое data.php?

    Автор slo_nik

    (@slo_nik)

    это файл в котором идёт запрос на удалённый сервер…

    Автор slo_nik

    (@slo_nik)

    в этом файле формируется url удалённого сервера + данные для передачи и через file_get_contents() получаю ответ, коорый надо обработать.
    что то похожее на функцию smsdeluxe_post_filter() в файле, который я показал

    Нужен ещё этот файл и ваши java-скрипты. А вообще, можно как параметры java-script функции все данные передать.

    Автор slo_nik

    (@slo_nik)

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

Просмотр 15 ответов — с 1 по 15 (всего 19)
  • Тема «добавить ajax в плагин» закрыта для новых ответов.