{"id":7580,"date":"2021-11-23T14:22:43","date_gmt":"2021-11-23T13:22:43","guid":{"rendered":"https:\/\/dhosting.pl\/pomoc\/?p=7580"},"modified":"2022-09-14T12:35:03","modified_gmt":"2022-09-14T10:35:03","slug":"vue-js-jako-wtyczka-do-wordpressa","status":"publish","type":"post","link":"https:\/\/dhosting.pl\/pomoc\/vue-js-jako-wtyczka-do-wordpressa\/","title":{"rendered":"Vue.js jako wtyczka do WordPressa"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"photo-border aligncenter wp-image-7611 size-full\" src=\"https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/vue_baner.png\" alt=\"vue.js jako wtyczka do WordPressa\" width=\"945\" height=\"400\" title=\"\" srcset=\"https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/vue_baner.png 945w, https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/vue_baner-300x127.png 300w, https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/vue_baner-768x325.png 768w\" sizes=\"auto, (max-width: 945px) 100vw, 945px\" \/><\/p>\n<p>Vue.js to biblioteka JavaScript, kt\u00f3ra umo\u017cliwia software developerom tworzy\u0107 proste aplikacje. Nie jest to jedyne tego typu narz\u0119dzie na rynku, jednak to w\u0142a\u015bnie Vue.js z ka\u017cdym rokiem zyskuje coraz wi\u0119ksz\u0105 popularno\u015b\u0107. Wszystko to za spraw\u0105 szybko\u015bci pisania kodu, prostej sk\u0142adni oraz skalowalno\u015bci aplikacji. Warto zatem przyjrze\u0107 si\u0119 mo\u017cliwo\u015bciom zastosowania tego frameworku. Jedno z nich opisa\u0142em dla Ciebie w tym poradniku. Vue.js jako wtyczka do WordPressa to \u0142atwe do wdro\u017cenia rozwi\u0105zanie, kt\u00f3re bez problemu mo\u017cesz zastosowa\u0107 w kolejnych projektach. Mam nadziej\u0119, \u017ce artyku\u0142 zach\u0119ci Ci\u0119 do dalszego zg\u0142\u0119biania tej tematyki.<\/p>\n<p>Vue.js zawiera stopniowo adaptowaln\u0105 architektur\u0119, kt\u00f3ra koncentruje si\u0119 na renderowaniu deklaratywnym i tworzeniu komponent\u00f3w. Ide\u0105 stoj\u0105c\u0105 za Vue.js jest ponowne wykorzystanie przygotowanych wcze\u015bniej komponent\u00f3w. Podstawowa biblioteka koncentruje si\u0119 tylko na warstwie widoku. Zaawansowane funkcje wymagane w przypadku z\u0142o\u017conych aplikacji (takich jak routing, zarz\u0105dzanie stanem i narz\u0119dzia do budowania) s\u0105 oferowane za po\u015brednictwem oficjalnie utrzymywanych bibliotek pomocniczych, np. <a target=\"_blank\" href=\"https:\/\/bootstrap-vue.org\" rel=\"noopener\">BootstrapVue<\/a>.<\/p>\n<p>Vue.js pozwala na rozszerzenie HTML o atrybuty HTML zwane dyrektywami. Dyrektywy oferuj\u0105 dodatkow\u0105 funkcjonalno\u015b\u0107 dla HTML i s\u0105 dost\u0119pne jako dyrektywy wbudowane lub zdefiniowane przez u\u017cytkownika.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Dlaczego_warto_wybrac_Vuejs_jako_wtyczke_do_WordPressa\"><\/span>Dlaczego warto wybra\u0107 Vue.js jako wtyczk\u0119 do WordPressa?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Vue.js to \u015bwietne rozwi\u0105zanie dla WordPressa g\u0142\u00f3wnie za spraw\u0105 \u0142atwo\u015bci integracji i mo\u017cliwo\u015bci prostej adaptacji z dowolnym API, a dzi\u0119ki wyborze takiej konfiguracji masz mo\u017cliwo\u015b\u0107 rozbudowy strony o dodatkow\u0105 funkcjonalno\u015b\u0107.<\/p>\n<div id=\"dhost-2992689999\" class=\"dhost-inpost dhost-entity-placement\"><a href=\"https:\/\/dhosting.pl\/opieka-stron.html?utm_source=pomoc&utm_medium=artykul&utm_campaign=pomoc\" target=\"_blank\">\r\n\t<img decoding=\"async\" src=\"https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2025\/01\/baner-opieka.png\" alt=\"opieka stron www\">\r\n<\/a>\r\n<br \/>\r\n<br \/><\/div><h2><span class=\"ez-toc-section\" id=\"Do_kogo_kierowany_jest_ten_poradnik\"><\/span>Do kogo kierowany jest ten poradnik?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Poradnik kierowany jest do os\u00f3b, kt\u00f3re chcia\u0142yby rozwin\u0105\u0107 mo\u017cliwo\u015bci WordPressa przy pomocy frameworku Vue.js oraz posiadaj\u0105 podstawowe do\u015bwiadczenie w pracy z frameworkami Javascript: Vue.js. Przydatna mo\u017ce okaza\u0107 si\u0119 r\u00f3wnie\u017c wiedza na temat REST API, Vue CLI i klient\u00f3w FTP, np. darmowym FileZilla.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Czego_potrzebujesz\"><\/span>Czego potrzebujesz?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li>Strony WWW opartej o WordPressa, na kt\u00f3r\u0105 b\u0119dziesz implementowa\u0107 Vue.js.<\/li>\n<li>Zainstalowanych wtyczek Advanced Custom Fields, Custom Post UI, ACF to Rest API.<\/li>\n<li>Zainstalowanego Node.js, Vue CLI oraz terminala.<\/li>\n<li>Klienta FTP, np. FileZilla i dost\u0119pu do serwera FTP.<\/li>\n<li>Edytora kodu, np. Visual Studio Code.<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"Czego_sie_nauczysz\"><\/span>Czego si\u0119 nauczysz?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Dzi\u0119ki niniejszemu poradnikowi nauczysz si\u0119, jak stworzy\u0107 aplikacj\u0119 Vue.js, a nast\u0119pnie zaimplementowa\u0107 j\u0105 jako wtyczk\u0119 do swojej strony opartej o WordPressa. Na potrzeb\u0119 poradnika przygotowa\u0142em nast\u0119puj\u0105ce zadanie: wykonasz wtyczk\u0119 do WordPressa zbudowan\u0105 przy pomocy Vue.js, kt\u00f3ra korzysta z WordPress Rest API do wy\u015bwietlania dziennego menu (7 najbli\u017cszych dni) dla restauracji.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Krok_1_%E2%80%93_Konfiguracja_CPT_UI\"><\/span>Krok 1 &#8211; Konfiguracja CPT UI<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Wejd\u017a do panelu administracyjnego swojego WordPressa i otw\u00f3rz wtyczk\u0119 <em><strong>\u201eCPT UI\u201d<\/strong><\/em> a nast\u0119pnie <em><strong>\u201eAdd New Post Type\u201d<\/strong><\/em> i wpisz podane poni\u017cej warto\u015bci:<\/p>\n<p><a href=\"https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/CPT-UI-Add-post.png\"><img loading=\"lazy\" decoding=\"async\" class=\"photo-border aligncenter wp-image-7582\" src=\"https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/CPT-UI-Add-post-300x126.png\" alt=\"Dodawanie nowego postu w CPT UI\" width=\"800\" height=\"336\" title=\"\" srcset=\"https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/CPT-UI-Add-post-300x126.png 300w, https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/CPT-UI-Add-post-1024x431.png 1024w, https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/CPT-UI-Add-post-768x323.png 768w, https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/CPT-UI-Add-post.png 1201w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/a><\/p>\n<p>Poni\u017cej znajduje si\u0119 sekcja dodatkowych ustawie\u0144. O ile sekcja <strong><em>\u201eAdditional Labels\u201d<\/em><\/strong> jest opcjonalna, o tyle w sekcji ustawie\u0144 upewnij si\u0119, \u017ce w polu<strong><em> \u201eShow in REST API\u201d<\/em><\/strong> wybrana jest warto\u015b\u0107 <strong><em>\u201eTrue\u201d<\/em><\/strong>. Nast\u0119pnie zejd\u017a do kolejnego pola tekstowego <em><strong>\u201eRest API base slug\u201d<\/strong><\/em> i wpisz tutaj cz\u0119\u015b\u0107 URL, do kt\u00f3rego b\u0119dziesz odwo\u0142ywa\u0107 si\u0119 w p\u00f3\u017aniejszym etapie.<\/p>\n<p><a href=\"https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/CPT-UI-Settings.png\"><img loading=\"lazy\" decoding=\"async\" class=\"photo-border aligncenter wp-image-7583\" src=\"https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/CPT-UI-Settings-300x187.png\" alt=\"szczeg\u00f3\u0142owe ustawienia CPT UI\" width=\"800\" height=\"499\" title=\"\" srcset=\"https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/CPT-UI-Settings-300x187.png 300w, https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/CPT-UI-Settings-1024x638.png 1024w, https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/CPT-UI-Settings-768x479.png 768w, https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/CPT-UI-Settings.png 1035w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/a><\/p>\n<p>Kolejno, poni\u017cej znajduje si\u0119 mo\u017cliwo\u015b\u0107 wybrania ikony jako <strong>Menu Icon<\/strong> &#8211; mo\u017cesz wybra\u0107 wygl\u0105d ikony na stronie <a target=\"_blank\" href=\"https:\/\/developer.wordpress.org\/resource\/dashicons\/#admin-generic\" rel=\"noopener\">WordPressa<\/a>. Ikona wy\u015bwietla\u0107 si\u0119 b\u0119dzie w sekcji w panelu administratora. Nast\u0119pnie kliknij poni\u017cej przycisk <strong><em>\u201eSave Post Type\u201d<\/em><\/strong> i przejd\u017a do <em><strong>\u201ePola w\u0142asne\u201d<\/strong><\/em>, kt\u00f3re przychodz\u0105 do Ciebie wraz z wtyczk\u0105 Advanced Custom Fields.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Krok_2_%E2%80%93_Konfiguracja_Advanced_Custom_Fields\"><\/span>Krok 2 &#8211; Konfiguracja Advanced Custom Fields<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Czas zaj\u0105\u0107 si\u0119 opcjami wtyczki. Po wej\u015bciu w <em><strong>\u201ePola w\u0142asne\u201d<\/strong><\/em> w Advanced Custom Fields w panelu administratora WordPressa dodaj now\u0105 grup\u0119 p\u00f3l:<\/p>\n<p><a href=\"https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/ACF-new-type.png\"><img loading=\"lazy\" decoding=\"async\" class=\"photo-border aligncenter wp-image-7585\" src=\"https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/ACF-new-type-300x110.png\" alt=\"dodawanie nowej grupy p\u00f3l\" width=\"800\" height=\"294\" title=\"\" srcset=\"https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/ACF-new-type-300x110.png 300w, https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/ACF-new-type-1024x376.png 1024w, https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/ACF-new-type-768x282.png 768w, https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/ACF-new-type.png 1379w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/a><\/p>\n<p>W tytule nowych grup p\u00f3l dodaj <span class=\"code-short-format\">Oferty dnia<\/span> (oczywi\u015bcie mo\u017cesz wpisa\u0107 dowoln\u0105 nazw\u0119 grupy, ale ta wydaje si\u0119 odpowiednia dla Twojego zadania). Nast\u0119pnie dodaj nowe pola (przy tworzeniu p\u00f3l zwr\u00f3\u0107 uwag\u0119 na nazw\u0119 pola &#8211; do tej warto\u015bci b\u0119dziesz odwo\u0142ywa\u0107 si\u0119 podczas tworzenia aplikacji). Na potrzeby tworzonej aplikacji b\u0119d\u0105 Ci potrzebne nast\u0119puj\u0105ce pola:<\/p>\n<ul>\n<li><span class=\"code-short-format\">Data<\/span> (pole typu data z niestandardowym zwracanym formatem \u201eY,m,d\u201d) &#8211; pami\u0119taj o zachowaniu zwracanego formatu. W stworzonej p\u00f3\u017aniej aplikacji Vue.js b\u0119dziesz z niego korzysta\u0107 do formatowania daty i sprawdzenia wa\u017cno\u015bci oferty,<\/li>\n<li><span class=\"code-short-format\">Pierwsze danie<\/span> (domy\u015blne pole typu tekst),<\/li>\n<li><span class=\"code-short-format\">Drugie danie<\/span> (domy\u015blne pole typu tekst),<\/li>\n<li><span class=\"code-short-format\">Cena zestawu<\/span> (domy\u015blne pole typu liczba),<\/li>\n<\/ul>\n<p>Po dodaniu powy\u017cszych p\u00f3l przejd\u017a poni\u017cej na sekcj\u0119 <strong><em>\u201eLokacja&#8221;<\/em><\/strong> i ustaw nast\u0119puj\u0105cy warunek:<\/p>\n<p><a href=\"https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/ACF-Warunek.png\"><img loading=\"lazy\" decoding=\"async\" class=\"photo-border aligncenter wp-image-7586\" src=\"https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/ACF-Warunek-300x46.png\" alt=\"Warunek sekcji Lokacja w ACF\" width=\"800\" height=\"123\" title=\"\" srcset=\"https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/ACF-Warunek-300x46.png 300w, https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/ACF-Warunek-768x118.png 768w, https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/ACF-Warunek.png 956w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/a><\/p>\n<p>Pozosta\u0142e elementy ustawie\u0144 pozostaw domy\u015blnie. Nast\u0119pnie przejd\u017a do dodanej pozycji w menu administratora i dodaj pierwsz\u0105 ofert\u0119 dnia. Ja zdecydowa\u0142em si\u0119 na zup\u0119 pomidorow\u0105 oraz kotleta schabowego z frytkami i zestawem sur\u00f3wek, ale licz\u0119 na Twoj\u0105 kreatywno\u015b\u0107.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Krok_3_%E2%80%93_utworzenie_nowego_projektu_za_pomoca_Vue_CLI\"><\/span>Krok 3 &#8211; utworzenie nowego projektu za pomoc\u0105 Vue CLI<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Aby utworzy\u0107 nowy projekt za pomoc\u0105 Vue CLI, wpisz w terminalu nast\u0119puj\u0105ce polecenie:<\/p>\n<pre><code class=\"language-bash\" data-line=\"\">vue create nazwa_projektu<\/code><\/pre>\n<p>Zwr\u00f3\u0107 uwag\u0119, \u017ce <span class=\"code-short-format\">nazwa_projektu<\/span> b\u0119dzie nazw\u0105 aplikacji oraz nowo utworzonego folderu.<\/p>\n<p>Nast\u0119pnie wybierz za pomoc\u0105 strza\u0142ek<span class=\"code-short-format\"> [Vue 2] babel, eslint<\/span>. <span class=\"code-short-format\">Babel<\/span> to \u0142a\u0144cuch narz\u0119dzi, u\u017cywany do konwersji kodu ECMAScript 2015 (ES6) na wstecznie kompatybiln\u0105 wersj\u0119 JavaScript w obecnych i starszych przegl\u0105darkach lub \u015brodowiskach. <span class=\"code-short-format\">ESLint<\/span> analizuje Tw\u00f3j kod, aby uczyni\u0107 go bardziej sp\u00f3jnym i unikn\u0105\u0107 b\u0142\u0119d\u00f3w. List\u0119 zasad dotycz\u0105cych kod\u00f3w weryfikowanych przez <span class=\"code-short-format\">ESLint<\/span> znajdziesz <a href=\"https:\/\/eslint.org\/docs\/rules\/\" target=\"_blank\" rel=\"noopener\">tutaj<\/a>.<\/p>\n<p><a href=\"https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/vue2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"photo-border aligncenter wp-image-7625\" src=\"https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/vue2.png\" alt=\"widok wyboru ustawie\u0144\" width=\"400\" height=\"111\" title=\"\" srcset=\"https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/vue2.png 379w, https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/vue2-300x83.png 300w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><\/a><\/p>\n<p>Po prawid\u0142owym zako\u0144czeniu instalacji otrzymasz nast\u0119puj\u0105cy komunikat:<\/p>\n<p><a href=\"https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/prawidlowa_instalacja.png\"><img loading=\"lazy\" decoding=\"async\" class=\"photo-border aligncenter wp-image-7626\" src=\"https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/prawidlowa_instalacja.png\" alt=\"komunikat po prawid\u0142owej instalacji\" width=\"400\" height=\"107\" title=\"\" srcset=\"https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/prawidlowa_instalacja.png 396w, https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/prawidlowa_instalacja-300x80.png 300w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><\/a><\/p>\n<p>Przejd\u017a do wskazanego przez Vue CLI folderu (pami\u0119taj, \u017ce folder utworzony zostanie domy\u015blnie w lokalizacji, w kt\u00f3rej aktualnie znajdujesz si\u0119 w terminalu).<\/p>\n<div class=\"success-alert-format\">\n<p>Wykorzystanie Vue.js jako wtyczki do WordPressa to ciekawe rozwi\u0105zanie do zastosowania przy kolejnych nowych projektach. Pozwoli Ci ono znacz\u0105co przyspieszy\u0107 prac\u0119 &#8211; gotow\u0105 wtyczk\u0119 mo\u017cesz z \u0142atwo\u015bci\u0105 przenosi\u0107 pomi\u0119dzy instancjami tego CMSa.<\/p>\n<p>W dhosting.pl lubimy rozwi\u0105zania, kt\u00f3re przyspieszaj\u0105 i u\u0142atwiaj\u0105 prac\u0119, dlatego te\u017c stworzyli\u015bmy <strong>Elastyczny Web Hosting<\/strong> &#8211; unikatow\u0105 us\u0142ug\u0119, dzi\u0119ki kt\u00f3rej nie musisz po\u015bwi\u0119ca\u0107 czasu na monitorowanie zasob\u00f3w niezb\u0119dnych dla Twoich stron WWW. \u00a0Otrzymasz wysokie parametry gwarantowane, czyli <strong>1 GHz CPU, 2 GB RAM oraz 50 GB NVMe,<\/strong> a je\u015bli w kt\u00f3rymkolwiek momencie Twoje witryny b\u0119d\u0105 potrzebowa\u0107 wi\u0119cej, opcja elastycznego skalowania automatycznie, bez konieczno\u015bci kontaktu z supportem, przydzieli Ci dodatkowe zasoby. Zapewni\u0105 one p\u0142ynno\u015b\u0107 w dzia\u0142aniu wszystkich Twoich stron niezale\u017cnie od ich obci\u0105\u017cenia.<\/p>\n<p><a target=\"_blank\" href=\"https:\/\/dhosting.pl\/pp-fach\" rel=\"noopener\"><strong>WYPR\u00d3BUJ HOSTING<\/strong><\/a><\/p>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"Krok_4_%E2%80%93_tworzenie_nowych_komponentow_i_srodowiska_produkcyjnego\"><\/span>Krok 4 &#8211; tworzenie nowych komponent\u00f3w i \u015brodowiska produkcyjnego<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Usu\u0144 domy\u015blnie utworzony komponent <span class=\"code-short-format\">HelloWorld.vue<\/span> oraz usu\u0144 jego importowanie w pliku <span class=\"code-short-format\">App.vue<\/span> wraz z jego wskazaniem w sekcji komponent\u00f3w. Nast\u0119pnie w folderze g\u0142\u00f3wnym swojej aplikacji utw\u00f3rz plik o nazwie <span class=\"code-short-format\">vue.config.js<\/span> i wklej do niego nast\u0119puj\u0105cy kod:<\/p>\n<pre class=\"line-numbers\"><code class=\"language-javascript\" data-line=\"\">module.exports = {\n    filenameHashing: false,\n}\n<\/code><\/pre>\n<p>Dzi\u0119ki niemu podczas kompilowania aplikacji zniknie hash w nazwie plik\u00f3w, kt\u00f3re zostan\u0105 skompilowane. Hashowanie plik\u00f3w nie jest potrzebne do Twojego projektu, poniewa\u017c nie b\u0119dziesz korzysta\u0107 z domy\u015blnie tworzonego przy kompilacji pliku <span class=\"code-short-format\">index.html<\/span>. Wi\u0119cej mo\u017cliwo\u015bci konfiguracyjnych znajdziesz w oficjalnej dokumentacji <a href=\"https:\/\/cli.vuejs.org\/config\/#assetsdir\" target=\"_blank\" rel=\"noopener\">Vue CLI<\/a>.<\/p>\n<p>Na tym etapie utw\u00f3rz w folderze komponent\u00f3w dwa pliki: <span class=\"code-short-format\">OfferBox.vue<\/span> oraz <span class=\"code-short-format\">SingleOffer.vue<\/span>. Twoja struktura w folderze g\u0142\u00f3wnym powinna wygl\u0105da\u0107 w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<p><a href=\"https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/struktura-vue.png\"><img loading=\"lazy\" decoding=\"async\" class=\"photo-border aligncenter wp-image-7588 size-full\" src=\"https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/struktura-vue.png\" alt=\"wygl\u0105d struktury folderu Vue.js\" width=\"295\" height=\"312\" title=\"\" srcset=\"https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/struktura-vue.png 295w, https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/struktura-vue-284x300.png 284w\" sizes=\"auto, (max-width: 295px) 100vw, 295px\" \/><\/a><\/p>\n<p>Teraz dodaj poni\u017cszy kod do komponentu g\u0142\u00f3wnego <span class=\"code-short-format\">App.vue<\/span>. Szablon pliku <span class=\"code-short-format\">.vue<\/span> sk\u0142ada si\u0119 z trzech element\u00f3w:<\/p>\n<ul>\n<li>sekcji <span class=\"code-short-format\">template<\/span>, w kt\u00f3rej znajduje si\u0119 Tw\u00f3j kod HTML oraz inne komponenty <span class=\"code-short-format\">.vue<\/span>,<\/li>\n<li>sekcji <span class=\"code-short-format\">script<\/span>\u00a0zawieraj\u0105cej kod JavaScript,<\/li>\n<li>sekcji <span class=\"code-short-format\">style<\/span>, w kt\u00f3rej znajduje si\u0119 kod CSS. (Sekcja <span class=\"code-short-format\">style<\/span> mo\u017ce zawiera\u0107 atrybut <span class=\"code-short-format\">scoped<\/span>, aby ograniczy\u0107 wy\u015bwietlanie styl\u00f3w tylko do tego komponentu.)<\/li>\n<\/ul>\n<pre class=\"line-numbers\"><code class=\"language-markup\" data-line=\"\">&lt;template&gt;\n  &lt;div id=&quot;app&quot;&gt;\n    &lt;offer-box \/&gt;\n  &lt;\/div&gt;\n&lt;\/template&gt;\n<\/code><code class=\"language-javascript\" data-line=\"\">\n&lt;script&gt;\nimport OfferBox from &#039;.\/components\/OfferBox.vue&#039;\n \nexport default {\n  name: &#039;App&#039;,\n  components: {\n    OfferBox\n  }\n}\n&lt;\/script&gt;\n&lt;!-- &lt;style scoped&gt; aby ograniczy\u0107 wy\u015bwietlanie CSS tylko dla tego komponentu --&gt;\n<\/code><code class=\"language-css\" data-line=\"\">\n&lt;style&gt;\n@import url(&#039;https:\/\/fonts.googleapis.com\/css2?family=Roboto:wght@300;400;500&amp;display=swap&#039;);\n#app {\n  font-family: Roboto;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  font-size: 16px;\n  margin-top: 60px;\n}\nh3{\n  margin: 5px 0;\n}\np {\n    margin: 5px 0;\n}\n \n&lt;\/style&gt;<\/code><\/pre>\n<p>Dodaj nast\u0119puj\u0105cy kod do komponentu <span class=\"code-short-format\">OfferBox.vue<\/span>:<\/p>\n<ul>\n<li>w sekcji <span class=\"code-short-format\">template<\/span>\u00a0dodaj <span class=\"code-short-format\">div<\/span> o klasie <span class=\"code-short-format\">container<\/span>, w kt\u00f3rym wy\u015bwietlana b\u0119dzie karta z ofert\u0105, b\u0105d\u017a informacj\u0105 o oczekiwaniu na powr\u00f3t danych z zapytania dokonanego po zamontowaniu komponentu,<\/li>\n<li>do drugiego <span class=\"code-short-format\">diva<\/span> dodaj wcze\u015bniej utworzony komponent <span class=\"code-short-format\">single-offer<\/span>\u00a0oraz wykonaj iteracj\u0119 pobranych danych za pomoc\u0105 dyrektywy <span class=\"code-short-format\">v-for<\/span> (konieczne jest przy tej dyrektywie dodanie parametru <span class=\"code-short-format\">key<\/span>). Komponent <span class=\"code-short-format\">OfferBox<\/span> przekazuje dane do komponentu <span class=\"code-short-format\">single-offer<\/span>.<\/li>\n<\/ul>\n<div class=\"info-alert-format\">\n<p>Pami\u0119taj, aby zmieni\u0107 w metodzie\u00a0<span class=\"code-short-format\">fetchOffer()<\/span> link na swoj\u0105 domen\u0119 z zainstalowanym WordPressem.<\/p>\n<\/div>\n<pre class=\"line-numbers\"><code class=\"language-markup\" data-line=\"\">&lt;template&gt;\n  &lt;div class=&quot;container&quot; v-if=&quot;menu&quot;&gt;\n    &lt;div class=&quot;card&quot; v-if=&quot;isLoading&quot;&gt;Pobieram ofert\u0119&lt;\/div&gt;\n    &lt;div class=&quot;card&quot; v-for=&quot;item in checkValidDate&quot; :key=&quot;item.id&quot;&gt;\n      &lt;single-offer\n        :date=&quot;item.acf.date&quot;\n        :soup=&quot;item.acf.soup&quot;\n        :main=&quot;item.acf.main&quot;\n        :price=&quot;item.acf.price&quot;\n      \/&gt;\n    &lt;\/div&gt;\n  &lt;\/div&gt;\n&lt;\/template&gt;\n<\/code><code class=\"language-javascript\" data-line=\"\">\n&lt;script&gt;\nimport SingleOffer from &quot;.\/SingleOffer.vue&quot;;\nexport default {\n  components: { SingleOffer },\n  data() {\n    return {\n      menu: null,\n      isLoading: false,\n    };\n  },\n    \/\/ wywo\u0142anie funkcji fetchOffer() po zamontowaniu komponentu\n  mounted() {\n    this.fetchOffer();\n  },\n  methods: {\n    \/\/ pobranie danych z WordPress Rest API z u\u017cyciem ACF\n    async fetchOffer() {\n      this.isLoading = true;\n      await fetch(&quot;https:\/\/twoja-domena.pl\/wp-json\/wp\/v2\/oferty?_fields=acf&quot;)\n        .then((response) =&gt; response.json())\n        .then((data) =&gt; (this.menu = data));\n      this.isLoading = false;\n    },\n    \/\/ funkcja na potrzeb\u0119 sprawdzenia r\u00f3\u017cnicy w dniach\n    checkDayDiffrence(futureDate){\n        let currentDay = new Date()\n        let futureDay = new Date(futureDate)\n        const oneDay = 1000*60*60*24\n        const diffrence = futureDay.getTime()- currentDay.getTime();\n        const diffrenceDays = Math.round(diffrence \/ oneDay);\n        return diffrenceDays\n    }\n  },\n    computed: {\n\n      \/\/ sprawdzamy, czy r\u00f3znica mi\u0119dzy datami znajduje si\u0119 w zakresie od 7 dni do -1 (zastosowanie -1 pozwala na wy\u015bwietlanie oferty z bie\u017c\u0105cego dnia)\n        checkValidDate(){\n            let filteredMenu = this.menu.filter(item =&gt; this.checkDayDiffrence(item.acf.date) &lt;= 7 &amp;&amp; this.checkDayDiffrence(item.acf.date) &gt;= -1 )\n            return  filteredMenu\n        }\n    }\n};\n&lt;\/script&gt;\n<\/code><code class=\"language-css\" data-line=\"\">\n&lt;style&gt;\n.container {\n  display: flex;\n  align-content: center;\n  align-items: center;\n  flex-direction: column;\n  justify-content: space-around;\n}\n.card {\n  color: inherit;\n  padding: 20px;\n  text-align: center;\n  border-radius: 10px;\n  margin-bottom: 2em;\n \n}\n&lt;\/style&gt;<\/code><\/pre>\n<p>Dodaj nast\u0119puj\u0105cy kod do komponentu <span class=\"code-short-format\">SingleOffer.vue<\/span>:<br \/>\n(Komponent <span class=\"code-short-format\">SingleOffer.vue<\/span> otrzymuje dane od nadrz\u0119dnego komponentu oraz zwraca dat\u0119 poprawn\u0105 do wy\u015bwietlenia.)<\/p>\n<pre class=\"line-numbers\"><code class=\"language-markup\" data-line=\"\">&lt;template&gt;\n  &lt;div&gt;\n    &lt;div class=&quot;header&quot;&gt;Oferta na dzie\u0144: {{parseDate.day }}.{{parseDate.month + 1}}.{{parseDate.year}}&lt;\/div&gt;\n    &lt;div class=&quot;single-box&quot; &gt;\n      &lt;h3 class=&quot;title&quot;&gt;Zupa&lt;\/h3&gt;\n      &lt;p&gt;{{ soup }}&lt;\/p&gt;\n      &lt;h3 class=&quot;title&quot;&gt;Drugie danie&lt;\/h3&gt;\n      {{ main }}\n      &lt;h3 class=&quot;title&quot;&gt;Cena&lt;\/h3&gt;\n      &lt;p class=&quot;price&quot;&gt;{{ price }} PLN&lt;\/p&gt;\n    &lt;\/div&gt;\n  &lt;\/div&gt;\n&lt;\/template&gt;\n<\/code><code class=\"language-javascript\" data-line=\"\">\n&lt;script&gt;\nexport default {\n  props: {\n      soup: String,\n      main: String,\n      price: String,\n      date: String,\n  },\n  computed: {\n    \/\/ zwraca poprawnie sformatowan\u0105 date do wy\u015bwietlenia - funkcja natywna \tgetMonth() zwraca warto\u015b\u0107 od 0 do 11 st\u0105d przy wy\u015bwietlaniu dodaj do      zwr\u00f3conej przez funkcj\u0119 warto\u015bci 1\n    parseDate(){\n      let currentDay = new Date(this.date)\n      return {day: currentDay.getDate(), month: currentDay.getMonth(), year: currentDay.getFullYear()}\n    }\n  }\n};\n&lt;\/script&gt;\n<\/code><code class=\"language-css\" data-line=\"\">\n&lt;style scoped&gt;\n.single-box {\n  width: 400px;\n  height: 350px;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: space-around;\n  font-size: 1.2em;\n}\n.header {\n  font-size: 1.5em;\n  background-color: #c94141;\n  color: aliceblue;\n  padding: 20px;\n  margin-bottom: 20px;\n}\n.price {\n  font-size: 1.5em;\n}\n&lt;\/style&gt;<\/code><\/pre>\n<p>Na tym etapie uruchom aplikacj\u0119 i sprawd\u017a po\u0142\u0105czenie z WordPress Rest API. W terminalu wpisz polecenie:<\/p>\n<pre><code class=\"language-bash\" data-line=\"\">npm run serve<\/code><\/pre>\n<p>Za pomoc\u0105 tej komendy uruchomisz lokalny serwer deweloperski. B\u0119dzie on dost\u0119pny pod wskazanym na terminalu adresem. Otw\u00f3rz jeden z dw\u00f3ch wy\u015bwietlanych adres\u00f3w za pomoc\u0105 <span class=\"code-short-format\">crtl + lpm<\/span> i przejd\u017a do przegl\u0105darki.<\/p>\n<div class=\"info-alert-format\">\n<p>Je\u017celi dodana oferta znajduje si\u0119 na stronie, to znaczy, \u017ce wszystko dzia\u0142a prawid\u0142owo i mo\u017cesz przej\u015b\u0107 do kompilacji swojej aplikacji i przygotowania jej jako wtyczki do importu na serwer.<\/p>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"Krok_5_%E2%80%93_Kompilacja_aplikacji_i_tworzenie_wtyczki_Vuejs\"><\/span>Krok 5 &#8211; Kompilacja aplikacji i tworzenie wtyczki Vue.js<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Do kompilacji u\u017cyj polecenia w terminalu:<\/p>\n<pre><code class=\"language-bash\" data-line=\"\">npm run build<\/code><\/pre>\n<p>Pliki umieszczone zostan\u0105 domy\u015blnie w folderze <span class=\"code-short-format\">dist<\/span> &#8211; w g\u0142\u00f3wnym folderze aplikacji. W g\u0142\u00f3wnej lokalizacji aplikacji utw\u00f3rz nowy folder i nazwij go <span class=\"code-short-format\">rest-auto-menu<\/span>. W \u015brodku utw\u00f3rz plik <span class=\"code-short-format\">.php<\/span>, kt\u00f3ry b\u0119dzie to\u017csamy z nazw\u0105 wtyczki &#8211; <span class=\"code-short-format\">rest-auto-menu.php<\/span>. Do pliku dodaj nast\u0119puj\u0105cy kod:<\/p>\n<pre class=\"line-numbers\"><code class=\"language-php\" data-line=\"\">&lt;?php\n\/**\n * Plugin Name:         Nazwa wtyczki\n * Plugin URI:          https:\/\/dhosting.pl\n * Description:         Automatyczne menu dla restauracji\n * Version:             1.0.0\n * Author:              Jan Kowalski\n * Author URI:          https:\/\/dhosting.pl\n * \n * Pami\u0119taj, aby zmieni\u0107 nazw\u0119 folderu, w kt\u00f3rym znajduje si\u0119 ten plik, i tego pliku, tak aby odpowiada\u0142a nazwie Twojej wtyczki. Nazwy musz\u0105 by\u0107 takie same, aby WordPress wiedzia\u0142, gdzie szuka\u0107.\n *\/\n \nfunction load_vuescripts() {\n    wp_enqueue_style( &#039;vue_wp_styles&#039;, plugin_dir_url( __FILE__ ) . &#039;dist\/css\/app.css&#039; );\n    wp_register_script( &#039;vue_wp_compiled&#039;, plugin_dir_url( __FILE__ ) . &#039;dist\/js\/app.js&#039;, true );\n    wp_register_script( &#039;vue_wp_dependencies&#039;, plugin_dir_url( __FILE__ ) . &#039;dist\/js\/chunk-vendors.js&#039;, true );\n}\n \nadd_action( &#039;wp_enqueue_scripts&#039;, &#039;load_vuescripts&#039; );\n \nfunction attach_vue() {\n    wp_enqueue_script( &#039;vue_wp_compiled&#039; );\n    wp_enqueue_script( &#039;vue_wp_dependencies&#039; );\n \n    return &quot;&lt;div id=&#039;app&#039;&gt;&lt;\/div&gt;&quot;;\n}\n \nadd_shortcode( &#039;rest_auto_menu&#039;, &#039;attach_vue&#039; );\n?&gt;\n<\/code><\/pre>\n<p>Zwr\u00f3\u0107 uwag\u0119 na ostatni\u0105 funkcj\u0119 <span class=\"code-short-format\">add_shortcode()<\/span>. Pierwsza cz\u0119\u015b\u0107 funkcji odpowiada za nazw\u0119 skr\u00f3tu, dzi\u0119ki kt\u00f3remu umie\u015bcisz aplikacj\u0119 w wybranym przez siebie miejscu na WordPressie. W powy\u017cszym przyk\u0142adzie b\u0119dzie to <span class=\"code-short-format\">[vue_automenu]<\/span>\u00a0(nazwa ta mo\u017ce by\u0107 dowolna). Wi\u0119cej o tej funkcji przeczytasz <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_shortcode\/\" target=\"_blank\" rel=\"noopener\">tutaj<\/a>. Nast\u0119pnie do wcze\u015bniej utworzonego folderu <span class=\"code-short-format\">rest-auto-menu<\/span> dodaj foldery <span class=\"code-short-format\">dist<\/span>. Struktura folderu powinna wygl\u0105da\u0107 w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<p><a href=\"https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/struktura-folderow-plugin.png\"><img loading=\"lazy\" decoding=\"async\" class=\"photo-border aligncenter wp-image-7620 size-full\" src=\"https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/struktura-folderow-plugin.png\" alt=\"wygl\u0105d struktury folder\u00f3w\" width=\"272\" height=\"60\" title=\"\"><\/a><\/p>\n<p>Ca\u0142y folder <span class=\"code-short-format\">rest-auto-menu<\/span> wgraj za pomoc\u0105, np. FileZilla do folderu <span class=\"code-short-format\">wp-content\/plugins<\/span>, nast\u0119pnie aktywuj swoj\u0105 wtyczk\u0119. Kiedy wtyczk\u0119 masz ju\u017c gotow\u0105, mo\u017cesz doda\u0107 j\u0105 za pomoc\u0105, np. Gutenberga:<\/p>\n<p><a href=\"https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/shortcode-guttenberg.png\"><img loading=\"lazy\" decoding=\"async\" class=\"photo-border aligncenter wp-image-7680\" src=\"https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/shortcode-guttenberg-300x60.png\" alt=\"kod guttenberg\" width=\"800\" height=\"160\" title=\"\" srcset=\"https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/shortcode-guttenberg-300x60.png 300w, https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/shortcode-guttenberg-768x154.png 768w, https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/shortcode-guttenberg.png 853w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/a><\/p>\n<p>W efekcie Twoja aplikacja jest ju\u017c dost\u0119pna po publikacji danej strony zawieraj\u0105cej skr\u00f3t do Twojej wtyczki. Vue.js jako wtyczka do WordPressa daje Ci mo\u017cliwo\u015b\u0107 korzystania z nowoczesnych rozwi\u0105za\u0144 w ekosystemie WordPressa, kt\u00f3re mog\u0105 znacz\u0105co przyspieszy\u0107 prac\u0119 nad Twoim projektem. Dodatkowo w \u0142atwy spos\u00f3b mo\u017cesz przenie\u015b\u0107 gotow\u0105 wtyczk\u0119 pomi\u0119dzy instancjami WordPressa, b\u0105d\u017a wykorzysta\u0107 kod w przysz\u0142o\u015bci, przy innym projekcie.<\/p>\n<p>Aby zachowa\u0107 sprawiedliwo\u015b\u0107, musz\u0119 wspomnie\u0107 o kilku wadach tego rozwi\u0105zania. Po ka\u017cdej aktualizacji kodu wtyczki nale\u017cy wykona\u0107 polecenie <span class=\"code-short-format\">build<\/span>, a nast\u0119pnie przenie\u015b\u0107 foldery zawieraj\u0105ce pliki <span class=\"code-short-format\">.css<\/span> i <span class=\"code-short-format\">.js<\/span> za pomoc\u0105 klienta FTP na serwer. Dodatkowo ka\u017cda aktualizacja zwi\u0105zana b\u0119dzie z konieczno\u015bci\u0105 wyczyszczenia plik\u00f3w cache, o ile takie cache plik\u00f3w dost\u0119pne jest na stronie.<\/p>\n<p>Oto, jak wygl\u0105da efekt Twojej pracy:<\/p>\n<p><a href=\"https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/prawidlowe-wyswietlanie.png\"><img loading=\"lazy\" decoding=\"async\" class=\"photo-border aligncenter wp-image-7623\" src=\"https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/prawidlowe-wyswietlanie.png\" alt=\"wygl\u0105d menu stworzonego przez Vue.js jako wtyczk\u0119\u00a0do WordPressa\" width=\"400\" height=\"475\" title=\"\" srcset=\"https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/prawidlowe-wyswietlanie.png 402w, https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/prawidlowe-wyswietlanie-253x300.png 253w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><\/a><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Podsumowanie\"><\/span>Podsumowanie<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Po\u0142\u0105czenie Vue.js z WordPressem poszerza dost\u0119pne mo\u017cliwo\u015bci i u\u0142atwia pisanie zaawansowanych aplikacji, kt\u00f3re z \u0142atwo\u015bci\u0105 mo\u017cesz wykorzysta\u0107 na swojej stronie opartej o WordPressa. Pami\u0119taj, \u017ce blog zaprezentowany w powy\u017cszym poradniku dla cel\u00f3w edukacyjnych zawiera tylko jedn\u0105 mo\u017cliwo\u015b\u0107 wprowadzenia funkcjonalno\u015bci Vue.js do WordPressa. Utworzon\u0105 w tym poradniku wtyczk\u0119 mo\u017cna z \u0142atwo\u015bci\u0105 rozwin\u0105\u0107, np. doda\u0107 funkcjonalno\u015b\u0107 wy\u015bwietlania oferty dnia w prz\u00f3d wed\u0142ug utworzonego nowego pola Advanced Custom Fields. Dzi\u0119ki Vue.js mo\u017cesz wykorzysta\u0107 na swojej stronie wcze\u015bniej zbudowane komponenty, zaoszcz\u0119dzaj\u0105c przy tym czas na zbudowanie takiej samej funkcjonalno\u015bci w j\u0119zyku PHP.<\/p>\n<div class=\"author-format\">\n<div class=\"author-format-photo\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 2px solid #e8e8e8;\" src=\"https:\/\/dhosting.pl\/pomoc\/wp-content\/uploads\/2021\/10\/mikolaj-grendzisz-kopia.jpg\" alt=\"Roman Lorent\" width=\"200\" height=\"200\" title=\"\"><\/div>\n<div class=\"author-format-desc\">\n<h3><span style=\"font-weight: 400;\">Autor artyku\u0142u:<\/span> Miko\u0142aj Grendzisz<\/h3>\n<p>Vue.js Developer. Tw\u00f3rca stron internetowych oraz aplikacji internetowych opartych o Vue.js &#8211; aktualnie do rozlicze\u0144 kierowc\u00f3w taxi na popularnych aplikacjach. Dodatkowo od wielu lat tworzy i modernizuje strony oparte o WordPressa. Ponadto ch\u0119tnie dzieli si\u0119 swoj\u0105 wiedz\u0105 na tematycznych forach.<\/p>\n<ul class=\"author-icons\">\n<li class=\"author-social\"><a target=\"_blank\" href=\"https:\/\/rightcloud.pl\" rel=\"noopener\"><i class=\"fas fa-link\"><\/i> Strona WWW<\/a><\/li>\n<\/ul>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Vue.js to biblioteka JavaScript, kt\u00f3ra umo\u017cliwia software developerom tworzy\u0107 proste aplikacje. Nie jest to jedyne tego typu narz\u0119dzie na rynku, jednak to w\u0142a\u015bnie Vue.js z ka\u017cdym rokiem zyskuje coraz wi\u0119ksz\u0105 popularno\u015b\u0107. Wszystko to za spraw\u0105 szybko\u015bci pisania kodu, prostej sk\u0142adni oraz skalowalno\u015bci aplikacji. Warto zatem przyjrze\u0107 si\u0119 mo\u017cliwo\u015bciom zastosowania tego frameworku. Jedno z nich opisa\u0142em [&hellip;]<\/p>\n","protected":false},"author":19,"featured_media":10957,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[1971,1970,631],"class_list":["post-7580","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-fachowe-poradniki","tag-api","tag-vue-js","tag-wordpress"],"_links":{"self":[{"href":"https:\/\/dhosting.pl\/pomoc\/wp-json\/wp\/v2\/posts\/7580","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dhosting.pl\/pomoc\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dhosting.pl\/pomoc\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dhosting.pl\/pomoc\/wp-json\/wp\/v2\/users\/19"}],"replies":[{"embeddable":true,"href":"https:\/\/dhosting.pl\/pomoc\/wp-json\/wp\/v2\/comments?post=7580"}],"version-history":[{"count":0,"href":"https:\/\/dhosting.pl\/pomoc\/wp-json\/wp\/v2\/posts\/7580\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dhosting.pl\/pomoc\/wp-json\/wp\/v2\/media\/10957"}],"wp:attachment":[{"href":"https:\/\/dhosting.pl\/pomoc\/wp-json\/wp\/v2\/media?parent=7580"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dhosting.pl\/pomoc\/wp-json\/wp\/v2\/categories?post=7580"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dhosting.pl\/pomoc\/wp-json\/wp\/v2\/tags?post=7580"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}