web-dev-qa-db-fra.com

admin-ajax.php renvoie 0. Comment puis-je le déboguer et le corriger?

Essayer d'utiliser admin-ajax.php pour télécharger une image à partir d'un formulaire frontal. Je continue à obtenir 0 avec le code ci-dessous que j'ai et je ne suis pas sûr de savoir comment déboguer ceci ni où cela ne va pas.

J'ai un fichier d'entrée HTML

<input type="file" name="wh_image_upload" id="wh_image_upload" multiple="false" />

et script localisé pour la demande AJAX

$img_nonce = wp_create_nonce('image_upload_nonce');
wp_localize_script( 'ajax-script', 'ajax_image', array( 'ajax_url' => admin_url( 'admin-ajax.php' )) );

et PHP fonction

function write_here_featured_image_upload() {
    var_dump($_FILES);
    die();
}

add_action( 'wp_ajax_write_here_img_upload', 'write_here_featured_image_upload' );
add_action( 'wp_ajax_nopriv_write_here_img_upload', 'write_here_featured_image_upload' );

JS

// Featured image upload AJAX
    $("#wh_image_upload").change(function(){
        var userFile    =   new FormData();  
        var fileInput   =   $( "#wh_image_upload" )[0].files[0];
        //console.log(fileInput);

        userFile.append("file", fileInput);
        userFile.append("action", "write_here_img_upload");

        $.ajax({
            type: "POST",
            url: ajax_object.ajax_url,
            data: userFile,
            processData: false,
            contentType: false,
            error: function(jqXHR, textStatus, errorMessage) {
                console.log(errorMessage);
            },
            success: function(data) {
                console.log("Image Uploaded! " + data);
            }
        });
    });

Je reçois un message de succès AJAX avec la réponse 0. Image Uploaded! 0

Mise à jour J'ai mis à jour mon code de travail.

4
Ohsik

Activer le débogage

WordPress a des constantes définies dans wp-config.php dans lesquelles vous pouvez imprimer les erreurs à l'écran et les enregistrer dans un fichier séparé situé /wp-content/debug.log. Cela ressemble à ceci:

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_DISPLAY', true );
define( 'WP_DEBUG_LOG', true );

Vous pouvez ensuite imprimer vos propres informations dans le journal de débogage à un moment donné et trouver exactement où (ou si la fonction est même activée), la fonction affiche une erreur:

function write_here_featured_image_upload() {
    error_log( 'Made it into the Ajax function safe and sound!' );
    /** ... Rest of your code ... **/
}

Vérifiez la console des outils de développement

Presque tous les navigateurs de notre époque ont Outils de développement et une Console où les erreurs Javascrpit sont générées. Si vous voyez une erreur dans la console de vos outils de développement, vous devrez d'abord la réparer.


En ce qui concerne une solution possible, vous avez cette condition qui vous empêche d’exécuter ajax sur le front-end du site Web:

if ( is_admin() ) {
    add_action( 'wp_ajax_write_here_img_upload', 'write_here_featured_image_upload' );
    add_action( 'wp_ajax_nopriv_write_here_img_upload', 'write_here_featured_image_upload' );
}

La fonction is_admin() indique à WordPress que only exécute ces actions à tout moment dans le panneau d'administration/le tableau de bord afin que rien ne se passe jamais sur le site Web de votre site Web. Essayez de supprimer le conditionnel et d’ajouter l’action telle quelle:

add_action( 'wp_ajax_write_here_img_upload', 'write_here_featured_image_upload' );
add_action( 'wp_ajax_nopriv_write_here_img_upload', 'write_here_featured_image_upload' );
5
Howdy_McGee