Wprowadzenie do WP-API

143
Wprowadzenie do WP-API Tomasz Dziuda

Transcript of Wprowadzenie do WP-API

Page 1: Wprowadzenie do WP-API

Wprowadzenie do WP-APITomasz Dziuda

Page 2: Wprowadzenie do WP-API

Tomasz Dziuda

Lead Developer @

@dziudek

http://dziudek.pl

http://dziudek.github.io/wp-links

http://dziudek.github.io/dev-links

Page 3: Wprowadzenie do WP-API

Disclaimer

Będę mówił o WP-API w wersji v.2.* obecnie w wersji beta, ale to najbliższa przyszłość WP-API

Page 4: Wprowadzenie do WP-API

Idea

Page 5: Wprowadzenie do WP-API

Źródło: https://wordpress.org/plugins/rest-api/

Page 6: Wprowadzenie do WP-API

+WP-API

Page 7: Wprowadzenie do WP-API

+WP-API

GET/POST/PUT/DELETEOpcjonalnie: {“json”: “data”}

Page 8: Wprowadzenie do WP-API

GET/POST/PUT/DELETE

{“json”: “data”}

+WP-API

Opcjonalnie: {“json”: “data”}

Page 9: Wprowadzenie do WP-API

{“json”: “data”}

wp_ajax_{action} wp_ajax_nopriv_{action}

+WP-API

GET/POST/PUT/DELETEOpcjonalnie: {“json”: “data”}

Page 10: Wprowadzenie do WP-API

{“json”: “data”}

wp_ajax_{action} wp_ajax_nopriv_{action}

+WP-API

GET/POST/PUT/DELETEOpcjonalnie: {“json”: “data”}

Page 11: Wprowadzenie do WP-API

JSON jako nośnik danych

Page 12: Wprowadzenie do WP-API

Wtyczka JSON Viewer: https://chrome.google.com/webstore/detail/json-viewer/gbmdgpbipfallnflgajpaliibnhdgobh/

Page 13: Wprowadzenie do WP-API

Struktura URLi

wp-json/

Page 14: Wprowadzenie do WP-API

Struktura URLi

wp-json/<namespace>

wp/v2

Page 15: Wprowadzenie do WP-API

Struktura URLi

wp-json/<namespace>/<zasób>

wp/v2 posts

Page 16: Wprowadzenie do WP-API

Struktura URLi

wp-json/<namespace>/<zasób>/<id_lub_filtr>

wp/v2 posts 128

Page 17: Wprowadzenie do WP-API

Struktura URLi

wp-json/<namespace>/<zasób>/<id_lub_filtr>/<dodatkowe_zasoby>

wp/v2 posts 128 terms/tag

Page 18: Wprowadzenie do WP-API

! " { }Wymaga autoryzacji Nie wymaga autoryzacji Wymaga przesłania danych JSON

Page 19: Wprowadzenie do WP-API

GET wp-json/wp/v2/posts/ " !

! " { }Wymaga autoryzacji Nie wymaga autoryzacji Wymaga przesłania danych JSON

Page 20: Wprowadzenie do WP-API

GET wp-json/wp/v2/posts/

GET wp-json/wp/v2/posts/128

" !

" !

! " { }Wymaga autoryzacji Nie wymaga autoryzacji Wymaga przesłania danych JSON

Page 21: Wprowadzenie do WP-API

GET wp-json/wp/v2/posts/

GET wp-json/wp/v2/posts/128

POST wp-json/wp/v2/posts/

" !

{ }

" !

!

! " { }Wymaga autoryzacji Nie wymaga autoryzacji Wymaga przesłania danych JSON

Page 22: Wprowadzenie do WP-API

GET wp-json/wp/v2/posts/

GET wp-json/wp/v2/posts/128

POST wp-json/wp/v2/posts/

PUT wp-json/wp/v2/posts/128

" !

{ }

" !

!

{ } !

! " { }Wymaga autoryzacji Nie wymaga autoryzacji Wymaga przesłania danych JSON

Page 23: Wprowadzenie do WP-API

GET wp-json/wp/v2/posts/

GET wp-json/wp/v2/posts/128

POST wp-json/wp/v2/posts/

PUT wp-json/wp/v2/posts/128

DELETE wp-json/wp/v2/posts/128

" !

{ }

" !

!

{ } !

!

! " { }Wymaga autoryzacji Nie wymaga autoryzacji Wymaga przesłania danych JSON

Page 24: Wprowadzenie do WP-API

Przykłady

Page 25: Wprowadzenie do WP-API

Przykłady

wp-json/wp/v2/posts/303

wp-json/wp/v2/posts?filter[cat]=1,2,3

wp-json/wp/v2/posts?filter[posts_per_page]=20

wp-json/terms/category

wp-json/users/me

Page 26: Wprowadzenie do WP-API

Przykłady

wp-json/wp/v2/posts/303

wp-json/wp/v2/posts?filter[cat]=1,2,3

wp-json/wp/v2/posts?filter[posts_per_page]=20

wp-json/terms/category

wp-json/users/me

Page 27: Wprowadzenie do WP-API

Przykłady

wp-json/wp/v2/posts/303

wp-json/wp/v2/posts?filter[cat]=1,2,3

wp-json/wp/v2/posts?filter[posts_per_page]=20

wp-json/terms/category

wp-json/users/me

Page 28: Wprowadzenie do WP-API

Przykłady

wp-json/wp/v2/posts/303

wp-json/wp/v2/posts?filter[cat]=1,2,3

wp-json/wp/v2/posts?filter[posts_per_page]=20

wp-json/wp/v2/terms/category

wp-json/wp/v2/users/me

Page 29: Wprowadzenie do WP-API

Przykłady

wp-json/wp/v2/posts/303

wp-json/wp/v2/posts?filter[cat]=1,2,3

wp-json/wp/v2/posts?filter[posts_per_page]=20

wp-json/wp/v2/terms/category

wp-json/wp/v2/users/me

Page 30: Wprowadzenie do WP-API

Sposoby autoryzacji

Page 31: Wprowadzenie do WP-API

Cookie Auth

• Standardowa metoda autoryzacji dla wtyczek i motywów

• Wymaga przesłania w zapytaniu AJAX-owym dodatkowego nagłówka X-WP-Nonce http://wp-api.org/guides/authentication.html#cookie-authentication

Page 32: Wprowadzenie do WP-API

Cookie Auth

• Standardowa metoda autoryzacji dla wtyczek i motywów

• Wymaga przesłania w zapytaniu AJAX-owym dodatkowego nagłówka X-WP-Nonce http://v2.wp-api.org/guide/authentication/

Page 33: Wprowadzenie do WP-API

OAuth

• Dla aplikacji zewnętrznych - webowych, mobilnych, desktopowych

• Wymaga dodatkowego pluginu - OAuth Serverhttps://github.com/WP-API/OAuth1

• Wsparcie tylko dla OAuth 1.*

• Niestety obecnie nie ma UI do zarządzania kluczami

Page 34: Wprowadzenie do WP-API

OAuth

• Dla aplikacji zewnętrznych - webowych, mobilnych, desktopowych

• Wymaga dodatkowego pluginu - OAuth Serverhttps://github.com/WP-API/OAuth1

• Wsparcie tylko dla OAuth 1.*

• Niestety obecnie nie ma UI do zarządzania kluczami

Page 35: Wprowadzenie do WP-API

OAuth

• Dla aplikacji zewnętrznych - webowych, mobilnych, desktopowych

• Wymaga dodatkowego pluginu - OAuth Serverhttps://github.com/WP-API/OAuth1

• Wsparcie tylko dla OAuth 1.*

• Niestety obecnie nie ma UI do zarządzania kluczami

Page 36: Wprowadzenie do WP-API

OAuth

• Dla aplikacji zewnętrznych - webowych, mobilnych, desktopowych

• Wymaga dodatkowego pluginu - OAuth Serverhttps://github.com/WP-API/OAuth1

• Wsparcie tylko dla OAuth 1.*

• Niestety obecnie nie ma UI do zarządzania kluczami

Page 37: Wprowadzenie do WP-API

Basic Auth

• Tylko do środowisk testowych, istnieje duże ryzyko wycieku hasła wskutek braku szyfrowania

• Wymaga dodatkowej wtyczki: Basic Auth https://github.com/WP-API/Basic-Auth

Page 38: Wprowadzenie do WP-API

Basic Auth

• Tylko do środowisk testowych, istnieje duże ryzyko wycieku hasła wskutek braku szyfrowania

• Wymaga dodatkowej wtyczki: Basic Auth https://github.com/WP-API/Basic-Auth

Page 39: Wprowadzenie do WP-API

Istotne zmiany pomiędzy REST API v.1.* i v.2.*

Page 40: Wprowadzenie do WP-API

Przestrzenie nazw

Page 41: Wprowadzenie do WP-API

Przestrzenie nazw

Nasz motyw lub wtyczka może korzystać z własnej przestrzeni nazw w REST API.

Tworzenie nowych endpointów API poprzez register_rest_route wymaga zdefiniowania przestrzeni nazw.

Domyślna przestrzeń nazw to wp/v2

Page 42: Wprowadzenie do WP-API

Przestrzenie nazw

Nasz motyw lub wtyczka może korzystać z własnej przestrzeni nazw w REST API.

Tworzenie nowych endpointów API poprzez register_rest_route wymaga zdefiniowania przestrzeni nazw.

Domyślna przestrzeń nazw to wp/v2

Page 43: Wprowadzenie do WP-API

Przestrzenie nazw

Nasz motyw lub wtyczka może korzystać z własnej przestrzeni nazw w REST API.

Tworzenie nowych endpointów API poprzez register_rest_route wymaga zdefiniowania przestrzeni nazw.

Domyślna przestrzeń nazw to wp/v2

Page 44: Wprowadzenie do WP-API

Implementacja HAL

Źródło: http://stateless.co/hal_specification.html

Page 45: Wprowadzenie do WP-API

Implementacja HALHAL - Hypertext Application Language

Źródło: http://stateless.co/hal_specification.html

Page 46: Wprowadzenie do WP-API

Implementacja HALHAL - Hypertext Application Language

Wprowadza dla zasobów kolekcje _links i _embedded

Źródło: http://stateless.co/hal_specification.html

Page 47: Wprowadzenie do WP-API

Implementacja HALHAL - Hypertext Application Language

Wprowadza dla zasobów kolekcje _links i _embedded

_links zawiera adresy powiązanych zasobów

_embedded zawiera dane powiązanych zasobów gdy dodamy w URLu &_embed

Źródło: http://stateless.co/hal_specification.html

Page 48: Wprowadzenie do WP-API

Nowe endpointywp/v2/comments

wp/v2/pages

wp/v2/terms

wp/v2/types

wp/v2/statuses

Page 49: Wprowadzenie do WP-API

Możliwości

Page 50: Wprowadzenie do WP-API

Motywy jako SPA

Page 51: Wprowadzenie do WP-API

Łatwa komunikacja z aplikacjami

Page 52: Wprowadzenie do WP-API

Migrowanie danych

Page 53: Wprowadzenie do WP-API

Migrowanie danych

Page 54: Wprowadzenie do WP-API

Migrowanie danych

JSON XML SQL

YAML RSS Atom

Page 55: Wprowadzenie do WP-API

Migrowanie danych

JSON

JSON XML SQL

YAML RSS Atom

Page 56: Wprowadzenie do WP-API

Przetwarzanie danych

Page 57: Wprowadzenie do WP-API

Przetwarzanie danych

Page 58: Wprowadzenie do WP-API

JSON

Przetwarzanie danych

Page 59: Wprowadzenie do WP-API

JSON

Przetwarzanie danych

Page 60: Wprowadzenie do WP-API

Własne endpointyhttp://v2.wp-api.org/extending/adding/

Page 61: Wprowadzenie do WP-API

Filtry i akcje

Page 62: Wprowadzenie do WP-API

• Akcja rest_insert_post - pozwala zmodyfikować dane przed dodaniem do bazy

• Filtr rest_prepare_{POST_TYPE} - może w niektórych wypadkach zastąpić własne endpointy

• Akcja rest_api_init - pozwala dodawać pola i nowe endpointy oraz np. ograniczyć zapytania do określonej puli IP lub zarejestrowanych kluczy

Page 63: Wprowadzenie do WP-API

• Akcja rest_insert_post - pozwala zmodyfikować dane przed dodaniem do bazy

• Filtr rest_prepare_{POST_TYPE} - może w niektórych wypadkach zastąpić własne endpointy

• Akcja rest_api_init - pozwala dodawać pola i nowe endpointy oraz np. ograniczyć zapytania do określonej puli IP lub zarejestrowanych kluczy

Page 64: Wprowadzenie do WP-API

• Akcja rest_insert_post - pozwala zmodyfikować dane przed dodaniem do bazy

• Filtr rest_prepare_{POST_TYPE} - może w niektórych wypadkach zastąpić własne endpointy

• Akcja rest_api_init - pozwala dodawać pola i nowe endpointy oraz np. ograniczyć zapytania do określonej puli IP lub zarejestrowanych kluczy

Page 65: Wprowadzenie do WP-API

Kilka ciekawostek

Page 66: Wprowadzenie do WP-API

Zmiana URLa REST API

Możemy zmienić URL do API (domyślnie wp-json) poprzez filtr:

rest_url_prefix

Page 67: Wprowadzenie do WP-API

Podstawowe informacje o stronie

Pod adresem wp-json/ znajdują się podstawowe dane witryny:

• nazwa, • opis, • dostępne przestrzenie nazw, • lista endpointów

Page 68: Wprowadzenie do WP-API

Własne metody autoryzacji

• Wymagają implementacji z użyciem filtra rest_authentication_errors

• Można zaimplementować np. JSON Web Tokenshttp://jwt.io/

Page 69: Wprowadzenie do WP-API

Własne metody autoryzacji

• Wymagają implementacji z użyciem filtra rest_authentication_errors

• Można zaimplementować np. JSON Web Tokenshttp://jwt.io/

Page 70: Wprowadzenie do WP-API

Zmiana klasy obsługującej API

Korzystając z filtra wp_rest_server_class możemy podmienić klasę WP_REST_Server na własną klasę

Page 71: Wprowadzenie do WP-API

REST API a mobilna agenda

WordCampa

Page 72: Wprowadzenie do WP-API
Page 73: Wprowadzenie do WP-API

+

Page 74: Wprowadzenie do WP-API

+Raw JSON data

Page 75: Wprowadzenie do WP-API

+Raw JSON data

Page 76: Wprowadzenie do WP-API

+Raw JSON data speakers.json

presentations.json

Page 77: Wprowadzenie do WP-API

+Raw JSON data speakers.json

presentations.json

Page 78: Wprowadzenie do WP-API

JSON~320kB

JSON~60kB

Page 79: Wprowadzenie do WP-API

Motyw jako SPA

Page 80: Wprowadzenie do WP-API

Motyw-mapa

Page 81: Wprowadzenie do WP-API
Page 82: Wprowadzenie do WP-API
Page 83: Wprowadzenie do WP-API
Page 84: Wprowadzenie do WP-API

Co wykorzystać?

Page 85: Wprowadzenie do WP-API

REST API

Adresy URL, które wykorzystamy:

• wp-json/wp/v2/terms/category/

• wp-json/wp/v2/posts?filter[posts_per_page]=200

• wp-json/wp/v2posts?filter[posts_per_page]=200&filter[cat]=1,2,3

Page 86: Wprowadzenie do WP-API

REST API

Adresy URL, które wykorzystamy:

• wp-json/wp/v2/terms/category/

• wp-json/wp/v2/posts?filter[posts_per_page]=200

• wp-json/wp/v2posts?filter[posts_per_page]=200&filter[cat]=1,2,3

Page 87: Wprowadzenie do WP-API

REST API

Adresy URL, które wykorzystamy:

• wp-json/wp/v2/terms/category/

• wp-json/wp/v2/posts?filter[posts_per_page]=200

• wp-json/wp/v2posts?filter[posts_per_page]=200&filter[cat]=1,2,3

Page 88: Wprowadzenie do WP-API

REST API

Adresy URL, które wykorzystamy:

• wp-json/wp/v2/terms/category/

• wp-json/wp/v2/posts?filter[posts_per_page]=200

• wp-json/wp/v2posts?filter[posts_per_page]=200&filter[cat]=1,2,3

Page 89: Wprowadzenie do WP-API

Handlebarshttp://handlebarsjs.com/

<script id="stats-popup-tmpl" type="text/x-handlebars-template"> <h3 class="stats__header"><?php _e('Znaleziono {{total}} odwiedzonych miejsc', 'theme-map'); ?></h3>

<ul class="stats__list"> {{#each stats}} <li class="stats__item"> <strong class="stats__counter{{#if count}} stats__counter--active{{/if}}">{{count}}</strong> <img src="{{iconsUrl}}{{slug}}.svg" alt="" class="stats__icon" /> {{name}} </li> {{/each}} </ul> </script>

Page 90: Wprowadzenie do WP-API

Handlebarshttp://handlebarsjs.com/

<script id="stats-popup-tmpl" type="text/x-handlebars-template"> <h3 class="stats__header"><?php _e('Znaleziono {{total}} odwiedzonych miejsc', 'theme-map'); ?></h3>

<ul class="stats__list"> {{#each stats}} <li class="stats__item"> <strong class="stats__counter{{#if count}} stats__counter--active{{/if}}">{{count}}</strong> <img src="{{iconsUrl}}{{slug}}.svg" alt="" class="stats__icon" /> {{name}} </li> {{/each}} </ul> </script>

Page 91: Wprowadzenie do WP-API

Handlebarshttp://handlebarsjs.com/

<script id="stats-popup-tmpl" type="text/x-handlebars-template"> <h3 class="stats__header"><?php _e('Znaleziono {{total}} odwiedzonych miejsc', 'theme-map'); ?></h3>

<ul class="stats__list"> {{#each stats}} <li class="stats__item"> <strong class="stats__counter{{#if count}} stats__counter--active{{/if}}">{{count}}</strong> <img src="{{iconsUrl}}{{slug}}.svg" alt="" class="stats__icon" /> {{name}} </li> {{/each}} </ul> </script>

Page 92: Wprowadzenie do WP-API

Inne

Page 93: Wprowadzenie do WP-API

Inne• Google Maps API - bo musimy mieć jakieś mapy ;)

https://developers.google.com/maps/documentation/javascript/tutorial

• LocalStorage - do przechowywania filtrów

• History API - aby mieć dostęp poprzez URL do konkretnych miejsc

• Snazzy mapshttps://snazzymaps.com/

• Travel icon sethttp://www.smashingmagazine.com/2014/12/23/freebie-tourism-travel-icon-set-100-icons-png-svg/

Page 94: Wprowadzenie do WP-API

Inne• Google Maps API - bo musimy mieć jakieś mapy ;)

https://developers.google.com/maps/documentation/javascript/tutorial

• LocalStorage - do przechowywania filtrów

• History API - aby mieć dostęp poprzez URL do konkretnych miejsc

• Snazzy mapshttps://snazzymaps.com/

• Travel icon sethttp://www.smashingmagazine.com/2014/12/23/freebie-tourism-travel-icon-set-100-icons-png-svg/

Page 95: Wprowadzenie do WP-API

Inne• Google Maps API - bo musimy mieć jakieś mapy ;)

https://developers.google.com/maps/documentation/javascript/tutorial

• LocalStorage - do przechowywania filtrów

• History API - aby mieć dostęp poprzez URL do konkretnych miejsc

• Snazzy mapshttps://snazzymaps.com/

• Travel icon sethttp://www.smashingmagazine.com/2014/12/23/freebie-tourism-travel-icon-set-100-icons-png-svg/

Page 96: Wprowadzenie do WP-API

Inne• Google Maps API - bo musimy mieć jakieś mapy ;)

https://developers.google.com/maps/documentation/javascript/tutorial

• LocalStorage - do przechowywania filtrów

• History API - aby mieć dostęp poprzez URL do konkretnych miejsc

• Snazzy mapshttps://snazzymaps.com/

• Travel icon sethttp://www.smashingmagazine.com/2014/12/23/freebie-tourism-travel-icon-set-100-icons-png-svg/

Page 97: Wprowadzenie do WP-API

Inne• Google Maps API - bo musimy mieć jakieś mapy ;)

https://developers.google.com/maps/documentation/javascript/tutorial

• LocalStorage - do przechowywania filtrów

• History API - aby mieć dostęp poprzez URL do konkretnych miejsc

• Snazzy mapshttps://snazzymaps.com/

• Travel icon sethttp://www.smashingmagazine.com/2014/12/23/freebie-tourism-travel-icon-set-100-icons-png-svg/

Page 98: Wprowadzenie do WP-API

Problemy?

Page 99: Wprowadzenie do WP-API

Wprowadzanie pozycji elementów na mapie

Page 100: Wprowadzenie do WP-API

Wprowadzanie pozycji elementów na mapie

Wtyczka Pronamic Google Maps https://wordpress.org/plugins/pronamic-google-maps/

Page 101: Wprowadzenie do WP-API

Wprowadzanie pozycji elementów na mapie

Advanced Custom Fields https://wordpress.org/plugins/advanced-custom-fields/

Page 102: Wprowadzenie do WP-API

Duża liczba markerów

Page 103: Wprowadzenie do WP-API

Duża liczba markerów

• Marker Clusterer https://googlemaps.github.io/js-marker-clusterer/docs/examples.html

• Gorsze przypadki omówimy później ;)

Page 104: Wprowadzenie do WP-API
Page 105: Wprowadzenie do WP-API

Wpis

Page 106: Wprowadzenie do WP-API

Dane geolokalizacyjne

Page 107: Wprowadzenie do WP-API

Kategoria

Kategoria

Page 108: Wprowadzenie do WP-API

Tagi

Page 109: Wprowadzenie do WP-API

Adres

Page 110: Wprowadzenie do WP-API

Najważniejsze pliki motywu

• index.php - jedyny plik wyświetlający szablon

• index-templates.php - przechowuje szablony Handlebars

• functions.php - konfiguracja wstępna i wczytywanie plików JS/CSS

Page 111: Wprowadzenie do WP-API

Najważniejsze pliki motywu

• index.php - jedyny plik wyświetlający szablon

• index-templates.php - przechowuje szablony Handlebars

• functions.php - konfiguracja wstępna i wczytywanie plików JS/CSS

Page 112: Wprowadzenie do WP-API

Najważniejsze pliki motywu

• index.php - jedyny plik wyświetlający szablon

• index-templates.php - przechowuje szablony Handlebars

• functions.php - konfiguracja wstępna i wczytywanie plików JS/CSS

Page 113: Wprowadzenie do WP-API

Najważniejsze pliki motywu

• index.php - jedyny plik wyświetlający szablon

• index-templates.php - przechowuje szablony Handlebars

• functions.php - konfiguracja wstępna i wczytywanie plików JS/CSS

• tgm.php - do ułatwienia/wymuszenia instalacji potrzebnych wtyczek

Page 114: Wprowadzenie do WP-API

Wczytywanie konfiguracji wstępnej z ekranu personalizacji motywu

wp_register_script( 'tm-app', get_template_directory_uri() . '/js/app.js', array('jquery', ‘tm-handlebars’));

$app_config = array( 'URL' => home_url(), 'mapLatitude' => get_theme_mod('map_latitude', '51.919438'), 'mapLongitude' => get_theme_mod('map_longitude', '19.145135'), 'mapZoom' => get_theme_mod('map_zoom', '6'),);

wp_localize_script( 'tm-app', 'appConfig', $app_config );

Page 115: Wprowadzenie do WP-API

Wczytywanie konfiguracji wstępnej z ekranu personalizacji motywu

wp_register_script( 'tm-app', get_template_directory_uri() . '/js/app.js', array('jquery', ‘tm-handlebars’));

$app_config = array( 'URL' => home_url(), 'mapLatitude' => get_theme_mod('map_latitude', '51.919438'), 'mapLongitude' => get_theme_mod('map_longitude', '19.145135'), 'mapZoom' => get_theme_mod('map_zoom', '6'),);

wp_localize_script( 'tm-app', 'appConfig', $app_config );

Page 116: Wprowadzenie do WP-API

Wczytywanie konfiguracji wstępnej z ekranu personalizacji motywu

wp_register_script( 'tm-app', get_template_directory_uri() . '/js/app.js', array('jquery', ‘tm-handlebars’));

$app_config = array( 'URL' => home_url(), 'mapLatitude' => get_theme_mod('map_latitude', '51.919438'), 'mapLongitude' => get_theme_mod('map_longitude', '19.145135'), 'mapZoom' => get_theme_mod('map_zoom', '6'),);

wp_localize_script( 'tm-app', 'appConfig', $app_config );

Page 117: Wprowadzenie do WP-API

Pobieranie danych$.ajax({

url: apiUrl + “posts?filter[posts_per_page]=200"}).done(function( data ) {// przetwarzanie danych

});

Page 118: Wprowadzenie do WP-API

Pobieranie danych$.ajax({

url: apiUrl + “posts?filter[posts_per_page]=200"}).done(function( data ) {// przetwarzanie danych

});

Page 119: Wprowadzenie do WP-API

Pobieranie danych$.ajax({

url: apiUrl + “posts?filter[posts_per_page]=200"}).done(function( data ) { // przetwarzanie danych});

Page 120: Wprowadzenie do WP-API

Pobieranie danych$.ajax({ method: ‘GET’,

url: apiUrl + “posts?filter[posts_per_page]=200"}).done(function( data ) { // przetwarzanie danych});

Page 121: Wprowadzenie do WP-API

Pobieranie danych$.ajax({ method: ‘GET’,

cache: false, url: apiUrl + “posts?filter[posts_per_page]=200"}).done(function( data ) { // przetwarzanie danych});

Page 122: Wprowadzenie do WP-API

Usuwanie/modyfikowanie pól z odpowiedzi REST API jest NIEBEZPIECZNE

Lepiej stworzyć własne zoptymalizowane endpointy w przestrzeni nazw motywu lub dodać brakujące pola

Page 123: Wprowadzenie do WP-API

W wypadku dodawana własnych pól, warto dodać im prefiksy celem uniknięcia konfliktów z innymi wtyczkami

i motywami modyfikującymi odpowiedzi API

np. tm_geodata

Page 124: Wprowadzenie do WP-API

Dodawanie danych do wpisufunction PREFIX_register_FIELD_NAME() { register_api_field('TYPE', ‘PREFIX_FIELD_NAME', array( 'get_callback' => 'PREFIX_get_FIELD_NAME', 'update_callback' => null, 'schema' => null ) );

}

add_action('rest_api_init', ‘PREFIX_register_FIELD_NAME');

Page 125: Wprowadzenie do WP-API

Dodawanie danych do wpisufunction PREFIX_register_FIELD_NAME() { register_api_field('TYPE', ‘PREFIX_FIELD_NAME', array( 'get_callback' => 'PREFIX_get_FIELD_NAME', 'update_callback' => null, 'schema' => null ) );

}

add_action('rest_api_init', ‘PREFIX_register_FIELD_NAME');

Page 126: Wprowadzenie do WP-API

Dodawanie danych do wpisufunction PREFIX_register_FIELD_NAME() { register_api_field('TYPE', ‘PREFIX_FIELD_NAME', array( 'get_callback' => 'PREFIX_get_FIELD_NAME', 'update_callback' => null, 'schema' => null ) );

}

add_action('rest_api_init', ‘PREFIX_register_FIELD_NAME');

Page 127: Wprowadzenie do WP-API

Dodawanie danych do wpisufunction PREFIX_register_FIELD_NAME() { register_api_field('TYPE', ‘PREFIX_FIELD_NAME', array( 'get_callback' => 'PREFIX_get_FIELD_NAME', 'update_callback' => null, 'schema' => null ) );

}

add_action('rest_api_init', ‘PREFIX_register_FIELD_NAME');

Page 128: Wprowadzenie do WP-API

Dodawanie danych do wpisufunction tm_register_category() { register_api_field( 'post', 'tm_category', array( 'get_callback' => 'tm_get_category', 'update_callback' => null, 'schema' => null ) );

}

add_action( 'rest_api_init', 'tm_register_category');

Page 129: Wprowadzenie do WP-API

function tm_get_category( $object, $field_name, $request ) {$category_slug = null;$categories = get_the_category($object['id']);

if(count($categories)) {$category_slug = $categories[0]->slug;

}

return $category_slug;}

Dodawanie danych do wpisu

Page 130: Wprowadzenie do WP-API

Co dalej?

Page 131: Wprowadzenie do WP-API

1 wpis = 2-5kB 100 wpisów = ~200-500kB

Page 132: Wprowadzenie do WP-API

1 wpis = 2-5kB 100 wpisów = ~200-500kB

Page 133: Wprowadzenie do WP-API

Dla większej liczby markerów

• Utworzenie własnych end-pointów do serwowania danych markerów:

• ID,

• Dane geolokalizacyjne

• Kategoria

• Reszta danych wczytywana po kliknięciu popupa poprzez wp-json/posts/<id>

Page 134: Wprowadzenie do WP-API

Dla większej liczby markerów

• Utworzenie własnych end-pointów do serwowania danych markerów:

• ID,

• Dane geolokalizacyjne

• Kategoria

• Reszta danych wczytywana po kliknięciu popupa poprzez wp-json/posts/<id>

Page 135: Wprowadzenie do WP-API

Dla większej liczby markerów

• Utworzenie własnych end-pointów do serwowania danych markerów:

• ID,

• Dane geolokalizacyjne

• Kategoria

• Reszta danych wczytywana po kliknięciu popupa poprzez wp-json/wp/v2/posts/<id>

Page 136: Wprowadzenie do WP-API

Gdy mamy bardzo dużo markerów

• Wczytywanie markerów zależnie od widocznego obszaru mapy

• Przygotowanie end-pointu, który na bazie zakresu szerokości i długości geograficznej zwróci listę markerów na danym obszarze

Page 137: Wprowadzenie do WP-API

Gdy mamy bardzo dużo markerów

• Wczytywanie markerów zależnie od widocznego obszaru mapy

• Przygotowanie endpointu, który na bazie zakresu szerokości i długości geograficznej zwróci listę markerów na danym obszarze

Page 138: Wprowadzenie do WP-API

Kod przykładu:

https://github.com/dziudek/theme-map

Page 139: Wprowadzenie do WP-API

Podsumowanie

Page 140: Wprowadzenie do WP-API

Podsumowanie

• REST API tworzy zupełnie nowe obszary wykorzystania wtyczek i motywów

• REST API jest bardzo skalowalne i edytowalne

• Trzeba pamiętać, że nie tylko my będziemy korzystać z REST API na danej instalacji WP

Page 141: Wprowadzenie do WP-API

Podsumowanie

• REST API tworzy zupełnie nowe obszary wykorzystania wtyczek i motywów

• REST API jest bardzo skalowalne i edytowalne

• Trzeba pamiętać, że nie tylko my będziemy korzystać z REST API na danej instalacji WP

Page 142: Wprowadzenie do WP-API

Podsumowanie

• REST API tworzy zupełnie nowe obszary wykorzystania wtyczek i motywów

• REST API jest bardzo skalowalne i edytowalne

• Trzeba pamiętać, że nie tylko my będziemy korzystać z REST API na danej instalacji WP

Page 143: Wprowadzenie do WP-API

Pytania?