{"id":27879,"date":"2021-05-27T14:30:00","date_gmt":"2021-05-27T11:30:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=27879"},"modified":"2021-10-18T04:08:52","modified_gmt":"2021-10-18T01:08:52","slug":"como-integrar-o-upload-de-arquivos-ajax-no-wordpress","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pt-pt\/como-integrar-o-upload-de-arquivos-ajax-no-wordpress\/","title":{"rendered":"Como integrar o upload de arquivos Ajax no WordPress"},"content":{"rendered":"<p>Voc\u00ea deseja implementar o upload de arquivo Ajax no WordPress? \u00c0s vezes, voc\u00ea precisa executar uma tarefa que carregue um arquivo por meio do Ajax. Neste artigo, estudamos como fazer upload de arquivo Ajax no WordPress.<\/p>\n<p>Um benef\u00edcio de fazer upload de arquivos por meio do Ajax \u00e9 reduzir a carga do servidor. Sua p\u00e1gina n\u00e3o ser\u00e1 recarregada, o que economiza chamadas extras para um servidor e, consequentemente, a largura de banda. Ele tamb\u00e9m adiciona uma melhor experi\u00eancia do usu\u00e1rio ao seu site.<\/p>\n<p>Normalmente, ao trabalhar com Ajax, damos uma chamada para URL e passamos dados para ou obtemos dados da URL especificada. O WordPress tem uma maneira ligeiramente diferente de realizar opera\u00e7\u00f5es Ajax. No WordPress, fazemos uma chamada para a URL, mas o c\u00f3digo que escrevemos para processar os dados ir\u00e1 para a fun\u00e7\u00e3o. Ent\u00e3o, essa fun\u00e7\u00e3o precisa ser mapeada com o valor de &#8216;a\u00e7\u00e3o&#8217; passado nos par\u00e2metros Ajax. Confuso? Vamos ver em a\u00e7\u00e3o.<\/p>\n<h3>Upload de arquivo Ajax no WordPress<\/h3>\n<p>Para come\u00e7ar, voc\u00ea precisa de um formul\u00e1rio com a entrada do arquivo. Damos uma chamada Ajax na sele\u00e7\u00e3o de um arquivo e carregamos o arquivo para um servidor. Para criar um formul\u00e1rio, adicione o HTML abaixo ao seu modelo de p\u00e1gina.<\/p>\n<pre><code>&lt;form class=\"fileUpload\" enctype=\"multipart\/form-data\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;div class=\"form-group\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;label&gt;&lt;?php _e('Choose File:'); ?&gt;&lt;\/label&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input type=\"file\" id=\"file\" accept=\"image\/*\" \/&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<p>Em seguida, voc\u00ea deve dar uma chamada Ajax no evento de mudan\u00e7a de entrada do arquivo. Como estamos passando o conte\u00fado de um arquivo para o Ajax, seu c\u00f3digo ser\u00e1 um pouco diferente em compara\u00e7\u00e3o com o c\u00f3digo jQuery regular do <a href=\"https:\/\/codex.wordpress.org\/AJAX_in_Plugins\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WordPress Ajax<\/a>.<\/p>\n<h4>Incluir arquivo JS no WordPress<\/h4>\n<p>Vamos primeiro incluir o arquivo JS em um ambiente WordPress. Este c\u00f3digo ir\u00e1 dentro do <code>functions.php<\/code>arquivo ou em um plugin espec\u00edfico do site.<\/p>\n<pre><code>function aw_scripts() {\n\u00a0\u00a0\u00a0\u00a0\/\/ Register the script\n\u00a0\u00a0\u00a0\u00a0wp_register_script( 'aw-custom', get_stylesheet_directory_uri(). '\/js\/custom.js', array('jquery'), '1.1', true );\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/\/ Localize the script with new data\n\u00a0\u00a0\u00a0\u00a0$script_data_array = array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'ajaxurl' =&gt; admin_url( 'admin-ajax.php' ),\n\u00a0\u00a0\u00a0\u00a0);\n\u00a0\u00a0\u00a0\u00a0wp_localize_script( 'aw-custom', 'aw', $script_data_array );\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/\/ Enqueued script with localized data.\n\u00a0\u00a0\u00a0\u00a0wp_enqueue_script( 'aw-custom' );\n}\n\u00a0\nadd_action( 'wp_enqueue_scripts', 'aw_scripts' );<\/code><\/pre>\n<h4>Carregar arquivo no servidor<\/h4>\n<p>Voc\u00ea est\u00e1 pronto com o formul\u00e1rio e o arquivo JS. Agora, adicione o c\u00f3digo abaixo no arquivo JS que enviar\u00e1 o conte\u00fado do arquivo para o lado do servidor por meio do Ajax.<\/p>\n<p><strong>custom.js<\/strong><\/p>\n<pre><code>jQuery(function($) {\n\u00a0\u00a0\u00a0\u00a0$('body').on('change', '#file', function() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this = $(this);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0file_data = $(this).prop('files')[0];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0form_data = new FormData();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0form_data.append('file', file_data);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0form_data.append('action', 'file_upload');\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$.ajax({\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0url: aw.ajaxurl,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0type: 'POST',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0contentType: false,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0processData: false,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0data: form_data,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0success: function (response) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this.val('');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0alert('File uploaded successfully.');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0});\n\u00a0\u00a0\u00a0\u00a0});\u00a0\u00a0\u00a0 \n});<\/code><\/pre>\n<p>A parte importante do c\u00f3digo acima \u00e9 que anexamos uma a\u00e7\u00e3o &#8216;file_upload&#8217; ao objeto form_data. Usaremos esta a\u00e7\u00e3o &#8216;file_upload&#8217; para prosseguir com os dados do formul\u00e1rio.<\/p>\n<p>No <code>functions.php<\/code>, mapeie esta a\u00e7\u00e3o com o Ajax da seguinte maneira:<\/p>\n<pre><code>add_action( 'wp_ajax_file_upload', 'file_upload_callback' );\nadd_action( 'wp_ajax_nopriv_file_upload', 'file_upload_callback' );<\/code><\/pre>\n<p>Se voc\u00ea est\u00e1 escrevendo este c\u00f3digo em um plugin, n\u00e3o precisa escrever uma segunda instru\u00e7\u00e3o. Aqui, ao &#8216;wp ajax_&#8217; e &#8216;wp_ajax_nopriv &#8216;, anexamos o valor da a\u00e7\u00e3o que \u00e9 &#8216;file_upload&#8217;. O segundo par\u00e2metro &#8216;file_upload_callback&#8217; \u00e9 o m\u00e9todo de retorno de chamada que ter\u00e1 o c\u00f3digo real para upload de arquivo.<\/p>\n<pre><code>function file_upload_callback() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$arr_img_ext = array('image\/png', 'image\/jpeg', 'image\/jpg', 'image\/gif');\n\u00a0\u00a0\u00a0\u00a0if (in_array($_FILES['file']['type'], $arr_img_ext)) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$upload = wp_upload_bits($_FILES[\"file\"][\"name\"], null, file_get_contents($_FILES[\"file\"][\"tmp_name\"]));\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/$upload['url'] will gives you uploaded file path\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0wp_die();\n}<\/code><\/pre>\n<p>Estou usando um m\u00e9todo <a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/wp_upload_bits\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_upload_bits<\/a> para enviar arquivos em um servidor. Este m\u00e9todo armazena diretamente um arquivo dentro do diret\u00f3rio wp-content \/ uploads.<\/p>\n<p>V\u00e1 em frente e tente fazer o upload de um arquivo. Seu arquivo deve ser carregado na pasta wp-content \/ uploads \/. Observe que voc\u00ea encontrar\u00e1 seu arquivo na pasta do m\u00eas atual do diret\u00f3rio de uploads.<\/p>\n<h3>Fa\u00e7a upload de v\u00e1rios arquivos usando Ajax no WordPress<\/h3>\n<p>At\u00e9 agora, discutimos o upload de um \u00fanico arquivo por meio do Ajax. Pode haver uma situa\u00e7\u00e3o em que voc\u00ea deseja fazer upload de v\u00e1rios arquivos usando Ajax. Vamos ver como conseguir isso.<\/p>\n<p>Para enviar v\u00e1rios arquivos, voc\u00ea precisa fazer pequenas altera\u00e7\u00f5es no c\u00f3digo HTML, JS e PHP acima.<\/p>\n<p>HTML fornece um atributo &#8216;m\u00faltiplo&#8217; que permite ao usu\u00e1rio selecionar v\u00e1rios arquivos na entrada do arquivo.<\/p>\n<p><strong>C\u00f3digo HTML<\/strong><\/p>\n<pre><code>&lt;form class=\"fileUpload\" enctype=\"multipart\/form-data\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;div class=\"form-group\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;label&gt;&lt;?php _e('Choose File:'); ?&gt;&lt;\/label&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input type=\"file\" id=\"file\" accept=\"image\/*\" multiple \/&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<p>Como um usu\u00e1rio vai selecionar v\u00e1rios arquivos, precisamos alterar o c\u00f3digo JavaScript que percorre cada arquivo e constr\u00f3i um array a partir dele.<\/p>\n<p><strong>custom.js<\/strong><\/p>\n<pre><code>jQuery(function($) {\n\u00a0\u00a0\u00a0\u00a0$('body').on('change', '#file', function() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this = $(this);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0file_obj = $this.prop('files');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0form_data = new FormData();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0for(i=0; i&lt;file_obj.length; i++) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0form_data.append('file[]', file_obj[i]);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0form_data.append('action', 'file_upload');\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$.ajax({\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0url: aw.ajaxurl,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0type: 'POST',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0contentType: false,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0processData: false,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0data: form_data,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0success: function (response) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this.val('');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0alert('File(s) uploaded successfully.');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0});\n\u00a0\u00a0\u00a0\u00a0});\n});<\/code><\/pre>\n<p>E, finalmente, na fun\u00e7\u00e3o de retorno de chamada do Ajax, percorremos a matriz de arquivos e carregamos cada arquivo em um servidor.<\/p>\n<pre><code>function file_upload_callback() {\n\u00a0\u00a0\u00a0\u00a0$arr_img_ext = array('image\/png', 'image\/jpeg', 'image\/jpg', 'image\/gif');\n\u00a0\n\u00a0\u00a0\u00a0\u00a0for($i = 0; $i &lt; count($_FILES['file']['name']); $i++) {\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (in_array($_FILES['file']['type'][$i], $arr_img_ext)) {\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$upload = wp_upload_bits($_FILES['file']['name'][$i], null, file_get_contents($_FILES['file']['tmp_name'][$i]));\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/$upload['url'] will gives you uploaded file path\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0wp_die();\n}<\/code><\/pre>\n<p>Espero que voc\u00ea conhe\u00e7a o upload de arquivos Ajax no WordPress. Eu gostaria de ouvir seus pensamentos e sugest\u00f5es na se\u00e7\u00e3o de coment\u00e1rios abaixo.<\/p>\n<h4>Artigos relacionados<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/como-carregar-posts-wordpress-com-ajax\/\" title=\"Como carregar uma postagem do WordPress com AJAX\">Como carregar uma postagem do WordPress com AJAX<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/como-usar-jquery-ajax-no-wordpress\/\" title=\"Como usar jQuery Ajax no WordPress\">Como usar jQuery Ajax no WordPress<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/arrastar-e-soltar-o-upload-de-arquivos-usando-javascript-e-php\/\" title=\"Arrastar e soltar o upload de arquivos usando JavaScript e PHP\">Arrastar e soltar o upload de arquivos usando JavaScript e PHP<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Voc\u00ea est\u00e1 procurando integrar o upload de arquivo Ajax no WordPress? Neste artigo, dou um exemplo e explico como fazer o upload do arquivo usando Ajax em<\/p>\n","protected":false},"author":1,"featured_media":21665,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[613],"tags":[848],"class_list":["post-27879","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized-9","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/27879","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/comments?post=27879"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/27879\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media\/21665"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media?parent=27879"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/categories?post=27879"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/tags?post=27879"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}