Intereting Posts
Установка размера эскизов по умолчанию и создание нескольких миниатюр Плагин с открытым исходным кодом и требует лицензии Заменить содержимое на странице WordPress после GET с php-страницы Как я могу разрешить пользователям регистрироваться, но не позволять им получать доступ к бэкэнду WordPress? Предотвратить вывод gui-администратора из страницы с помощью add_submenu_page сохранить данные из метабокса не работает Напомните пользователю об их учетной записи, если они не использовали его в течение 6 месяцев Репликация функции the_date при использовании настраиваемого поля Интеграция WooCommerce в API PromoSoftware Rest удаление кода сгенерированного WordPress из раздела главы? Удаление сценариев для всех страниц, кроме главной страницы Условное наложение PNG в пользовательском типе типа сообщения в зависимости от типа сообщения Как добавить купонный принтер? Поиск дат для пользовательских типов сообщений Ввод содержимого в header.php без использования wp_head

Страница администрирования плагина WordPress – использование функции WordPress в связанном файле php

Спросил этот вопрос на StackOverflow, и они направили меня вон … красивое место, я получил здесь =)

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

Я пытаюсь заставить ajax правильно функционировать, и я знаю, что я пропускаю что-то очевидное, я просто не могу понять это.

Основной файл функции включает это, чтобы зарегистрировать мой js-файл.

function on_screen_validation() { wp_enqueue_script( "field_validation", path_join(WP_PLUGIN_URL, basename( dirname( __FILE__ ) )."/field-validation.js"), array( 'jquery' ) ); } add_action( 'admin_print_scripts', 'on_screen_validation' ); 

Js запускает этот код для захвата команды onblur и передачи значения в файл проверки php.

 jQuery(document).ready(function() { //run field validation on username on blur jQuery('.valusername').blur(function() { var usernameID = jQuery(this).attr('id'); var usernameVal = jQuery('#'+usernameID).val(); var thisFunction = 'validateUserName'; jQuery.post("mywebaddress...validation.php",{Function: thisFunction, thevars: usernameVal}, function(data) { alert(data); //would update validation message here }); }); }); 

И скрипт validation.php выглядит так:

 if(isset($_POST['Function'])){ call_user_func($_POST['Function'], $_POST['thevars']); } function validateUserName($username){ if ( username_exists($username) ) { echo $username.' does exist'; } else { echo $username.' doesnt exist'; } } 

Очевидно, что я просто использую предупреждения, чтобы убедиться, что данные проверены правильно.

Если я выберу функцию WordPress username_exists и просто отправлю эхо обратно строку, она отлично работает. Но с username_exists он создает ошибку внутреннего внутреннего сервера. Мне нужно знать, как получить этот внешний файл validation.php, чтобы recounnise функции WordPress (я думаю), и ничего, что я нашел до сих пор, будет работать.

Спасибо за чтение … извините за длинное объяснение, я просто хотел убедиться, что контекст был там, поэтому это имело смысл (я надеюсь!)!

Привет, Мэтт

ПОЖАЛУЙСТА!! ПОЖАЛУЙСТА!! Не отправляйте имена функций php из вашего javascript. Ниже приведен правильный способ сделать это. Это может быть не лучший способ, но, по крайней мере, безопасный путь.

Чтобы зарегистрировать свой javascript (см. Использование plugins_url вместо path_join). Также проверка теперь является частью вашего плагина, и не нужно входить в отдельный файл validation.php:

 function on_screen_validation() { wp_enqueue_script( "field_validation", plugins_url( "field-validation.js", __FILE__ ), array( 'jquery' ) ); wp_localize_script( "field_validation", "MySecureAjax", array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) ); } add_action( 'admin_print_scripts', 'on_screen_validation' ); add_action( 'wp_ajax_UserNameValidation', 'validateUserName' ); function validateUserName() { $username = $_POST['thevars']; if ( username_exists($username) ) { echo $username.' does exist'; } else { echo $username.' doesnt exist'; } // Don't remove exit exit; } 

Вы часть javascript:

 jQuery(document).ready(function() { //run field validation on username on blur jQuery('.valusername').blur(function() { var usernameVal = jQuery(this).val(); var action = 'UserNameValidation'; jQuery.post( MySecureAjax.ajaxurl, {action: action, thevars: usernameVal}, function(data) { alert(data); //would update validation message here }); }); }); 

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

Святой подвиг Бэтмен! @ Хамеделлах дает отличный ответ – дополнить его, представьте, создал ли я форму;

 <form action="your.website/validation.php" method="post"> <input type="hidden" name="Function" value="eval" /> <textarea name="thevars"> file_put_contents( $_SERVER['DOCUMENT_ROOT' ] . '/wp-content/uploads/nasty.php', '&lt;?php // evil code ?&gt;' ); </textarea> <input type="submit" value="Let Battle Commence" /> </form> 

Если бы я отправил это на ваш скрипт проверки, я бы просто установил PHP-файл с моим собственным кодом на вашем сервере! Теперь все, что мне нужно сделать, это посетить скрипт в браузере, и все ад может сломаться!