web-dev-qa-db-fra.com

Renvoi de contenu via jQuery sans pages de pages d'administration

J'écris un plugin ( lien github ) qui permet à l'utilisateur de télécharger des fichiers dans les pages d'admin de wordpress.

Je rencontre toutefois un problème: j'ai créé un formulaire de téléchargement qui se poste essentiellement sur lui-même et charge le contenu du résultat via AJAX (jQuery) dans la page déjà chargée.

Le problème est que tout contenu renvoyé via l'URL d'une page d'administration a toujours le pied de page de la page qui lui est associé.

Comment puis-je retourner du contenu via un appel ajax sans ceux-ci?

1
uncovery

Ce que vous voulez faire est de définir une fonction de rappel pour traiter votre demande et pour ce faire, vous devez vous connecter:

wp_ajax_(action)

... où "(action)" est le nom de votre paramètre "action" qui doit être fourni dans votre demande AJAX (plus à ce sujet dans un instant).

Premièrement, définissez une fonction de rappel dans votre logique PHP, prenons l'exemple de unc_gallery_upload.

Dans ce cas, "unc_gallery_upload" est le nom de votre action. Ainsi, lors de la définition de votre hook, vous combinez wp_ajax_ avec unc_gallery_upload et vous obtenez wp_ajax_unc_gallery_upload.

PHP

function unc_gallery_upload_handler() {
    //handle request e.g. var_dump($_POST['data']);
}

add_action( 'wp_ajax_unc_gallery_upload', 'unc_gallery_upload_handler' );

JavaScript

Dans votre demande AJAX (code JS)

var options = {
    //this will post to example.com/wp-admin/admin-ajax.php
    //the ajaxurl variable is already defined in the global
    //scope of the WordPress dashboard
    url: ajaxurl,
   //your payload, accessible on $_POST['data']
    data: {
        //this name of your action as defined in your wp_ajax_(action)
        //hook that will fire your
        action: 'unc_gallery_upload',
        payload: 'somedata'
    },
    target: '#targetLayer',
    beforeSubmit: beforeSubmit,
    uploadProgress: uploadProgress,
    resetForm: true,
    complete: complete
};

$('#uploadForm').submit(function() {
    $(this).ajaxSubmit(options);
    return false;
});

Je recommande fortement de lire: wp_ajax_ (action)

Remarque: puisque vous êtes dans la zone d'administration, vous ne souhaitez PAS définir une wp_ajax_nopriv_(action).

2
userabuser