Jak pracować z blokami WordPress poza Gutenbergiem za pomocą Node.js

Opublikowany: 2020-12-09

Edytor bloków WordPress zmienia wszystko, co dotyczy tego, jak tworzymy treści za pomocą tej platformy. Jest wiele nowości, które wprowadzają nowe wersje WordPressa w zakresie bloków, a przed nami jeszcze długa droga.

Z tego powodu programiści, którzy pracują z WordPress jako platformą programistyczną, powinni czuć się coraz bardziej komfortowo pracując z blokami. Jednak przejście z PHP na technologie oparte na JavaScript może być trudne.

W każdym razie musisz zaktualizować swoje umiejętności i nie bać się nowego stosu programistycznego WordPress. Im szybciej się z tym pogodzimy, tym więcej będziemy mieli możliwości wprowadzania innowacji.

Praca z blokami spoza WordPressa może być frustrująca, jeśli nie wiesz jak.
Praca z blokami spoza WordPressa może być frustrująca, jeśli nie wiesz, jak to zrobić.

Dzisiaj zobaczymy, jak możemy pracować z blokami Gutenberga bez konieczności przebywania w edytorze WordPress. Czemu? Z kilku powodów…

Pierwszym i najbardziej oczywistym jest to, że możemy. Od pewnego czasu definicja bloków rdzenia w edytorze Gutenberga jest dostępna jako osobny pakiet kodu. Oznacza to, że możemy z nich korzystać poza WordPressem dzięki menedżerowi pakietów NPM.

Ponadto istnieje cała seria funkcji do zarządzania blokami i pracy z nimi. I są również zawarte we własnym opakowaniu. Dlatego, jeśli chcemy pracować ze standardowymi blokami WordPress, musimy tylko zaimportować te dwa pakiety jako zależności w naszym projekcie.

Aby to osiągnąć, musimy utworzyć folder dla naszego projektu, uruchomić npm init , aby utworzyć plik package.json z danymi projektu, a następnie uruchomić następujące polecenie, aby zainstalować te dwie zależności:

 npm install @wordpress/block-library @wordpress/blocks

Następnym krokiem jest utworzenie index.js z kodem, który chcemy wykonać. Ten kod jest napisany w Node.js, wariancie JavaScript, który działa na serwerach. W dzisiejszym przykładzie zawartość index.js może wyglądać następująco:

 const { registerCoreBlocks } = require( '@wordpress/block-library' ); const { createBlock, serialize } = require( '@wordpress/blocks' ); registerCoreBlocks(); const myBlock = createBlock( 'core/paragraph', { content: 'This is a block created programmatically', } ); const serializedBlock = serialize( myBlock ); console.log( serializedBlock );

Pierwsze dwie instrukcje, które pojawiają się w poprzednim kodzie, są instrukcjami require do zaimportowania zależności. Jak powiedziałem wcześniej, chcemy zaimportować standardową definicję bloku WordPress. Robimy to za pomocą require('@wordpress/block-library') . Ponieważ chcemy tylko zaimportować funkcję registerCoreBlocks z tego pakietu, po lewej stronie symbolu równości dokonujemy destrukturyzacji tej funkcji.

W ten sam sposób importujemy pakiet @wordpress/blocks jako zależność. Ten pakiet to ten, który posiada funkcje do pracy z blokami. W pakiecie zdefiniowano wiele funkcji (masz je tutaj), ale w tym przykładzie chcemy tylko, aby createBlock utworzył nowe bloki i serialize je, aby przekonwertować je na ciągi, które możemy zapisać w treści postu WordPress.

Teraz, gdy mamy zaimportowane zależności, wywołujemy funkcję registerCoreBlocks , która ładuje definicję standardowych typów bloków WordPressa, abyśmy mogli z nich korzystać. Od tego momentu możemy tworzyć bloki, jak widać po wywołaniu funkcji createBlock przekazując jako parametr nazwę typu bloku, który chcemy utworzyć oraz obiekt z jego atrybutami.

W poprzednim przykładzie stworzymy blok akapitu, więc przekazujemy nazwę 'core/paragraph' a wewnątrz obiektu atrybutów przekazujemy treść akapitu, który ma zostać utworzony, jako ciąg znaków wewnątrz klucza content .

Na koniec wywołujemy funkcję serialize , przekazując jej właśnie utworzony blok. W rezultacie otrzymamy ciąg, który możemy wypisać za pomocą funkcji console.log .

Teraz możemy uruchomić powyższy kod wpisując node index.js w terminalu. Jeśli to zrobimy, dzieje się co następuje:

Nieudane wyjście po uruchomieniu kodu Node.js do pracy z blokami.
Nieudane wyjście po uruchomieniu kodu Node.js do pracy z blokami.

Wystąpił błąd w wykonaniu! Powodem jest to, że musimy mieć dostępną zmienną window , która nie jest zdefiniowana. Ale czym jest ta zmienna i dlaczego jej potrzebujemy?

Window to obiekt JavaScript zdefiniowany przez przeglądarkę i reprezentujący samo okno przeglądarki. Ponieważ wykonujemy kod w naszym terminalu (lub jeśli był uruchomiony produkcyjnie, na serwerze), nie mamy przeglądarki ze wspomnianą zmienną. Czy to oznacza, że ​​nie możemy używać bloków WordPress poza przeglądarką? Oczywiście, że nie!

Node.js ma kilka pakietów, które pozwalają nam symulować, że uruchamiamy nasz kod w środowisku przeglądarki. W tym przypadku użyjemy pakietu browser-env. Po prostu musimy go zainstalować tak jak wcześniej z pakietami WordPress:

 npm install browser-env

W naszym index.js musimy dodać nowe require importu zależności browser-env . Ale także musimy „naprawić” obiekt window , ponieważ nie jest on dostarczany z wymaganą metodą matchMedia . Jeśli skopiujesz poniższy kod i dodasz go na początku index.js , problem zostanie rozwiązany:

 // Setup environment to simulate a browser // (mandatory to register Gutenberg blocks). require( 'browser-env' )(); window.matchMedia = window.matchMedia || function () { return { matches: false, addListener: function () {}, removeListener: function () {}, }; };

Teraz możesz ponownie uruchomić kod, a zobaczysz, że nie zawodzi i zwraca tekstową reprezentację bloku akapitu, który właśnie utworzyliśmy za pomocą funkcji createBlock :

 $ node index.js <!-- wp:paragraph --> <p>This is a block created programmatically</p> <!-- /wp:paragraph -->

Masz cały kod w tym repozytorium GitHub. Możliwości pracy z blokami spoza edytora są ogromne. Możesz tworzyć bloki, klonować je, przekształcać w blok innego typu i wiele więcej.

Możliwość pracy z blokami poza edytorem WordPress pozwala nam manipulować zawartością naszego WordPressa i pracować z nimi z dowolnego miejsca. To otwiera przed programistami świat ogromnych możliwości, które dopiero zaczynamy odkrywać.

My w Nelio już korzystamy z tych możliwości. Wkrótce uruchomimy nową usługę, która, miejmy nadzieję, uznasz za bardzo interesującą. Czekajcie na wiadomości, które wydamy w nadchodzących tygodniach?.

Polecane zdjęcie Kelly Sikkema na Unsplash .