web-dev-qa-db-fra.com

Incluant les fonctions nécessaires pour un formulaire d’inscription ajax personnalisé

Je sais qu'il y a quelques questions sur les formulaires d'inscription mais je pense que le mien diffère un peu car je n'ai pas trouvé de réponse par le biais d'une recherche.

Je crée un simple widget d'abonnement qui prend le courrier électronique d'un utilisateur et l'ajoute au tableau Utilisateurs de WordPress en tant qu'abonné.

Cela commence par un simple formulaire avec juste un email et une soumission. L'action du formulaire est un fichier php dans mon dossier plugin, ajax-signup.php. J'utilise ajax pour poster les données de formulaire dans ce fichier qui "enregistre" l'adresse e-mail et renvoie une réponse ajax.

Les anciens plug-ins ne faisaient qu'inclure le fichier registration.php qui donnait au fichier ajax php toutes les fonctions requises pour qu'il puisse s'inscrire (vérification de la validation du courrier électronique, écriture dans la base de données, etc.), car le fichier existe en dehors de WP. Qu'est-ce que je dois inclure ou quelle méthode supérieure est là pour me permettre de le faire? Peut-être une fonction dans l'environnement WP plutôt qu'un fichier autonome? Je ne sais pas trop comment utiliser ajax de cette façon ...

1
harryg

Voici une configuration de base que j'utilise pour AJAX avec Wordpress. au lieu de charger wp-load.php sur un fichier php séparé; utilisez simplement la méthode par défaut de Wordpress pour les appels AJAX. Cela vous permet également de filtrer les appels de fonction à partir de Javascript via un commutateur. J'ai également ajouté un exemple rapide pour 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>

Si vous utilisez le wordpress AJAX intégré, vous pouvez facilement accéder aux fonctions wordpress sans avoir à utiliser le fichier wp-load.php.

1
Douglas.Sesar