web-dev-qa-db-fra.com

Manipulation AJAX avec des champs personnalisés de taxonomie personnalisée à ajouter

J'ai écrit des champs supplémentaires pour ma taxonomie personnalisée. J'ai ajouté les champs de formulaire au formulaire d'ajout. Je l'ai fait enregistrer en gérant les valeurs appropriées dans $_POST. Dans 4.1.x, le formulaire add est Ajax-ified. Comment puis-je effacer les champs de formulaire en cas de succès?

Plus précisément, comment visualiser la réponse à l'action add-tag admin ajax?

1
Daniel A. White

Vous pouvez y parvenir avec un peu de jQuery:

Créez ce fichier dans THEMEFOLDER/js/appelé field-clear.js et remplacez #formID par l'ID du formulaire que vous souhaitez réinitialiser:

//Code runs when an ajax request succeeds
jQuery( document ).ajaxSuccess(function( event, xhr, settings ) {
    //Check ajax action of request that succeeded
    if(settings.action == 'add_tag') {
        //Reset the form
        jQuery('#formID')[0].reset();

        //Send ajax response to console.
        console.log("Triggered ajaxSuccess handler. The ajax response was: " + xhr.responseText );
    }
});

Puis dans functions.php chargez votre javascript:

wp_register_script('field-clear-script', get_stylesheet_directory_uri() . '/js/field-clear.js', array('jquery'), null, true);

function field_clear_load_scripts() {
    wp_enqueue_script('field-clear-script');
}
add_action('admin_enqueue_scripts', 'field_clear_load_scripts');

EDIT - Code ajouté pour afficher le texte de réponse ajax. Ajout de la vérification du paramètre d'action ajax. Modification de la fonction de mise en file d'attente pour mettre en file d'attente sur l'administrateur, car je pense que c'est là que c'est requis.

2
Jason Murray

La réponse de Jason est très proche, ce qui a conduit à cette solution pour moi sur WP 4.9:

$(document).ajaxSuccess(function(evt, xhr, opts) {
    if (
        xhr.status >= 200
        && xhr.status < 300
        && opts.data
        && /(^|&)action=add-tag($|&)/.test(opts.data)
        && /(^|&)taxonomy=YOUR_TAXONOMY($|&)/.test(opts.data)
        && xhr.responseXML
        && $('wp_error', xhr.responseXML).length == 0
    ) {
        // clear your fields
    }
});
0
Walf