{"id":28517,"date":"2021-05-27T14:35:00","date_gmt":"2021-05-27T11:35:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=28517"},"modified":"2021-10-18T03:41:32","modified_gmt":"2021-10-18T00:41:32","slug":"jak-zintegrowac-przesylanie-plikow-ajax-z-wordpress","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pl\/jak-zintegrowac-przesylanie-plikow-ajax-z-wordpress\/","title":{"rendered":"Jak zintegrowa\u0107 przesy\u0142anie plik\u00f3w Ajax z WordPress"},"content":{"rendered":"<p>Czy chcesz zaimplementowa\u0107 przesy\u0142anie plik\u00f3w Ajax w WordPress? Czasami musisz wykona\u0107 zadanie, kt\u00f3re przesy\u0142a plik przez Ajax. W tym artykule dowiemy si\u0119, jak przesy\u0142a\u0107 pliki Ajax w WordPress.<\/p>\n<p>Zalet\u0105 przesy\u0142ania plik\u00f3w przez Ajax jest zmniejszenie obci\u0105\u017cenia serwera. Twoja strona nie prze\u0142aduje si\u0119, co oszcz\u0119dza dodatkowe po\u0142\u0105czenia z serwerem, a tym samym przepustowo\u015b\u0107. Zapewnia r\u00f3wnie\u017c lepsze wra\u017cenia u\u017cytkownika w Twojej witrynie.<\/p>\n<p>Zwykle podczas pracy z Ajaxem wywo\u0142ujemy adres URL i przekazujemy dane do lub pobieramy dane z okre\u015blonego adresu URL. WordPress ma nieco inny spos\u00f3b wykonywania operacji Ajax. W WordPressie wywo\u0142ujemy adres URL, ale kod, kt\u00f3ry piszemy, aby przetworzy\u0107 dane, trafi do funkcji. Nast\u0119pnie ta funkcja musi mapowa\u0107 z warto\u015bci\u0105 'action&#8217; przekazan\u0105 w parametrach Ajax. Zmieszany? Zobaczmy to w akcji.<\/p>\n<h3>Przesy\u0142anie plik\u00f3w Ajax w WordPress<\/h3>\n<p>Aby rozpocz\u0105\u0107, potrzebujesz formularza z danymi wej\u015bciowymi pliku. Wykonujemy wywo\u0142anie Ajax przy wyborze pliku i przesy\u0142amy plik na serwer. Aby utworzy\u0107 formularz, dodaj poni\u017cszy kod HTML do szablonu strony.<\/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>Nast\u0119pnie musisz wywo\u0142a\u0107 Ajax na zdarzeniu zmiany wej\u015bcia pliku. Poniewa\u017c przekazujemy zawarto\u015b\u0107 pliku do Ajax, Tw\u00f3j kod b\u0119dzie nieco inny ni\u017c zwyk\u0142y kod jQuery w <a href=\"https:\/\/codex.wordpress.org\/AJAX_in_Plugins\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WordPress Ajax<\/a>.<\/p>\n<h4>Do\u0142\u0105cz plik JS do WordPress<\/h4>\n<p>Najpierw do\u0142\u0105czmy plik JS do \u015brodowiska WordPress. Ten kod zostanie umieszczony w <code>functions.php<\/code>pliku lub we wtyczce specyficznej dla witryny.<\/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>Prze\u015blij plik na serwer<\/h4>\n<p>Jeste\u015b gotowy z formularzem i plikiem JS. Teraz dodaj poni\u017cszy kod w pliku JS, kt\u00f3ry wy\u015ble \u200b\u200bzawarto\u015b\u0107 pliku po stronie serwera przez 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>Wa\u017cn\u0105 cz\u0119\u015bci\u0105 powy\u017cszego kodu jest dodanie akcji 'file_upload&#8217; do obiektu form_data. U\u017cyjemy tej akcji 'file_upload&#8217;, aby kontynuowa\u0107 z danymi formularza.<\/p>\n<p>W <code>functions.php<\/code>, zmapuj t\u0119 akcj\u0119 z Ajaxem w nast\u0119puj\u0105cy spos\u00f3b:<\/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>Je\u015bli piszesz ten kod we wtyczce, nie musisz pisa\u0107 drugiej instrukcji. Tutaj do 'wp ajax_&#8217; i 'wp_ajax_nopriv &#8217; do\u0142\u0105czamy warto\u015b\u0107 akcji, kt\u00f3r\u0105 jest 'file_upload&#8217;. Drugi parametr 'file_upload_callback&#8217; to metoda wywo\u0142ania zwrotnego, kt\u00f3ra b\u0119dzie zawiera\u0142a rzeczywisty kod do przesy\u0142ania plik\u00f3w.<\/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>U\u017cywam <a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/wp_upload_bits\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_upload_bits<\/a> metod\u0119 przesy\u0142ania pliku na serwerze. Ta metoda bezpo\u015brednio przechowuje plik w katalogu wp-content\/uploads.<\/p>\n<p>\u015amia\u0142o i spr\u00f3buj przes\u0142a\u0107 plik. Tw\u00f3j plik powinien zosta\u0107 przes\u0142any do folderu wp-content\/uploads\/. Pami\u0119taj, \u017ce plik znajdzie si\u0119 w folderze bie\u017c\u0105cego miesi\u0105ca w katalogu przesy\u0142ania.<\/p>\n<h3>Prze\u015blij wiele plik\u00f3w za pomoc\u0105 Ajax w WordPress<\/h3>\n<p>Do tej pory omawiali\u015bmy przesy\u0142anie pojedynczego pliku przez Ajax. Mo\u017ce zaistnie\u0107 sytuacja, gdy chcesz przes\u0142a\u0107 wiele plik\u00f3w za pomoc\u0105 Ajax. Zobaczmy, jak to osi\u0105gn\u0105\u0107.<\/p>\n<p>Aby przes\u0142a\u0107 wiele plik\u00f3w, musisz wprowadzi\u0107 niewielkie zmiany w powy\u017cszym kodzie HTML, JS i PHP.<\/p>\n<p>HTML zapewnia atrybut \u201ewiele&quot;, kt\u00f3ry pozwala u\u017cytkownikowi wybra\u0107 wiele plik\u00f3w podczas wprowadzania pliku.<\/p>\n<p><strong>Kod 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>Jako u\u017cytkownik zamierzaj\u0105cy wybra\u0107 wiele plik\u00f3w, musimy zmieni\u0107 kod JavaScript, kt\u00f3ry przechodzi przez ka\u017cdy plik i buduje z niego tablic\u0119.<\/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>I na koniec, w funkcji zwrotnej Ajax, przechodzimy przez tablic\u0119 plik\u00f3w i przesy\u0142amy ka\u017cdy plik na serwer.<\/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>Mam nadziej\u0119, \u017ce dowiedzia\u0142e\u015b si\u0119 o przesy\u0142aniu plik\u00f3w Ajax do WordPressa. Chcia\u0142bym us\u0142ysze\u0107 wasze przemy\u015blenia i sugestie w sekcji komentarzy poni\u017cej.<\/p>\n<h4>Powi\u0105zane artyku\u0142y<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/jak-zaladowac-posty-wordpress-za-pomoca-ajax\/\" title=\"Jak za\u0142adowa\u0107 post WordPress za pomoc\u0105 AJAX\">Jak za\u0142adowa\u0107 post WordPress za pomoc\u0105 AJAX<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/jak-korzystac-z-jquery-ajax-w-wordpress\/\" title=\"Jak korzysta\u0107 z jQuery Ajax w WordPress\">Jak korzysta\u0107 z jQuery Ajax w WordPress<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/przeciagnij-i-upusc-przesylanie-plikow-za-pomoca-javascript-i-php\/\" title=\"Przeci\u0105gnij i upu\u015b\u0107 przesy\u0142anie plik\u00f3w za pomoc\u0105 JavaScript i PHP\">Przeci\u0105gnij i upu\u015b\u0107 przesy\u0142anie plik\u00f3w za pomoc\u0105 JavaScript i PHP<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Czy chcesz zintegrowa\u0107 przesy\u0142anie plik\u00f3w Ajax z WordPress? W tym artykule bior\u0119 przyk\u0142ad i wyja\u015bniam, jak przes\u0142a\u0107 plik za pomoc\u0105 Ajax in<\/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":[612],"tags":[847],"class_list":["post-28517","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized-8","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/28517","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/comments?post=28517"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/28517\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media\/21665"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media?parent=28517"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/categories?post=28517"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/tags?post=28517"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}