Кнопка пользовательского плагина WordPress onclick вызывает функцию php

Мой плагин показывает 2 поля ввода и кнопку везде, где вы помещаете заполнитель в WP. После нажатия кнопки вызывается функция js, которая должна запускать функцию php с использованием AJAX, но каким-то образом я получаю сообщение об ошибке: «ошибка ссылки myAjax не определена»

wsn-plugin.php

function wpb_new_company(){
    echo '<input type = "text" class = "form-control" id = "companyName" placeholder = "Firmenname">';
    echo '<input type = "text" class = "form-control" id = "companyYear" placeholder = "Jahr">';
    echo '<button onclick = "myAjax();" id = "btnNewCompany" type = "submit" class = "btn btn-primary">Erstellen</button>';
}

script.js (который обрабатывает все события)

function myAjax() {
    alert("myAjax gestartet");
      $.ajax({
           type: "POST",
           url: 'localhost/wp/wp-content/plugins/wsn-plugin/wsn-plugin.php',
           data:{action:'call_this'},
           success:function(html) {
             alert(html);
           }

      });
      alert("myAjax ausgeführt");
 }

и снова wsn-plugin.php, который затем должен запустить некоторую функцию

if ($_POST['action'] == 'call_this') {
    echo "i reached it";
}

Измененный

function wpb_adding_scripts() {
wp_register_script('wsn_script', plugins_url('script.js', __FILE__), array('jquery'),'1.1', true);
wp_enqueue_script('wsn_script');
}
add_action( 'wp_enqueue_scripts', 'wpb_adding_scripts' );

и js скрипт:

function myAjax() {
    alert("myAjax gestartet");
      $.ajax({
           type: "POST",
           url: '/wp/wp-content/plugins/wsn-plugin/wsn-plugin.php',
           data:{action:'call_this'},
           success:function(html) {
             alert(html);
           }

      });
      alert("myAjax ausgeführt");
 }

ни один хром не показывает сообщение об ошибке: localhost сообщает, что
fatal error uncaught error call to undefined function add_action () in wsn-plugin.php: 16

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
6 803
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Похоже, вы не загрузили файл javascript из своего плагина с помощью wp_register_script () и wp_enqueue_script ().

Обновлено: Здесь есть другие проблемы, но я проигнорировал их, поскольку они не были причиной полученной вами ошибки. Вы захотите прочитать https://codex.wordpress.org/AJAX_in_Plugins и уделить особое внимание разделу «Отдельный файл JavaScript». Это должно дать вам возможность отправлять данные по правильному URL-адресу и обрабатывать их.

поскольку вы вызываете свой плагин непосредственно в ajax (big wordpress-no-no), остальная часть фреймворка wordpress не загружается, поэтому add_action не определен. Ссылка в моем редактировании должна помочь.

Max Jones 15.05.2018 03:10

mhpf, да, я прочитал это уже 3 раза и до сих пор не понимаю. к сожалению, теперь есть простое пошаговое объяснение.

J. Doe 15.05.2018 07:58

Ну, первое, что нужно понять, это то, что Wordpress - это система управления контентом с функциями, которые в основном делают ее фреймворком php. Для правильной работы все основные функции должны быть загружены (в правильном порядке), чтобы они работали. Вот почему вы не можете отправить успешный запрос непосредственно вашему плагину. Вам нужно отправить запрос на ajaxurl. Раздел, на котором я сказал вам сосредоточиться, объясняет, как отображать этот URL-адрес для ваших функций javascript. Я не думаю, что смогу помочь больше, не увидев весь код вашего плагина, а это выходит далеко за рамки исходного вопроса, заданного здесь.

Max Jones 15.05.2018 16:02

мне нужно ссылаться на бэкэнд-файл ajax в URL-адресе?

J. Doe 15.05.2018 16:08

и почему нет объяснения, куда поместить php-код в кодексе?

J. Doe 15.05.2018 16:11

Wordpress - это большой фреймворк с множеством движущихся частей. Я знаю, что я всегда чувствовал себя потерянным при чтении документации, когда я только начинал с ней, но становится легче. Код в добавленной мной ссылке находится в вашем плагине, либо в основном файле php, либо в файле, загруженном основным файлом php, либо в файле js, который ставится в очередь основным файлом php. Как я сказал ранее, вы можете открыть новый вопрос и добавить полный код вашего плагина, чтобы было легче определить, какие части отсутствуют или загружены неправильно.

Max Jones 15.05.2018 16:29

Ты прав. Я открыл новый вопрос, и для тех, кто следит за этим вопросом, я размещаю ссылку здесь: stackoverflow.com/questions/50353187/…

J. Doe 15.05.2018 16:48
Ответ принят как подходящий

просто для завершения то, что я сделал для достижения своей цели. Я помещаю несколько комментариев перед строками кода. Однако я не уверен, верны ли они, но на данный момент они помогают мне, по крайней мере, немного лучше понять это.

    my plugin php file:

    //reference to the backend ajax framework   
    add_action( 'wp_enqueue_scripts', 'ajax_test_enqueue_scripts' );
    function ajax_test_enqueue_scripts() {
        wp_enqueue_script( 'test', plugins_url( '/test.js', __FILE__ ), array('jquery'), '1.0', true );
        wp_localize_script( 'test', 'ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
    }

    // to reference the ajax call to this function
    add_action( 'wp_ajax_nopriv_call_this', 'new_company_variable_transfer' );
    function new_company_variable_transfer() {
        echo 'Did we get here?';
        wp_die();
    }

 result div
    function wpb_new_company(){
        echo '<input type = "text" class = "form-control" id = "companyName" placeholder = "Firmenname">';
        echo '<input type = "text" class = "form-control" id = "companyYear" placeholder = "Jahr">';
        echo '<button onclick = "callAjax()" id = "btnNewCompany" type = "submit" class = "btn btn-primary">Erstellen</button>';

        echo '<div id = "result">Hier steht das resultat</div>';
    }
    //to be able to put it on any page with the shortcode [new_company]
    add_shortcode('new_company', 'wpb_new_company');

и простой вызов ajax в файле сценария

    function callAjax(){
        $.ajax({
            type: "POST",
            url: ajax_object.ajax_url,
            data:{action:'call_this'},
            success:function(response) {
            alert(response);
            $("#result").html(response);
            }
        });
    }

А чтобы наглядно показать результат, фотографии ступенек

К сожалению, из-за исправления кода переполнения стека я не могу размещать здесь фотографии ...

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

Другие вопросы по теме