Включая необходимые функции для пользовательской формы регистрации ajax
Я знаю, что в регистрационных формах есть несколько вопросов, но я думаю, что мой немного отличается, так как я не нашел ответа с помощью поиска.
Я создаю простой виджет подписки, который принимает электронную почту пользователя и добавляет ее в таблицу пользователей WordPress в качестве подписчика.
Он начинается с простой формы, в которой достаточно ввести и отправить электронное письмо. Действие формы относится к php-файлу в папке моего плагина, ajax-signup.php
. Я использую ajax для отправки данных формы в этот файл, который затем "регистрирует" адрес электронной почты и возвращает ajax-ответ.
Старые плагины просто включали файл registration.php
, который предоставлял все необходимые функции php-файлу ajax, чтобы он мог выполнить регистрацию (проверить правильность электронной почты, записать в базу данных и т. Д.), Поскольку файл существует за пределами WP. Что мне нужно включить или какой есть более совершенный метод, который позволит мне это сделать? Может быть, функция внутри среды WP, а не отдельный файл? Я не уверен, как использовать ajax в хотя таким образом...
1 answers
Вот базовая настройка, которую я использую для AJAX с Wordpress. вместо загрузки wp-load.php в отдельном файле php; просто используйте метод Wordpress по умолчанию для вызовов AJAX. Это позволяет также фильтровать вызовы функций из Javascript с помощью переключателя. Я также добавил краткий пример для wp_localize_script.
<?php
add_action('wp_enqueue_scripts', 'YOUR_NAME_scripts'); //back end
function YOUR_NAME_scripts( $hook_suffix ) {
wp_enqueue_script('YOUR_NAME-js');
global $blog_id;
$params = array(
'site_url' => site_url(),
'admin_ajax_url' => site_url() . '/wp-admin/admin-ajax.php'
);
wp_localize_script( 'jquery', 'YOUR_NAME', $params );
}
add_action('wp_ajax_nopriv_YOUR_NAME_ajax', 'YOUR_NAME_ajax_function');
add_action('wp_ajax_YOUR_NAME_ajax', 'YOUR_NAME_ajax_function');
function YOUR_NAME_ajax_function(){
fobu_load_classes();
switch($_REQUEST['fn']):
case 'test_ajax':
$output = $_REQUEST['data'];
break;
default:
$output = 'No function specified, check your jQuery.ajax() call';
break;
endswitch;
ob_clean();
$output=json_encode($output);
if( is_array( $output ) ):
print_r( $output );
else:
echo $output;
endif;
die();
}
?>
<script>
//in YOUR_NAME.js or whatever
jQuery(document).ready(function() {
(function ($) {
jQuery.ajax({
url: YOUR_NAME.admin_ajax_url,
dataType: 'json',
//type:'POST',
data: {
'action':'YOUR_NAME_ajax',
'fn': 'test_ajax',
'data': data
},
success: function(results){
//console.log(results);
if( results ){
}
},// end of success
error: function(errorThrown){console.log(errorThrown);}
});// end of ajax
})(jQuery);
});
</script>
Если вы используете встроенный wordpress AJAX, то вы можете легко получить доступ к функциям wordpress без необходимости использовать wp-load.php .