admin-ajax.php devuelve 0. ¿Cómo lo depuro y lo arreglo?

4

Intentando usar admin-ajax.php para cargar la imagen desde el formulario de front-end. Sigo obteniendo 0 con el siguiente código que tengo y no estoy seguro de cómo depurar esto o dónde sale mal.

Tengo un archivo de entrada HTML

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

y script localizado para solicitud AJAX

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

y función de PHP

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

Recibo un mensaje de éxito AJAX con la respuesta 0 . Image Uploaded! 0

Actualizar Actualicé mi código de trabajo.

    
pregunta Ohsik 24.11.2015 - 20:00

1 respuesta

5

Habilitar depuración

WordPress tiene constantes definidas en wp-config.php donde puede imprimir errores en la pantalla y registrarlos en un archivo separado ubicado /wp-content/debug.log . Se parece a esto:

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

Luego, puede imprimir su propia información en el registro de depuración en un punto específico y averiguar exactamente dónde (o si la función está siendo golpeada en absoluto) la función está fallando:

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

Comprobar la Consola de herramientas de desarrollo

Casi todos los navegadores en este día moderno tienen Herramientas de desarrollador y un Console donde se emiten los errores de Javascrpit. Si ve un error en la consola de Dev Tools, tendrá que solucionarlo primero y principalmente.

En cuanto a una posible solución, tiene este condicional que le impide ejecutar ajax en la parte delantera del sitio 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 función is_admin() le dice a WordPress que solo ejecute esas acciones siempre que esté en el Administrador Panel / Panel de control para que nunca veas que algo sucede en la parte delantera de tu sitio web. Intente eliminar el condicional y solo agregue la acción como está:

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' );
    
respondido por el Howdy_McGee 24.11.2015 - 20:21

Lea otras preguntas en las etiquetas