WP-API - teoria i praktyka - WordUp Trójmiasto #2

158
WP-API teoria i praktyka Tomasz Dziuda WordUp Trójmiasto 23.V.2015

Transcript of WP-API - teoria i praktyka - WordUp Trójmiasto #2

Page 1: WP-API - teoria i praktyka - WordUp Trójmiasto #2

WP-API teoria i praktyka

Tomasz Dziuda

WordUp Trójmiasto 23.V.2015

Page 2: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Idea

Page 3: WP-API - teoria i praktyka - WordUp Trójmiasto #2

+WP-API

Page 4: WP-API - teoria i praktyka - WordUp Trójmiasto #2

GET/POST/PUT/DELETE

+WP-API

Page 5: WP-API - teoria i praktyka - WordUp Trójmiasto #2

GET/POST/PUT/DELETE

{“json”: “data”}

+WP-API

Page 6: WP-API - teoria i praktyka - WordUp Trójmiasto #2

GET/POST/PUT/DELETE

{“json”: “data”}

wp_ajax_{action} wp_ajax_nopriv_{action}

+WP-API

Page 7: WP-API - teoria i praktyka - WordUp Trójmiasto #2

GET/POST/PUT/DELETE

{“json”: “data”}

wp_ajax_{action} wp_ajax_nopriv_{action}

+WP-API

Page 8: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Struktura URLi

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

Page 9: WP-API - teoria i praktyka - WordUp Trójmiasto #2

/

/posts

/posts/<id>/meta

/posts/<id>/revisions

/media

/users

/taxonomies

/taxonomies/<taxonomy>/terms

Page 10: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Przykłady

Page 11: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Przykłady• wp-json/posts/303

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

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

• Więcej filtrów: http://wp-api.org/#posts_retrieve-posts

• wp-json/taxonomies/category/terms

• wp-json/users/me

Page 12: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Przykłady• wp-json/posts/303

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

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

• Więcej filtrów: http://wp-api.org/#posts_retrieve-posts

• wp-json/taxonomies/category/terms

• wp-json/users/me

Page 13: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Przykłady• wp-json/posts/303

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

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

• Więcej filtrów: http://wp-api.org/#posts_retrieve-posts

• wp-json/taxonomies/category/terms

• wp-json/users/me

Page 14: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Przykłady• wp-json/posts/303

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

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

• Więcej filtrów: http://wp-api.org/#posts_retrieve-posts

• wp-json/taxonomies/category/terms

• wp-json/users/me

Page 15: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Przykłady• wp-json/posts/303

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

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

• Więcej filtrów: http://wp-api.org/#posts_retrieve-posts

• wp-json/taxonomies/category/terms

• wp-json/users/me

Page 16: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Przykłady• wp-json/posts/303

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

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

• Więcej filtrów: http://wp-api.org/#posts_retrieve-posts

• wp-json/taxonomies/category/terms

• wp-json/users/me

Page 17: WP-API - teoria i praktyka - WordUp Trójmiasto #2

GET / HEAD - odczyt istniejącego elementu

POST - tworzenie nowego elementu

PUT / PATCH - edycja elementu

DELETE - usunięcie elementu

Page 18: WP-API - teoria i praktyka - WordUp Trójmiasto #2

GET / HEAD - odczyt istniejącego elementu

POST - tworzenie nowego elementu

PUT / PATCH - edycja elementu

DELETE - usunięcie elementu

Page 19: WP-API - teoria i praktyka - WordUp Trójmiasto #2

GET / HEAD - odczyt istniejącego elementu

POST - tworzenie nowego elementu

PUT / PATCH - edycja elementu

DELETE - usunięcie elementu

Page 20: WP-API - teoria i praktyka - WordUp Trójmiasto #2

GET / HEAD - odczyt istniejącego elementu

POST - tworzenie nowego elementu

PUT / PATCH - edycja elementu

DELETE - usunięcie elementu

Page 21: WP-API - teoria i praktyka - WordUp Trójmiasto #2

GET / HEAD - odczyt istniejącego elementu

POST - tworzenie nowego elementu

PUT / PATCH - edycja elementu

DELETE - usunięcie elementu

Wymagają zawsze autoryzacji

Wymagają CZASAMI autoryzacji

Page 22: WP-API - teoria i praktyka - WordUp Trójmiasto #2

JSON jako nośnik danych

Page 23: WP-API - teoria i praktyka - WordUp Trójmiasto #2

JSON jako nośnik danych

• Zajmuje mniej miejsca niż XML

• Można go łatwiej przetwarzać z użyciem JavaScript

• http://www.json.org/xml.html

Page 24: WP-API - teoria i praktyka - WordUp Trójmiasto #2

JSON jako nośnik danych

• Zajmuje mniej miejsca niż XML

• Można go łatwiej przetwarzać z użyciem JavaScript

• http://www.json.org/xml.html

Page 25: WP-API - teoria i praktyka - WordUp Trójmiasto #2

JSON jako nośnik danych

• Zajmuje mniej miejsca niż XML

• Można go łatwiej przetwarzać z użyciem JavaScript

• http://www.json.org/xml.html

Page 26: WP-API - teoria i praktyka - WordUp Trójmiasto #2
Page 27: WP-API - teoria i praktyka - WordUp Trójmiasto #2

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

Page 28: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Akcje wymagające autoryzacji

• Tworzenie i modyfikacja postów

• Odczyt rewizji postów

• Tworzenie załączników

• Tworzenie, modyfikacja, odczyt post meta

• Tworzenie, modyfikacja, odczyt użytkowników

Page 29: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Sposoby autoryzacji

Page 30: WP-API - teoria i praktyka - WordUp Trójmiasto #2

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 31: WP-API - teoria i praktyka - WordUp Trójmiasto #2

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: WP-API - teoria i praktyka - WordUp Trójmiasto #2

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

desktopowych

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

• Wsparcie tylko dla OAuth 1.*

• Niestety obecnie nie ma UI do zarządzania kluczami

Page 33: WP-API - teoria i praktyka - WordUp Trójmiasto #2

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

desktopowych

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

• Wsparcie tylko dla OAuth 1.*

• Niestety obecnie nie ma UI do zarządzania kluczami

Page 34: WP-API - teoria i praktyka - WordUp Trójmiasto #2

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

desktopowych

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

• Wsparcie tylko dla OAuth 1.*

• Niestety obecnie nie ma UI do zarządzania kluczami

Page 35: WP-API - teoria i praktyka - WordUp Trójmiasto #2

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

desktopowych

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

• Wsparcie tylko dla OAuth 1.*

• Niestety obecnie nie ma UI do zarządzania kluczami

Page 36: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Basic Auth

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

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

Page 37: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Basic Auth

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

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

Page 38: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Własne metody

• Wymagają implementacji z użyciem filtra json_authentication_errors https://apppresser.com/custom-wp-api-authentication/

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

Page 39: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Własne metody

• Wymagają implementacji z użyciem filtra json_authentication_errors https://apppresser.com/custom-wp-api-authentication/

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

Page 40: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Możliwości

Page 41: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Nowe kokpity

Page 42: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Źródło: https://pickle.pub/

Page 43: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Źródło: https://dribbble.com/shots/2056289-WordPress-Dashboard/attachments/367241

Page 44: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Panele zarządzania WordPressami

Page 45: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Źródło: https://wordpress.com/sites

Page 46: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Motywy jako SPA

Page 47: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Łatwa komunikacja z aplikacjami

Page 48: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Migrowanie danych

Page 49: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Migrowanie danych

Page 50: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Migrowanie danych

JSON XML SQL

YAML RSS Atom

Page 51: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Migrowanie danych

JSON

JSON XML SQL

YAML RSS Atom

Page 52: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Rozszerzenia przeglądarek zintegrowane z WordPressem

Page 53: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Usługi informacyjne

Page 54: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Kalendarz WordUpów

Page 55: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Kalendarz WordUpów• Przygotowujemy WordPressa z listą WordUpów

• Tworzymy odpowiednie custom fields opisujące WordUpy

• Tworzymy widżet, który pobiera te informacje

• Wykorzystujemy HTTP API albo JSON-Phttps://codex.wordpress.org/HTTP_API

http://json-p.org/

Page 56: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Kalendarz WordUpów• Przygotowujemy WordPressa z listą WordUpów

• Tworzymy odpowiednie custom fields opisujące WordUpy

• Tworzymy widżet, który pobiera te informacje

• Wykorzystujemy HTTP API albo JSON-Phttps://codex.wordpress.org/HTTP_API

http://json-p.org/

Page 57: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Kalendarz WordUpów• Przygotowujemy WordPressa z listą WordUpów

• Tworzymy odpowiednie custom fields opisujące WordUpy

• Tworzymy widżet, który pobiera te informacje

• Wykorzystujemy HTTP API albo JSON-Phttps://codex.wordpress.org/HTTP_API

http://json-p.org/

Page 58: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Kalendarz WordUpów• Przygotowujemy WordPressa z listą WordUpów

• Tworzymy odpowiednie custom fields opisujące WordUpy

• Tworzymy widżet, który pobiera te informacje

• Wykorzystujemy HTTP API albo JSON-Phttps://codex.wordpress.org/HTTP_API

http://json-p.org/

Page 59: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Własne end-pointyhttp://wp-api.org/guides/extending.html

http://www.roysivan.com/my-best-practices-to-developing-wp-api/

Page 60: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Filtry i akcje

Page 61: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Moje dwa ulubione filtry:

• json_insert_post - pozwala pozmieniać dane przed dodaniem do bazy

• json_prepare_post - może zastąpić własne end-pointy

Page 62: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Moje dwa ulubione filtry:

• json_insert_post - pozwala pozmieniać dane przed dodaniem do bazy

• json_prepare_post - może zastąpić własne end-pointy

Page 63: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Moje dwa ulubione filtry:

• json_insert_post - pozwala pozmieniać dane przed dodaniem do bazy

• json_prepare_post - może zastąpić własne end-pointy

Page 64: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Pamiętajcie jednak, że…

Page 65: WP-API - teoria i praktyka - WordUp Trójmiasto #2

v.1.* jako numer wersji JSON-API jest zdecydowanie zawyżone ;-)

Page 66: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Szykuje się wersja 2.*

Page 67: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Szykuje się wersja 2.*Niekompatybilna wstecz ;)

https://make.wordpress.org/core/2015/04/29/wp-rest-api-version-2-0-beta-1/

Page 68: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Szykuje się wersja 2.*

Dokumentacja: http://v2.wp-api.org/

Niekompatybilna wstecz ;) https://make.wordpress.org/core/2015/04/29/wp-rest-api-version-2-0-beta-1/

Page 69: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Do odczytu świetne, do zapisu niekoniecznie ;-)

Page 70: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Problemy z protected meta

Nie można ustawić _thumbnail_id

Page 71: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Problemy z protected meta

Nie można ustawić _thumbnail_id

Page 72: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Problemy z protected meta

Nie można ustawić _thumbnail_id

Pomaga:

add_filter('is_protected_meta', '__return_false');

Page 73: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Brak wsparcia dla dodawania/edycji termsów

Page 74: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Brak wsparcia dla dodawania/edycji termsów

Własne end-pointy na ratunek

Page 75: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Brak wsparcia dla definiowania własnych taksonomii przy

tworzeniu wpisów

Page 76: WP-API - teoria i praktyka - WordUp Trójmiasto #2

function wp_api_add_tax($post, $data, $update){ if( !empty($data['custom_tax']) && is_array($data['custom_tax']) ) {

foreach( $data['custom_tax'] as $tax => $val ){ wp_set_post_terms( $post['ID'], $val, $tax ); }

}}

add_action('json_insert_post', 'wp_api_add_tax', 10, 3);

Page 77: WP-API - teoria i praktyka - WordUp Trójmiasto #2

I paru innych rzeczy…

http://wp-api.org/misc/comparison.html

Page 78: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Wydajność i cache

Page 79: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Porady jak przygotować WordPressa pod wykorzystanie motywów SPA:

http://torquemag.io/preparing-wordpress-site-power-single-page-web-app/

Wtyczka cache dla WP-API:

https://github.com/Shelob9/jp-rest-cache

Page 80: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Motyw jako SPA

Page 81: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Motyw-mapa

Page 82: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Motyw-mapaPrawie jak samochód-chłodnia ;-)

Page 83: WP-API - teoria i praktyka - WordUp Trójmiasto #2
Page 84: WP-API - teoria i praktyka - WordUp Trójmiasto #2
Page 85: WP-API - teoria i praktyka - WordUp Trójmiasto #2
Page 86: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Co wykorzystać?

Page 87: WP-API - teoria i praktyka - WordUp Trójmiasto #2

REST API

Adresy URL, które wykorzystamy:

• wp-json/taxonomies/category/terms

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

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

Page 88: WP-API - teoria i praktyka - WordUp Trójmiasto #2

REST API

Adresy URL, które wykorzystamy:

• wp-json/taxonomies/category/terms

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

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

Page 89: WP-API - teoria i praktyka - WordUp Trójmiasto #2

REST API

Adresy URL, które wykorzystamy:

• wp-json/taxonomies/category/terms

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

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

Page 90: WP-API - teoria i praktyka - WordUp Trójmiasto #2

REST API

Adresy URL, które wykorzystamy:

• wp-json/taxonomies/category/terms

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

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

Page 91: WP-API - teoria i praktyka - WordUp Trójmiasto #2

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: WP-API - teoria i praktyka - WordUp Trójmiasto #2

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 93: WP-API - teoria i praktyka - WordUp Trójmiasto #2

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 94: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Google Maps API

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

Page 95: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Inne

Page 96: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Inne• LocalStorage - do przechowywania filtrów

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

• Snazzy mapshttps://snazzymaps.com/

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

Page 97: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Inne• LocalStorage - do przechowywania filtrów

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

• Snazzy mapshttps://snazzymaps.com/

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

Page 98: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Inne• LocalStorage - do przechowywania filtrów

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

• Snazzy mapshttps://snazzymaps.com/

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

Page 99: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Inne• LocalStorage - do przechowywania filtrów

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

• Snazzy mapshttps://snazzymaps.com/

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

Page 100: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Problemy?

Page 101: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Wprowadzanie pozycji elementów na mapie

Page 102: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Wprowadzanie pozycji elementów na mapie

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

Page 103: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Wprowadzanie pozycji elementów na mapie

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

Page 104: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Wprowadzanie pozycji elementów na mapie

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

Warto pamiętać o zdefiniowaniu pól w motywie http://www.advancedcustomfields.com/resources/local-json/

Page 105: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Brak publicznego dostępu do post meta

Page 106: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Brak publicznego dostępu do post meta

json_prepare_post rozwiąże ten problem

Page 107: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Duża liczba markerów

Page 108: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Duża liczba markerów

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

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

Page 109: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Duża liczba markerów

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

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

Page 110: WP-API - teoria i praktyka - WordUp Trójmiasto #2
Page 111: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Wpis

Page 112: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Dane geolokalizacyjne

Page 113: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Kategoria

Kategoria

Page 114: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Tagi

Page 115: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Adres

Page 116: WP-API - teoria i praktyka - WordUp Trójmiasto #2

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 117: WP-API - teoria i praktyka - WordUp Trójmiasto #2

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 118: WP-API - teoria i praktyka - WordUp Trójmiasto #2

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 119: WP-API - teoria i praktyka - WordUp Trójmiasto #2

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 120: WP-API - teoria i praktyka - WordUp Trójmiasto #2

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 121: WP-API - teoria i praktyka - WordUp Trójmiasto #2

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 122: WP-API - teoria i praktyka - WordUp Trójmiasto #2

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 123: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Pobieranie danych$.ajax({

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

});

Page 124: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Pobieranie danych$.ajax({

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

});

Page 125: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Pobieranie danych$.ajax({

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

Page 126: WP-API - teoria i praktyka - WordUp Trójmiasto #2

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

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

Page 127: WP-API - teoria i praktyka - WordUp Trójmiasto #2

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

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

Page 128: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Wyświetlanie popupuDodawanie danych geograficznych do posta

if( ! function_exists( 'tm_geodata' ) ) :function tm_geodata($data, $post, $context) {

$data['geodata'] = array( 'latitude' => get_post_meta(

$post['ID'], '_pronamic_google_maps_latitude', true ), 'longitude' => get_post_meta(

$post['ID'], '_pronamic_google_maps_longitude', true ), 'address' => get_post_meta(

$post['ID'], '_pronamic_google_maps_address', true ));return $data;

}endif; // tm_geodata

add_filter( 'json_prepare_post', 'tm_geodata', 10, 3 );

Page 129: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Wyświetlanie popupuDodawanie danych geograficznych do posta

if( ! function_exists( 'tm_geodata' ) ) :function tm_geodata($data, $post, $context) {

$data['geodata'] = array( 'latitude' => get_post_meta(

$post['ID'], '_pronamic_google_maps_latitude', true ), 'longitude' => get_post_meta(

$post['ID'], '_pronamic_google_maps_longitude', true ), 'address' => get_post_meta(

$post['ID'], '_pronamic_google_maps_address', true ));return $data;

}endif; // tm_geodata

add_filter( 'json_prepare_post', 'tm_geodata', 10, 3 );

Page 130: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Wyświetlanie popupuDodawanie danych geograficznych do posta

if( ! function_exists( 'tm_geodata' ) ) :function tm_geodata($data, $post, $context) {

$data['geodata'] = array( 'latitude' => get_post_meta(

$post['ID'], '_pronamic_google_maps_latitude', true ), 'longitude' => get_post_meta(

$post['ID'], '_pronamic_google_maps_longitude', true ), 'address' => get_post_meta(

$post['ID'], '_pronamic_google_maps_address', true ));return $data;

}endif; // tm_geodata

add_filter( 'json_prepare_post', 'tm_geodata', 10, 3 );

Page 131: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Wyświetlanie popupuDodawanie danych geograficznych do posta

if( ! function_exists( 'tm_geodata' ) ) :function tm_geodata($data, $post, $context) {

$data['geodata'] = array( 'latitude' => get_post_meta(

$post['ID'], '_pronamic_google_maps_latitude', true ), 'longitude' => get_post_meta(

$post['ID'], '_pronamic_google_maps_longitude', true ), 'address' => get_post_meta(

$post['ID'], '_pronamic_google_maps_address', true ));return $data;

}endif; // tm_geodata

add_filter( 'json_prepare_post', 'tm_geodata', 10, 3 );

Page 132: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Wyświetlanie popupushowPopup: function(data) {

$('.popup__wrap--data').html(templatePopup({"title": data.title, "address": data.geodata.address,"body": data.content,"rating": data.terms.post_tag ? parseInt(data.terms.post_tag[0].slug, 10) :

null,"image": data.featured_image ? data.featured_image.source : null,"categorySlug": data.terms.category[0].slug

}));

uiPopup.show('--data'); history.pushState(null, null, baseUrl + data.slug);},

Page 133: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Wyświetlanie popupushowPopup: function(data) {

$('.popup__wrap--data').html(templatePopup({"title": data.title, "address": data.geodata.address,"body": data.content,"rating": data.terms.post_tag ? parseInt(data.terms.post_tag[0].slug, 10) :

null,"image": data.featured_image ? data.featured_image.source : null,"categorySlug": data.terms.category[0].slug

}));

uiPopup.show('--data'); history.pushState(null, null, baseUrl + data.slug);},

Page 134: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Wyświetlanie popupushowPopup: function(data) {

$('.popup__wrap--data').html(templatePopup({"title": data.title, "address": data.geodata.address,"body": data.content,"rating": data.terms.post_tag ? parseInt(data.terms.post_tag[0].slug, 10) :

null,"image": data.featured_image ? data.featured_image.source : null,"categorySlug": data.terms.category[0].slug

}));

uiPopup.show('--data'); history.pushState(null, null, baseUrl + data.slug);},

Page 135: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Wyświetlanie popupushowPopup: function(data) {

$('.popup__wrap--data').html(templatePopup({"title": data.title, "address": data.geodata.address,"body": data.content,"rating": data.terms.post_tag ? parseInt(data.terms.post_tag[0].slug, 10) :

null,"image": data.featured_image ? data.featured_image.source : null,"categorySlug": data.terms.category[0].slug

}));

uiPopup.show('--data'); history.pushState(null, null, baseUrl + data.slug);},

Page 136: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Wyświetlanie popupushowPopup: function(data) {

$('.popup__wrap--data').html(templatePopup({"title": data.title, "address": data.geodata.address,"body": data.content,"rating": data.terms.post_tag ? parseInt(data.terms.post_tag[0].slug, 10) :

null,"image": data.featured_image ? data.featured_image.source : null,"categorySlug": data.terms.category[0].slug

}));

uiPopup.show('--data'); history.pushState(null, null, baseUrl + data.slug);},

Page 137: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Wyświetlanie popupushowPopup: function(data) {

$('.popup__wrap--data').html(templatePopup({"title": data.title, "address": data.geodata.address,"body": data.content,"rating": data.terms.post_tag ? parseInt(data.terms.post_tag[0].slug, 10) :

null,"image": data.featured_image ? data.featured_image.source : null,"categorySlug": data.terms.category[0].slug

}));

uiPopup.show('--data'); history.pushState(null, null, baseUrl + data.slug);},

Page 138: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Wyświetlanie popupushowPopup: function(data) {

$('.popup__wrap--data').html(templatePopup({"title": data.title, "address": data.geodata.address,"body": data.content,"rating": data.terms.post_tag ? parseInt(data.terms.post_tag[0].slug, 10) :

null,"image": data.featured_image ? data.featured_image.source : null,"categorySlug": data.terms.category[0].slug

}));

uiPopup.show('--data'); history.pushState(null, null, baseUrl + data.slug);},

Page 139: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Wyświetlanie popupushowPopup: function(data) {

$('.popup__wrap--data').html(templatePopup({"title": data.title, "address": data.geodata.address,"body": data.content,"rating": data.terms.post_tag ? parseInt(data.terms.post_tag[0].slug, 10) :

null,"image": data.featured_image ? data.featured_image.source : null,"categorySlug": data.terms.category[0].slug

}));

uiPopup.show('--data'); history.pushState(null, null, baseUrl + data.slug);},

Page 140: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Wyświetlanie popupushowPopup: function(data) {

$('.popup__wrap--data').html(templatePopup({"title": data.title, "address": data.geodata.address,"body": data.content,"rating": data.terms.post_tag ? parseInt(data.terms.post_tag[0].slug, 10) :

null,"image": data.featured_image ? data.featured_image.source : null,"categorySlug": data.terms.category[0].slug

}));

uiPopup.show('--data'); history.pushState(null, null, baseUrl + data.slug);},

Page 141: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Wyświetlanie popupushowPopup: function(data) {

$('.popup__wrap--data').html(templatePopup({"title": data.title, "address": data.geodata.address,"body": data.content,"rating": data.terms.post_tag ? parseInt(data.terms.post_tag[0].slug, 10) :

null,"image": data.featured_image ? data.featured_image.source : null,"categorySlug": data.terms.category[0].slug

}));

uiPopup.show('--data'); history.pushState(null, null, baseUrl + data.slug);},

Page 142: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Co dalej?

Page 143: WP-API - teoria i praktyka - WordUp Trójmiasto #2

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

Page 144: WP-API - teoria i praktyka - WordUp Trójmiasto #2

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

Page 145: WP-API - teoria i praktyka - WordUp Trójmiasto #2

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 146: WP-API - teoria i praktyka - WordUp Trójmiasto #2

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 147: WP-API - teoria i praktyka - WordUp Trójmiasto #2

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 148: WP-API - teoria i praktyka - WordUp Trójmiasto #2

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 149: WP-API - teoria i praktyka - WordUp Trójmiasto #2

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 150: WP-API - teoria i praktyka - WordUp Trójmiasto #2

DlaczegoDziudek ❤ WP-API ?

Page 151: WP-API - teoria i praktyka - WordUp Trójmiasto #2

• Znam dobrze WordPressowy kokpit…

• … umiem go modyfikować do swoich potrzeb …

• … i zaoszczędzić sobie sporo czasu poprzez wykorzystanie gotowych wtyczek …

• … dzięki WP-API mogę ten kokpit połączyć na front-endzie z czymkolwiek zechcę :-)

Page 152: WP-API - teoria i praktyka - WordUp Trójmiasto #2

• Znam dobrze WordPressowy kokpit…

• … umiem go dostosować do swoich potrzeb …

• … i zaoszczędzić sobie sporo czasu poprzez wykorzystanie gotowych wtyczek …

• … dzięki WP-API mogę ten kokpit połączyć na front-endzie z czymkolwiek zechcę :-)

Page 153: WP-API - teoria i praktyka - WordUp Trójmiasto #2

• Znam dobrze WordPressowy kokpit…

• … umiem go dostosować do swoich potrzeb …

• … i zaoszczędzić sobie sporo czasu poprzez wykorzystanie gotowych wtyczek …

• … dzięki WP-API mogę ten kokpit połączyć na front-endzie z czymkolwiek zechcę :-)

Page 154: WP-API - teoria i praktyka - WordUp Trójmiasto #2

• Znam dobrze WordPressowy kokpit…

• … umiem go dostosować do swoich potrzeb …

• … i zaoszczędzić sobie sporo czasu poprzez wykorzystanie gotowych wtyczek …

• … dzięki WP-API mogę ten kokpit połączyć na front-endzie z czymkolwiek zechcę :-)

Page 155: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Kod przykładu:

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

Page 156: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Lektura

• Wykorzystanie taksonomii w WP-API http://torquemag.io/working-taxonomies-using-json-rest-api/

• Tworzenie widżetów z użyciem WP-API http://webdevstudios.com/2015/03/26/how-to-create-an-auto-updating-widget-using-wp-api/

• Postęp łączenia WP-API z WordPressem https://github.com/WP-API/WP-API/issues/571

Page 157: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Tomasz Dziuda

Lead Developer @

@dziudek

http://dziudek.pl

[email protected]

Page 158: WP-API - teoria i praktyka - WordUp Trójmiasto #2

Pytania?