Включая необходимые функции для пользовательской формы регистрации ajax


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

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

Он начинается с простой формы, в которой достаточно ввести и отправить электронное письмо. Действие формы относится к php-файлу в папке моего плагина, ajax-signup.php. Я использую ajax для отправки данных формы в этот файл, который затем "регистрирует" адрес электронной почты и возвращает ajax-ответ.

Старые плагины просто включали файл registration.php, который предоставлял все необходимые функции php-файлу ajax, чтобы он мог выполнить регистрацию (проверить правильность электронной почты, записать в базу данных и т. Д.), Поскольку файл существует за пределами WP. Что мне нужно включить или какой есть более совершенный метод, который позволит мне это сделать? Может быть, функция внутри среды WP, а не отдельный файл? Я не уверен, как использовать ajax в хотя таким образом...

Author: harryg, 2014-04-09

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 .

 1
Author: Douglas.Sesar, 2014-04-09 13:11:07