Ajax upload de imagem com media_handle_upload e form.js

Eu quero ter o upload da imagem AJAX no formulário de front-end e não consigo descobrir onde ele corre mal.

Formulário HTML para upload de imagens

<input type='hidden' value='' name='_nonce' />
jQuery(document).ready( function($) { //http://wordpress.stackexchange.com/questions/72406/set-featured-image-front-frontend-form var ajaxurl = ''; var options = { target: '#output1', // target element(s) to be updated with server response beforeSubmit: showRequest, // pre-submit callback success: showResponse, // post-submit callback url: ajaxurl // since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php }; $('#thumbnail').change(function(){ // bind form using 'ajaxForm' $('#thumbnail_upload').ajaxSubmit(options); }); function showRequest(formData, jqForm, options) { //do extra stuff before submit like disable the submit button $('#output1').html('Uploading...'); } function showResponse(responseText, statusText, xhr, $form) { //do extra stuff after submit } });

Aqui está o PHP para lidar com upload de imagens com media_handle_upload

 // Enqueue jquery form function load_jform() { wp_enqueue_script( 'jquery-form' ); } add_action( 'wp_enqueue_scripts', 'load_jform' ); //hook the Ajax call //for logged-in users add_action('wp_ajax_my_upload_action', 'my_ajax_upload'); function my_ajax_upload(){ //simple Security check check_ajax_referer('upload_thumb'); //get POST data $post_id = 0; //require the needed files require_once(ABSPATH . "wp-admin" . '/includes/image.php'); require_once(ABSPATH . "wp-admin" . '/includes/file.php'); require_once(ABSPATH . "wp-admin" . '/includes/media.php'); //then loop over the files that were sent and store them using media_handle_upload(); var_dump($_FILES); if ($_FILES) { foreach ($_FILES as $file => $array) { if ($_FILES[$file]['error'] !== UPLOAD_ERR_OK) { echo "upload error : " . $_FILES[$file]['error']; die(); } $attach_id = media_handle_upload( $file, $post_id ); } } //and if you want to set that image as Post then use: update_post_meta($post_id,'_thumbnail_id',$attach_id); echo "uploaded the new Thumbnail"; die(); } 

Na verdade, não preciso de um loop foreach para carregar imagens múltiplas, porque isso só será uma imagem em destaque, mas não conseguimos descobrir como mudá-la corretamente.

Com este código, me dão apenas 0 em #output1 e não tenho certeza de onde ou como depurar isso.

Solutions Collecting From Web of "Ajax upload de imagem com media_handle_upload e form.js"

Da minha experiência, se uma chamada ajax no wordpress retornar 0, significa que ajax não consegue encontrar a function php relacionada, então verifique três vezes que a function que você aponte para ‘add_action’, o nome da function e a ação do seu formulário coincidem .

Normalmente, incluo um atributo de ação nas opções do ajaxSubmit, talvez resolva seu problema. Basta adicionar ação: ‘my_ajax_upload’ para a matriz de opções.

Desde que você tenha Se você obtiver -1 em vez de 0, isso significa que a verificação de não-falha (check_ajax_referer ($ nonce)) falhou.