it-swarm.com.de

admin-ajax.php gibt 0 zurück. Wie kann ich es debuggen und reparieren?

Versucht, admin-ajax.php zum Hochladen von Bildern aus dem Front-End-Formular zu verwenden. Ich erhalte immer wieder 0 mit dem folgenden Code, den ich habe, und weiß nicht, wie ich das debuggen soll oder wo es schief geht.

Ich habe eine HTML-Eingabedatei

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

und lokalisiertes Skript für AJAX -Anforderung

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

und PHP Funktion

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);
            }
        });
    });

Ich erhalte eine AJAX Erfolgsmeldung mit der Antwort 0. Image Uploaded! 0

Update Ich habe meinen Arbeitscode aktualisiert.

4
Ohsik

Debugging aktivieren

In WordPress sind Konstanten in wp-config.php definiert, mit denen Sie Fehler auf dem Bildschirm ausdrucken und in einer separaten Datei protokollieren können, die sich /wp-content/debug.log befindet. Es sieht aus wie das:

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

Sie können dann Ihre eigenen Informationen an einer bestimmten Stelle in das Debug-Protokoll drucken und genau herausfinden, wo (oder wenn die Funktion überhaupt getroffen wird) die Funktion fehlerhaft ist:

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

Überprüfen Sie die Dev Tools Console

Fast alle Browser in der heutigen Zeit haben Entwicklertools und eine Konsole , in die Javascrpit-Fehler ausgegeben werden. Wenn in Ihrer Dev Tools-Konsole ein Fehler auftritt, müssen Sie diesen zuerst beheben.


Als mögliche Lösung haben Sie diese Bedingung, die Sie daran hindert, Ajax im Front-End der Website auszuführen:

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' );
}

Die Funktion is_admin() weist WordPress an, only diese Aktionen immer im Admin-Bereich/Dashboard auszuführen, damit im Front-End Ihrer Website nie etwas passiert. Entfernen Sie die Bedingung und fügen Sie die Aktion wie folgt hinzu:

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