Мой плагин показывает 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



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Похоже, вы не загрузили файл javascript из своего плагина с помощью wp_register_script () и wp_enqueue_script ().
Обновлено: Здесь есть другие проблемы, но я проигнорировал их, поскольку они не были причиной полученной вами ошибки. Вы захотите прочитать https://codex.wordpress.org/AJAX_in_Plugins и уделить особое внимание разделу «Отдельный файл JavaScript». Это должно дать вам возможность отправлять данные по правильному URL-адресу и обрабатывать их.
mhpf, да, я прочитал это уже 3 раза и до сих пор не понимаю. к сожалению, теперь есть простое пошаговое объяснение.
Ну, первое, что нужно понять, это то, что Wordpress - это система управления контентом с функциями, которые в основном делают ее фреймворком php. Для правильной работы все основные функции должны быть загружены (в правильном порядке), чтобы они работали. Вот почему вы не можете отправить успешный запрос непосредственно вашему плагину. Вам нужно отправить запрос на ajaxurl. Раздел, на котором я сказал вам сосредоточиться, объясняет, как отображать этот URL-адрес для ваших функций javascript. Я не думаю, что смогу помочь больше, не увидев весь код вашего плагина, а это выходит далеко за рамки исходного вопроса, заданного здесь.
мне нужно ссылаться на бэкэнд-файл ajax в URL-адресе?
и почему нет объяснения, куда поместить php-код в кодексе?
Wordpress - это большой фреймворк с множеством движущихся частей. Я знаю, что я всегда чувствовал себя потерянным при чтении документации, когда я только начинал с ней, но становится легче. Код в добавленной мной ссылке находится в вашем плагине, либо в основном файле php, либо в файле, загруженном основным файлом php, либо в файле js, который ставится в очередь основным файлом php. Как я сказал ранее, вы можете открыть новый вопрос и добавить полный код вашего плагина, чтобы было легче определить, какие части отсутствуют или загружены неправильно.
Ты прав. Я открыл новый вопрос, и для тех, кто следит за этим вопросом, я размещаю ссылку здесь: stackoverflow.com/questions/50353187/…
просто для завершения то, что я сделал для достижения своей цели. Я помещаю несколько комментариев перед строками кода. Однако я не уверен, верны ли они, но на данный момент они помогают мне, по крайней мере, немного лучше понять это.
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.
поскольку вы вызываете свой плагин непосредственно в ajax (big wordpress-no-no), остальная часть фреймворка wordpress не загружается, поэтому add_action не определен. Ссылка в моем редактировании должна помочь.