wtyczki do wordpressa. programowanie dla profesjonalistów · podstawy wtyczek .....35 utworzenie...

53

Upload: others

Post on 12-Jul-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288
Page 2: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

Tytuł oryginału: Professional WordPress Plugin Development

Tłumaczenie: Robert Górczyński

ISBN: 978-83-246-3564-1

© 2011 by Wiley Publishing, Inc., Indianapolis, Indiana

All Rights Reserved. Authorized translation from the English language edition published by John Wiley & Sons Limited. Responsibility for the accuracy of the translation rests solely with Helion S. A. and is not the responsibility of John Wiley & Sons Limited. No part of this book may be reproduced in any form without the written permission of the original copyright holder, John Wiley & Sons Limited.

Wiley, the Wiley logo, Wrox, the Wrox logo, Wrox Programmer to Programmer, and related trade dress are trademarks or registered trademarks of John Wiley & Sons, Inc. and/or its affiliates, in the United States and other countries, and may not be used without written permission. WordPress is a registered trademark of Automattic, Inc. All other trademarks are the property of their respective owners.Wiley Publishing, Inc. is not associated with any product or vendor mentioned in the book.

Translation copyright © 2012 by Wydawnictwo Helion.

All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher.

Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji.

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.

Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce.

Wydawnictwo HELIONul. Kościuszki 1c, 44-100 GLIWICEtel. 32 231 22 19, 32 230 98 63e-mail: [email protected]: http://helion.pl (księgarnia internetowa, katalog książek)

Pliki z przykładami omawianymi w książce można znaleźć pod adresem: ftp://ftp.helion.pl/przyklady/wtywor.zip

Drogi Czytelniku!Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/wtyworMożesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.

Printed in Poland.

• Kup książkę• Poleć książkę • Oceń książkę

• Księgarnia internetowa• Lubię to! » Nasza społeczność

Page 3: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

Spis treści � 5

Spis treści

O autorach ..................................................................................................... 15

Wstęp ............................................................................................................. 17

Wprowadzenie .............................................................................................. 19

Rozdział 1. Wprowadzenie do wtyczek .......................................................................... 23

Co to jest wtyczka? .......................................................................................................23W jaki sposób wtyczki współdziałają z platformą WordPress? .......................24Kiedy wtyczki są wczytywane? ..............................................................................25

Dostępne wtyczki ..........................................................................................................25Oficjalny katalog wtyczek ......................................................................................26Przykłady popularnych wtyczek ...........................................................................26Popularne tagi wtyczek ..........................................................................................27

Zalety wtyczek ...............................................................................................................27Brak konieczności modyfikacji jądra platformy ................................................27Nie trzeba wyważać otwartych drzwi ..................................................................28Oddzielenie wtyczek i motywów ..........................................................................28Łatwe uaktualnienia ...............................................................................................29Łatwiejsze dzielenie się wtyczkami i ich ponowne używanie ...........................29Wtyczki są oddzielone od siebie ...........................................................................29Społeczność tworząca wtyczki ..............................................................................30

Instalacja wtyczek i zarządzanie nimi ........................................................................30Instalacja wtyczki ....................................................................................................30Zarządzanie wtyczkami .........................................................................................31Edycja wtyczek ........................................................................................................31Katalog wtyczek ......................................................................................................32Typy wtyczek ...........................................................................................................32Testowanie funkcji wtyczek ..................................................................................33

Podsumowanie ..............................................................................................................34

Rozdział 2. Podstawy wtyczek ........................................................................................ 35

Utworzenie pliku wtyczki ............................................................................................35Nadanie nazwy wtyczce .........................................................................................35Używanie katalogu .................................................................................................36

Stosowanie rozsądnych praktyk .................................................................................36Stosowanie prefiksu w każdej sytuacji .................................................................36Organizacja pliku ....................................................................................................37Struktura katalogów ...............................................................................................37

Page 4: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

6 � WTYCZKI DO WORDPRESSA

Wymagania dotyczące nagłówka ................................................................................38Utworzenie nagłówka ............................................................................................38Licencja wtyczki ......................................................................................................39

Określanie ścieżek dostępu ..........................................................................................39Ścieżki dostępu wtyczki .........................................................................................40Lokalne ścieżki dostępu .........................................................................................40Adresy URL .............................................................................................................41

Aktywacja i dezaktywacja funkcji ...............................................................................42Funkcja aktywacji wtyczki .....................................................................................42Utworzenie ustawień domyślnych podczas aktywacji ......................................43Funkcja dezaktywacji wtyczki ...............................................................................43Dezaktywacja to nie dezinstalacja wtyczki ..........................................................44

Metody dezinstalacji .....................................................................................................44Dlaczego dezinstalacja wtyczki jest konieczna? .................................................44Plik uninstall.php ...................................................................................................44Zaczep uninstall ......................................................................................................45

Standardy tworzenia kodu ...........................................................................................46Twórz dokumentację kodu ...................................................................................46Nazwy zmiennych, funkcji i plików .....................................................................47Apostrof i cudzysłów ..............................................................................................47Wcięcia .....................................................................................................................48Styl stosowania nawiasów ......................................................................................48Używanie spacji ......................................................................................................49Skrócone znaczniki PHP .......................................................................................49Polecenia SQL .........................................................................................................49

Lista rzeczy do sprawdzenia podczas prac nad wtyczkami .....................................49Podsumowanie ..............................................................................................................50

Rozdział 3. Zaczepy .......................................................................................................... 51

Akcje ...............................................................................................................................52Czym jest akcja? ......................................................................................................53Funkcje zaczepu akcji ............................................................................................54Najczęściej używane zaczepy akcji .......................................................................58

Filtry ...............................................................................................................................61Funkcje zaczepu filtru ............................................................................................63Funkcje szybko zwracające wartość .....................................................................67Najczęściej używane zaczepy filtru ......................................................................68

Używanie zaczepów z poziomu klasy ........................................................................71Tworzenie własnych zaczepów ...................................................................................72

Zalety utworzenia własnego zaczepu ...................................................................73Przykład utworzenia własnego zaczepu akcji .....................................................73Przykład własnego zaczepu filtru .........................................................................73

W jaki sposób wyszukiwać zaczepy? ..........................................................................75Wyszukiwanie zaczepów w kodzie tworzącym jądro WordPress ...................75Zaczepy zmienne ....................................................................................................75Listy zaczepów ........................................................................................................76

Podsumowanie ..............................................................................................................76

Page 5: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

Spis treści � 7

Rozdział 4. Integracja z platformą WordPress ............................................................... 77

Dodawanie menu i podmenu .....................................................................................77Utworzenie menu najwyższego poziomu ...........................................................77Dodawanie podmenu .............................................................................................78Dodawanie elementu menu do już istniejącego menu ......................................80

Tworzenie widgetów ....................................................................................................82Utworzenie widgetu ...............................................................................................82Widget zaawansowany ...........................................................................................87Tworzenie widgetów kokpitu ...............................................................................92Utworzenie widgetu kokpitu wraz z opcjami .....................................................93

Pola użytkowników ......................................................................................................96Dodawanie własnego pola użytkownika .............................................................97Zapis danych pola użytkownika ...........................................................................97Zaawansowane pole użytkownika ......................................................................101

Zachowanie spójności ................................................................................................106Korzystanie z interfejsu użytkownika platformy WordPress .........................106

Podsumowanie ............................................................................................................113

Rozdział 5. Internacjonalizacja .....................................................................................115

Internacjonalizacja i tłumaczenie na inne języki ....................................................115Dlaczego warto przeprowadzać internacjonalizację? ......................................116Zrozumienie zagadnienia internacjonalizacji w profesjonalnej pracy ..........116Przygotowanie wtyczki do tłumaczenia na inne języki ...................................117Wyświetlanie i zwracanie ciągów tekstowych ..................................................118Używanie miejsc zarezerwowanych ...................................................................125Internacjonalizacja kodu JavaScript ..................................................................127

Tworzenie plików tłumaczenia .................................................................................130Pliki MO i PO ........................................................................................................130Narzędzia służące do tłumaczenia .....................................................................130W jaki sposób utworzyć plik POT? ....................................................................131Gdzie przechowywać pliki tłumaczeń? ..............................................................131

Podsumowanie ............................................................................................................132

Rozdział 6. Bezpieczeństwo wtyczki .............................................................................133

Zabezpieczenie wtyczki ..............................................................................................133Czym jest zapewnienie bezpieczeństwa wtyczce? ............................................134Czym nie jest zapewnienie bezpieczeństwa wtyczce? ......................................134

Uprawnienia użytkownika ........................................................................................134W jaki sposób używać funkcji current_user_can()? ........................................134Nie sprawdzaj zbyt wcześnie ...............................................................................135

Unikalne identyfikatory .............................................................................................136Uprawnienia kontra zamiary ..............................................................................136Czym jest unikalny identyfikator? .....................................................................137Jak tworzyć i weryfikować unikalne identyfikatory? .......................................137Unikalne identyfikatory w skryptach Ajax .......................................................142

Weryfikacja i oczyszczenie danych ..........................................................................143Potrzeba weryfikacji i oczyszczania danych .....................................................143Dobra praktyka: identyfikacja potencjalnie niebezpiecznych danych ..........144Weryfikacja czy oczyszczanie danych wejściowych? .......................................146Przykłady weryfikacji i oczyszczania danych ...................................................147

Page 6: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

8 � WTYCZKI DO WORDPRESSA

Formatowanie poleceń SQL ......................................................................................163Obiekt $wpdb ........................................................................................................163Dlaczego metody obiektu wpdb są lepsze? .......................................................163Metody typu „wszystko w jednym” ...................................................................164Najczęściej stosowane metody ............................................................................166Ochrona zapytań przed atakami typu SQL Injection ......................................170Różne metody i właściwości obiektu wpdb ......................................................172

Dobre nawyki bezpieczeństwa ..................................................................................172Podsumowanie ............................................................................................................174

Rozdział 7. Ustawienia wtyczki .....................................................................................175

API Options .................................................................................................................175Zapisywanie opcji .................................................................................................175Zapisywanie tablicy opcji ....................................................................................176Pobieranie opcji ....................................................................................................177Wczytywanie tablicy opcji ...................................................................................178Usuwanie opcji ......................................................................................................178Parametr autoload ................................................................................................179

API Settings .................................................................................................................180Zalety API Settings ...............................................................................................181Funkcje API Settings ............................................................................................181Zebranie całości: pełna strona zarządzania wtyczką .......................................185Usprawnienie reakcji funkcji i weryfikacja błędów .........................................187Dodawanie pól na istniejącej stronie .................................................................188

API Transients ............................................................................................................192Zapisywanie opcji, która ma utracić ważność ..................................................192Pobieranie opcji, która ma utracić ważność .....................................................192Usunięcie opcji, która utraciła ważność ............................................................192Praktyczny przykład użycia krótkotrwałych danych .......................................193Szczegółowe informacje techniczne ...................................................................193Idea krótkotrwałych danych ...............................................................................193

Zapisywanie ustawień poszczególnych użytkowników .........................................194Tworzenie wtyczki ................................................................................................194Metadane użytkownika ........................................................................................194Uaktualnianie metadanych użytkownika ..........................................................195Pobieranie metadanych użytkownika ................................................................196Usunięcie metadanych użytkownika .................................................................196Pobieranie identyfikatora użytkownika ............................................................197Dodawanie pól na stronie profilu ......................................................................197Wtyczka BOJ Admin Lang ..................................................................................199Ustawienia dla poszczególnych użytkowników — najlepsze praktyki .........200

Przechowywanie danych we własnych tabelach .....................................................201Typy danych ..........................................................................................................201Standardowe tabele WordPress ..........................................................................202Tworzenie własnej tabeli .....................................................................................202Uaktualnienie struktury własnej tabeli ..............................................................203Uzyskanie dostępu do własnej tabeli .................................................................206

Podsumowanie ............................................................................................................207

Page 7: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

Spis treści � 9

Rozdział 8. Użytkownicy ................................................................................................209

Praca z użytkownikami ..............................................................................................210Funkcje użytkownika ...........................................................................................210Tworzenie, uaktualnianie i usuwanie użytkowników .....................................214Dane użytkownika ................................................................................................218Metadane użytkownika ........................................................................................223

Role i możliwości ........................................................................................................229Czym są role i możliwości? .................................................................................230Role domyślne .......................................................................................................230Własne role ............................................................................................................231

Ograniczanie dostępu ................................................................................................231Sprawdzanie uprawnień użytkownika ...............................................................232Czy użytkownik jest administratorem? .............................................................236Nadanie własnych uprawnień .............................................................................237

Dostosowanie ról do własnych potrzeb ...................................................................238Tworzenie roli .......................................................................................................238Usunięcie roli ........................................................................................................239Dodanie możliwości do roli ................................................................................241Usuwanie możliwości z roli ................................................................................241Wtyczka obsługująca własne role i możliwości ................................................242

Podsumowanie ............................................................................................................245

Rozdział 9. API HTTP ......................................................................................................247

Szybki kurs wykonywania żądań HTTP ..................................................................247Czym jest żądanie HTTP? ...................................................................................247Jak wykonywać żądania HTTP w PHP? ............................................................250

Funkcje obsługi HTTP oferowane przez WordPress ............................................251Funkcje rodziny wp_remote_* ...........................................................................252Konfiguracja zaawansowana i wskazówki ........................................................257

Ćwiczenie praktyczne: odczyt formatu JSON z zewnętrznego API ....................263Pobieranie i odczytywanie danych JSON ..........................................................263Funkcjonująca wtyczka ........................................................................................264

Ćwiczenie praktyczne: wysyłanie danych do zdalnego API .................................267Formatowanie parametrów dla żądań POST ...................................................267Gotowa wtyczka ....................................................................................................268

Ćwiczenie praktyczne: odczyt dowolnej treści .......................................................269Utworzenie własnego repozytorium wtyczki ..........................................................270

Jak działa proces uaktualnienia wtyczki na platformie WordPress? .............270Wykonywanie żądań do alternatywnego API z poziomu wtyczki ................272Utworzenie alternatywnego API ........................................................................274Kilka ostrzeżeń dotyczących własnych API ......................................................276

Przypadek specjalny: pobieranie zdalnych wiadomości RSS ................................276Podsumowanie ............................................................................................................277

Rozdział 10. API Shortcode ..............................................................................................279

Tworzenie skrótu ........................................................................................................279Czym jest skrót? ....................................................................................................279Rejestracja własnego skrótu ................................................................................280

Wskazówki dotyczące skrótów .................................................................................284Pomyśl o prostocie ...............................................................................................284Pamiętaj o dynamiczności ...................................................................................287

Page 8: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

10 � WTYCZKI DO WORDPRESSA

Wewnętrzny sposób działania ............................................................................288Kod BBCode we wtyczce obsługującej komentarze ........................................290Ograniczenia skrótów podczas obsługi struktur zagnieżdżonych .................292

Integracja z usługą Google Mapy .............................................................................293Uzyskanie dostępu do API Google Geocoding ................................................293Przechowywanie wyników ..................................................................................295Uzyskanie dostępu do API Google Maps ..........................................................296

Więcej pomysłów dotyczących skrótów ..................................................................300Wyświetlanie treści jedynie dla zalogowanych użytkowników ......................301Wyświetlenie treści ograniczonej czasowo .......................................................302Zaciemnienie adresu e-mail ................................................................................302

Podsumowanie ............................................................................................................303

Rozdział 11. Rozbudowa wpisów bloga: metadane,

własne typy wpisów bloga i taksonomie ..................................................305

Tworzenie własnych typów wpisów bloga ..............................................................306Możliwe typy wpisów bloga ................................................................................306Rejestracja typu wpisu bloga ...............................................................................306Ustawianie etykiet we własnym typie wpisu bloga ..........................................311Wykorzystanie własnych możliwości ................................................................313Dołączanie istniejących taksonomii ...................................................................314

Używanie własnych typów wpisów bloga ...............................................................315Utworzenie pętli własnego typu wpisu bloga ...................................................315Pobieranie treści własnego typu wpisu bloga ...................................................317Sprawdzenie istnienia typu wpisu bloga ...........................................................318

Metadane wpisu bloga ...............................................................................................319Dodawanie metadanych wpisu bloga ................................................................320Pobieranie metadanych .......................................................................................321Uaktualnienie metadanych wpisu bloga ...........................................................321Usuwanie metadanych .........................................................................................322

Tworzenie własnych taksonomii ..............................................................................323Zrozumienie taksonomii .....................................................................................323Rejestracja własnej taksonomii ...........................................................................324Przypisanie taksonomii do typu wpisu bloga ...................................................329

Używanie własnych taksonomii ...............................................................................329Pobieranie taksonomii .........................................................................................329Używanie taksonomii wraz z wpisami bloga ....................................................330Tagi warunkowe taksonomii ..............................................................................332

Wtyczka typu wpisu bloga oraz taksonomii ...........................................................334Podsumowanie ............................................................................................................336

Rozdział 12. Technologie JavaScript i Ajax na platformie WordPress ........................337

Krótkie wprowadzenie do jQuery ............................................................................337Zalety wynikające z używania jQuery ................................................................337Krótki kurs jQuery ...............................................................................................338

Technologia Ajax ........................................................................................................341Czym jest Ajax? .....................................................................................................341Najlepsze praktyki dotyczące technologii Ajax ................................................344

Dodawanie kodu JavaScript do WordPress ............................................................345Prawidłowy sposób dołączania skryptów .........................................................345Gdzie umieszczać skrypty? ..................................................................................351

Page 9: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

Spis treści � 11

Dodawanie skryptów jedynie wtedy, gdy są potrzebne ...................................353Skrypty dynamiczne na platformie WordPress ...............................................357

Technologia Ajax na platformie WordPress ...........................................................360Technologia Ajax na platformie WordPress: reguły .......................................360Kompletny przykład: natychmiastowe odnośniki „Czytaj dalej” ..................362Kolejny przykład: usunięcie komentarza ze strony .........................................369Usuwanie błędów podczas używania technologii Ajax ...................................373

Podsumowanie ............................................................................................................374

Rozdział 13. Cron ..............................................................................................................375

Czym jest cron? ...........................................................................................................375W jaki sposób działa demon cron? ....................................................................375

Tworzenie harmonogramu zadań cron ...................................................................376Utworzenie powtarzającego się zadania harmonogramu ...............................376Utworzenie jednorazowego zadania harmonogramu .....................................378Usunięcie zadania z harmonogramu .................................................................380Zdefiniowanie własnych odstępów czasu .........................................................381Wyświetlenie zadań harmonogramu cron ........................................................381

Prawdziwy cron ..........................................................................................................385Przykłady praktyczne .................................................................................................385

Usuwanie co tydzień wcześniejszych wersji wpisu bloga ...............................385Wtyczka automatycznie wysyłająca wiadomość e-mail ..................................390Wtyczka usuwająca komentarze ........................................................................393

Podsumowanie ............................................................................................................399

Rozdział 14. API Rewrite ..................................................................................................401

Dlaczego czasem trzeba zmieniać adresy URL? .....................................................401Zasady dotyczące odnośników bezpośrednich .................................................402Moduł mod_rewrite serwera Apache ................................................................402Zmiany adresów URL na platformie WordPress .............................................403

W jaki sposób WordPress obsługuje zapytania? ....................................................404Ogólny opis procesu wykonania zapytania ......................................................404Obiekt rewrite .......................................................................................................405Obiekt query ..........................................................................................................405Co można zrobić przy użyciu wtyczek? .............................................................406

Przykłady praktyczne .................................................................................................406Zmiana adresu URL w celu utworzenia listy sklepów .....................................407Tworzenie nowej struktury odnośników bezpośrednich

oraz integracja ze stronami, które nie powstały w WordPress ....................412Wyświetlanie produktów sklepu ........................................................................414Dodawanie punktu końcowego i zmiana formatu danych wyjściowych .....415Dodanie własnego kanału wiadomości informującego o ostatnio

dodanych obrazach ............................................................................................419Podsumowanie ............................................................................................................421

Rozdział 15. Sieć Multisite ...............................................................................................423

Różnice .........................................................................................................................424Standardowa konfiguracja WordPress kontra sieć Multisite .........................424Zrozumienie terminologii sieci Multisite ..........................................................424Zalety sieci Multisite ............................................................................................425

Włączenie sieci Multisite na platformie WordPress ..............................................425

Page 10: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

12 � WTYCZKI DO WORDPRESSA

Funkcje sieci Multisite ...............................................................................................427Potęga identyfikatora bloga .................................................................................427Najczęściej używane funkcje ...............................................................................427Przełączenie i przywracanie witryn internetowych .........................................429Przykłady skrótów uzyskania dostępu do treści sieci ......................................432Przykład widgetu z treścią sieciową ...................................................................436Utworzenie nowej witryny ..................................................................................443Opcje witryny sieci Multisite ..............................................................................448Użytkownicy w sieci .............................................................................................448Rola Superadministratora w sieci Multisite ......................................................452Sprawdzenie właściciela witryny ........................................................................453Dane statystyczne dotyczące sieci ......................................................................454

Schemat bazy danych sieci Multisite ........................................................................455Tabele stosowane w sieci Multisite ....................................................................455Tabele przeznaczone dla konkretnych witryn ..................................................455

Podsumowanie ............................................................................................................456

Rozdział 16. Usuwanie błędów i optymalizacja .............................................................457

Zapewnienie (lub nie) obsługi starszych wersji ......................................................457Aktualizacja oprogramowania zgodnie z cyklem rozwojowym

WordPress ...........................................................................................................458Funkcje uznane za przestarzałe ..........................................................................459Obsługa zbędnych instalacji ................................................................................460

Usuwanie błędów ........................................................................................................460Włączenie trybu usuwania błędów ....................................................................461Wyświetlanie komunikatów związanych z usuwaniem błędów ....................461Poprawianie błędów wskazywanych przez komunikaty .................................462

Rejestrowanie błędów ................................................................................................466Włączenie rejestrowania błędów ........................................................................466Położenie pliku dziennika błędów .....................................................................467Plik dziennika błędów ..........................................................................................467

Buforowanie ................................................................................................................467Zapisywanie, wczytywanie i usuwanie buforowanych danych ......................468Buforowanie danych we wtyczce ........................................................................469

Podsumowanie ............................................................................................................471

Rozdział 17. Działania marketingowe ............................................................................473

Wybór licencji dla wtyczki ........................................................................................474Różne opcje ...........................................................................................................474Dlaczego licencja ma znaczenie? ........................................................................475Zarabianie pieniędzy pomimo stosowania licencji GPL .................................476

Udostępnienie wtyczki na witrynie WordPress.org ..............................................477Utworzenie konta .................................................................................................478Zgłoszenie wtyczki do oficjalnego repozytorium ............................................479Konfiguracja SVN ................................................................................................479Utworzenie pliku readme.txt ..............................................................................480

Rozsławienie wtyczki ..................................................................................................483Nadawanie nazwy wtyczce ..................................................................................483Zbudowanie witryny internetowej .....................................................................485Utworzenie strony dla wtyczki ...........................................................................487Ogłoszenie wydania wtyczki ...............................................................................487

Page 11: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

Spis treści � 13

Pomoc techniczna dla użytkowników wtyczki .................................................488Zbieranie informacji od użytkowników ............................................................488Wyjście z piwnicy .................................................................................................490Inne metody promocji .........................................................................................490

Podsumowanie ............................................................................................................491

Rozdział 18. Narzędzia programisty ...............................................................................493

Jądro platformy jako punkt odniesienia ..................................................................493Dokumentacja osadzona na platformie .............................................................493Wyszukiwanie funkcji ..........................................................................................495Najważniejsze pliki tworzące jądro platformy ..................................................495

Codex ............................................................................................................................497Przeszukiwanie witryny Codex ..........................................................................497Opis funkcji ...........................................................................................................498

Narzędzia oferowane przez inne witryny internetowe ..........................................498PHPXref .................................................................................................................498Baza danych zaczepów platformy WordPress ..................................................500

Zasoby oferowane przez społeczność ......................................................................500Fora pomocy technicznej ....................................................................................500Listy dyskusyjne ....................................................................................................501Czat WordPress ....................................................................................................501Informacje dotyczące prac rozwojowych nad WordPress ..............................502Zgłaszanie pomysłów dla WordPress ................................................................502Obsługiwane przez społeczność witryny z nowościami ..................................502Wydarzenia lokalne ..............................................................................................503

Narzędzia .....................................................................................................................503Przeglądarka internetowa ....................................................................................504Edytor tekstu .........................................................................................................504Obsługa plików za pomocą FTP, SFTP i SSH ..................................................505phpMyAdmin .......................................................................................................505

Podsumowanie ............................................................................................................506

Skorowidz ....................................................................................................507

Page 12: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

14 � WTYCZKI DO WORDPRESSA

Page 13: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

10API Shortcode

W TYM ROZDZIALE:

� Tworzenie własnego skrótu� Rejestracja skomplikowanych i sparametryzowanych skrótów� Zaawansowane wskazówki dotyczące skrótów� Połączenie witryny z usługą Google Mapy

Skróty (ang. shortcode) to charakterystyczny dla WordPress kod pozwalający na wykonywanieróżnych operacji przy minimalnym wysiłku, np. osadzanie treści lub tworzenie obiektów, którenormalnie wymagałyby użycia dużej ilości skomplikowanego kodu.

W tym rozdziale dowiesz się, jak za pomocą jedynie niewielkiej liczby znaków umożliwić użytkow-nikom Twoich wtyczek rozbudowę wpisów bloga o zaawansowaną treść.

Tworzenie skrótu

W tym podrozdziale przekonasz się, czym są skróty oraz jak można je tworzyć; zaczniemy odzamienników w postaci prostych ciągów tekstowych, a skończymy na funkcjach zaawansowanychwraz z parametrami.

Czym jest skrót?

API Shortcode pozwala na tworzenie prostego kodu makro, czasami nazywanego BBCode z racjipodobieństwa do popularnej składni w różnego rodzaju forach i serwisach komputerowych.

Ogólnie rzecz biorąc, skrót to prosta składnia znaczników w nawiasach kwadratowych, np.[znacznik], stosowanych we wpisach bloga. W trakcie generowania i wyświetlania takiego wpisubloga skrót jest dynamicznie zastępowany bardziej skomplikowaną i zdefiniowaną przez użytkow-nika treścią. Na rysunku 10.1 pokazano przykład wtyczki skrótu, która znacznik [date] zastępujebieżącą datą i godziną.

Page 14: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

280 � ROZDZIAŁ 10. API SHORTCODE

Rysunek 10.1. Wtyczka skrótu w działaniu

Platforma WordPress domyślnie rejestruje wiele skrótów gotowych do wykorzystania. Przykła-dowo podczas wysyłania do serwera wielu obrazów dołączonych do danego wpisu bloga możnaw nim umieścić skrót [gallery], co spowoduje zastąpienie obrazów ładnie sformatowaną galerią.

Z technicznego punktu widzenia skrót może być dowolnym ciągiem tekstowym odpowiednimdo użycia w charakterze klucza tablicy. Przykładowo wymienione poniżej ciągi tekstowe możnazastosować jako skróty:� [foo],� [Foo],� [123],� [133t],� [Witaj Jestem Jan Kowalski].

W praktyce, w celu zachowania prostoty i uniknięcia potencjalnych konfliktów pomiędzy różnymiskrótami skróty będziesz rejestrował jako proste ciągi tekstowe zapisane małymi literami.

UWAGA

Nie wolno rejestrować własnych skrótów o nazwach [wp_caption], [caption], [gallery]i [embed], ponieważ są już zarejestrowane przez WordPress.

Rejestracja własnego skrótu

W tym punkcie dowiesz się, w jaki sposób rejestrować własne skróty. Ponadto poznasz praktycznesposoby ich wykorzystania, od prostego zastępowania tagów aż po bardziej skomplikowanei sparametryzowane dane wyjściowe.

Przedstawione poniżej wtyczki skrótów używają prefiksu w postaci boj_scX, gdzie X oznaczaliczbę.

Page 15: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

Tworzenie skrótu � 281

[ksiazka]

Celem użycia skrótu jest przyśpieszenie wprowadzania danych i zastąpienie często stosowanychzdań ich skrótami, łatwymi do zapamiętania i szybszymi do wpisania.

Jeżeli np. często wspominasz tytuł książki, którą promujesz w serwisie Amazon, wówczas zamiastza każdym razem pisać <a href="http://www.amazon.com/dp/0470560541">ksi��ka</a>,o wiele szybciej i prościej będzie napisać po prostu [ksiazka], prawda?

W tym celu trzeba użyć funkcji add_shortcode() wymagającej podania dwóch parametrów:� wzorca znacznika (bez otaczających go nawiasów kwadratowych);� wywoływanej funkcji odpowiedzialnej za zastąpienie znacznika.

<?php/*Plugin Name: Przykład skrótu nr 1Plugin URI: http://przyklad.pl/Description: Zastępuje znacznik [ksiazka] długim odnośnikiem prowadzącym do serwisu Amazon.Version: 1.0Author: OzhAuthor URI: http://wrox.com/*/// Rejestracja nowego skrótu: [ksiazka].add_shortcode( 'ksiazka', 'boj_sc1_book' );// Funkcja wywoływana w celu zastąpienia znacznika [ksiazka].function boj_sc1_book() { return '<a href="http://www.amazon.com/dp/0470560541">ksi��ka<a/>';}?>

Powyższy fragment kodu pochodzi z pliku plugin_boj_sc1.php.

Jak to działa? 1. Za pomocą funkcji add_shortcode() zarejestrowano znacznik [ksiazka] jako nowy skrót,

który będzie zastąpiony przez dane wyjściowe wygenerowane przez funkcję boj_sc1_book(). 2. Wywoływana funkcja zastępująca skrót (tutaj: boj_sc1_book()) musi na końcu zwrócić

wartość za pomocą polecenia return. Błędem bardzo często popełnianym przezpoczątkujących jest użycie do wyświetlenia wartości polecenia echo zamiast return. Trzebapamiętać, że w tym przypadku nie można użyć polecenia echo.

Po aktywacji wtyczki można już napisać: „Kup moją [ksiazka]” na stronie wpisu bloga, a znacz-nik zostanie zastąpiony odnośnikiem prowadzącym na stronę w serwisie Amazon.

Warto zwrócić uwagę, że platforma WordPress jest bardzo elastyczna w zakresie składni skrótu:można stosować znaczniki mniej lub więcej przypominające znaczniki XHTML dowolnego typu,np. [ksiazka], [ksiazka ], [ksiazka/] i [ksiazka /]. Jedynym warunkiem jest, aby pomiędzynawiasem otwierającym znacznik i samym znacznikiem nie było spacji.

[ksiazki tytul="xkcd"]

Co zrobić w sytuacji, gdy chcesz promować więcej niż jedną książkę?

Page 16: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

282 � ROZDZIAŁ 10. API SHORTCODE

Pierwszą opcją będzie utworzenie wielu skrótów w sposób przedstawiony powyżej, po jednym dlakażdej książki (np. [ksiazka1], [ksiazka2], [ksiazka3] itd.). Jednak znacznie bardziej eleganc-kim rozwiązaniem będzie użycie atrybutu dla skrótu. W ten sposób można zastosować sprytniejsząskładnię w postaci [ksiazki tytul="prowp"] lub [ksiazki tytul="xkcd"].

W kodzie ponownie będzie użyta ta sama funkcja add_shortcode(), ale tym razem z nowymparametrem $attr, który pobiera tablicę atrybutu — parę wartości.

<?php/*Plugin Name: Przykład skrótu nr 2Plugin URI: http://przyklad.pl/Description: Zastępuje znacznik [ksiazki tytul="xxx"] różnymi odnośnikami prowadzącymi do serwisu

�Amazon.Version: 1.0Author: OzhAuthor URI: http://wrox.com/*/// Rejestracja nowego skrótu: [ksiazki tytul="xxx"].add_shortcode( 'ksiazki', 'boj_sc2_multiple_books' );// Funkcja wywoływana w celu zastąpienia znacznika [ksiazki].function boj_sc2_multiple_books( $attr ) { switch( $attr['tytul'] ) { case 'xkcd': $asin = '0615314465'; $title = 'XKCD Volume 0'; break; default: case 'prowp': $asin = '0470560541'; $title = 'Professional WordPress'; break; } return "<a href='http://www.amazon.com/dp/$asin'>$title<a/>";}?>

Powyższy fragment kodu pochodzi z pliku plugin_boj_sc2.php.

Jak to działa? 1. Za pomocą funkcji add_shortcode() zarejestrowano znacznik [ksiazki] jako nowy skrót. 2. Funkcja odpowiedzialna za zastąpienie znacznika boj_sc2_multiple_books() oczekuje

podania parametru $attr w postaci tablicy atrybutu — pary wartości do użycia w skrócie.Przykładowo po użyciu znacznika [ksiazki tytul="prowp"] funkcja otrzyma parametrw postaci array( 'tytul' => 'prowp' ).

3. Funkcja odpowiedzialna za zastąpienie znacznika będzie zwracała różne wartości w zależnościod przekazanego jej atrybutu.

4. Użycie znacznika [ksiazki] bez atrybutu spowoduje, że funkcja otrzyma pusty ciągtekstowy. W takim przypadku zwrócona będzie wartość domyślna zdefiniowana w kodzie.

[amazon asin="12345"]tytuł książki[/amazon]

Przygotowaną powyżej wtyczkę można jeszcze bardziej usprawnić, czyli umożliwić sparametry-zowanie tekstu w odnośniku prowadzącym do serwisu Amazon.

Page 17: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

Tworzenie skrótu � 283

Użyta będzie ponownie ta sama funkcja add_shortcode(), ale tym razem z drugim parametrem —$content — który będzie przekazywał ciąg tekstowy wykorzystany następnie jako tekst w odnośniku.

<?php/*Plugin Name: Przykład skrótu nr 3Plugin URI: http://przyklad.pl/Description: Zastępuje znacznik [amazon isbn="xxx"]tytul ksiazki[/amazon].Version: 1.0Author: OzhAuthor URI: http://wrox.com/*/// Rejestracja nowego skrótu: [amazon isbn="123"]tytul ksiazki[/amazon].add_shortcode( 'amazon', 'boj_sc3_amazon' );// Funkcja wywoływana w celu zastąpienia znacznika [amazon].function boj_sc3_amazon( $attr, $content ) { // Pobranie numeru ASIN (Amazon Standard Identification Number). if( isset( $attr['asin'] ) ) { $asin = preg_replace( '/[^\d]/', '', $attr['asin'] ); } else { $asin = '0470560541'; } // Oczyszczenie treści lub ustawienie domyślnej. if( !empty( $content ) ) { $content = esc_html( $content ); } else { if( $asin == '0470560541' ) { $content = 'Professional WordPress'; } else { $content = 'ta ksi��ka'; } } return "<a href='http://www.amazon.com/dp/$asin'>$content<a/>";}?>

Powyższy fragment kodu pochodzi z pliku plugin_boj_sc3.php.

Jak to działa? 1. Zarejestrowano kolejny skrót, tym razem używając znacznika [amazon]. 2. Funkcja odpowiedzialna za zastąpienie znacznika boj_sc3_amazon() oczekuje dwóch

opcjonalnych parametrów: tablicy atrybutu — pary wartości do użycia w skrócie oraz ciągutekstowego umieszczonego pomiędzy znacznikami skrótu otwierającym i zamykającym.

3. Funkcja odpowiedzialna za zastąpienie znacznika musi obsłużyć różne kombinacjebrakującego atrybutu w postaci numeru ASIN (ang. Amazon Standard IdentificationNumber) i (lub) tytułu książki: znaczniki [amazon], [amazon asin="123"] i [amazon]superksi��ka[/amazon] działają bez problemów.

4. Skrót może zwrócić dowolną treść, więc trzeba pamiętać o zastosowaniu technik omówionychw rozdziale 6. Numer ASIN trzeba oczyścić, aby składał się jedynie z cyfr. Ponadto należysię upewnić, że tytuł książki może być bezpiecznie wyświetlony w Twoim blogu i nie zniszczyznacznika <a>, w którym będzie umieszczony.

Page 18: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

284 � ROZDZIAŁ 10. API SHORTCODE

Podsumowanie: funkcja add_shortcode()

i funkcja odpowiedzialna za zastąpienie znacznika

Podczas rejestracji nowego skrótu dwa parametry definiują wzorzec znacznika w nawiasach kwa-dratowych oraz funkcję wywoływaną w celu zastąpienia znacznika:

<?phpadd_shortcode( 'boj', 'boj_my_shortcode' );?>

Funkcja odpowiedzialna za zastąpienie znacznika pobiera dwa parametry (puste, jeśli zostanąpominięte), czyli tablicę atrybutu — para wartości — oraz ciąg tekstowy definiujący treść umiesz-czaną pomiędzy znacznikami skrótu otwierającym i zamykającym. Podobnie jak w kodzie HTML,wielkość liter w atrybutach nie ma znaczenia.

Tak jak w każdej innej funkcji PHP, istnieje możliwość zdefiniowania wartości domyślnych. Trzebapamiętać, że funkcja odpowiedzialna za zastąpienie znacznika musi zwrócić wartość.

<?phpfunction boj_my_shortcode( $attr = array( 'var' => 'warto��' ), $content =

�'ksi��ka' ) { // $attr to tablica asocjacyjna. // $content to ciąg tekstowy. return $something;}?>

Atrybuty skrótu nie rozróżniają wielkości liter, mogą mieć dowolną wartość lub nie mieć jejwcale, a także obsługują znaki cudzysłowu lub akceptują ich brak. Przedstawione poniżej przykładypokazują wartości tablicy $attr w funkcji odpowiedzialnej za zastąpienie znacznika, w zależnościod sposobu użycia skrótu:� [boj] : $attr będzie pustym ciągiem tekstowym;� [boj hello] : $attr będzie tablicą array( 'hello' );� [boj name=ozh skillz='1337' MAP="q3dm6"] : $attr będzie tablicą array (

'name' => 'ozh', 'skillz' => '1337', 'map' => 'q3dm6' ).

Wskazówki dotyczące skrótów

Skróty to doskonały sposób wzbogacenia wpisu bloga skomplikowaną i dynamiczną treścią. W celuzagwarantowania dostarczenia użytkownikowi najlepszych wrażeń autor wtyczki powinien pamię-tać o dwóch podstawowych zasadach:� zbuduj prostą i niezawodną wtyczkę;� pamiętaj, że jest dynamiczna.

Pomyśl o prostocie

Użytkownik jest zadowolony, kiedy otrzymuje nowe funkcje do bloga i jednocześnie może stoso-wać skróty pozwalające na wyświetlanie znacznie bardziej skomplikowanej treści. Jednak zapa-miętywanie składni parametrów skrótu jest niewygodne: powstaje wrażenie konieczności pozna-nia nowego języka znaczników.

Page 19: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

Wskazówki dotyczące skrótów � 285

Powróćmy jeszcze na chwilę do skrótu [amazon]: istnieje możliwość przygotowania wtyczki, którabędzie dodawała skrót [amazonobraz] wyświetlający obraz produktu z serwisu Amazon. Zadaniemużytkownika jest podanie numeru ASIN, typu obrazu (książka czy płyta CD) oraz jego wielkości.

Po zbudowaniu wtyczka będzie zezwalała na użycie skrótu, takiego jak [amazonobraz asin='12345'typ='CD' wielkoscobrazu='maly'].

Kiedy użytkownik posiada tę wtyczkę od dłuższego czasu, może zapomnieć nazwy i składni atry-butów. Czy to było [amazonobraz], czy [obrazamazon]? Czy atrybutem jest isbn, czy asin? Czywielkoscobrazu='ogromny', czy 'duzy'? Czy typ='CD', czy typ='dysk'?

Wprawdzie posiadanie dużej liczby opcji może być zaletą, ale równocześnie nie chcesz, aby użyt-kownicy musieli nieustannie sięgać do dokumentacji, ponieważ to sprawia niekorzystne wrażenie.Warto sprawy uprościć i pozwolić użytkownikom na instynktowne używanie wtyczki.

Po wprowadzeniu modyfikacji kod wtyczki przedstawia się następująco:

<?php<?php/*Plugin Name: Przykład skrótu nr 4Plugin URI: http:/przyklad.pl/Description: Zastąpienie znacznika [amazonobraz] obrazem z serwisu Amazon.Version: 1.0Author: OzhAuthor URI: http://wrox.com/*/

// Rejestracja skrótów [amazonobraz] i [obrazamazon]add_shortcode( 'amazonobraz', 'boj_sc4_amazonimage' );add_shortcode( 'obrazamazon', 'boj_sc4_amazonimage' );

// Funkcja odpowiedzialna za zastąpienie skrótu [amazonobraz].function boj_sc4_amazonimage( $attr, $content ) {

// Pobranie numeru ASIN lub ustawienie domyślnego. $possible = array( 'asin', 'isbn' ); $asin = boj_sc4_find( $possible, $attr, '0470560541' );

// Pobranie powiązanego identyfikatora lub ustawienie domyślnego. $possible = array( 'aff', 'affiliate' ); $aff = boj_sc4_find( $possible, $attr, 'aff_id' );

// Pobranie wielkości obrazu, jeśli podano. $possible = array( 'wielkosc', 'obraz', 'wielkoscobrazu' ); $size = boj_sc4_find( $possible, $attr, '' );

// Pobranie typu, jeśli podano. if( isset( $attr['type'] ) ) { $type = strtolower( $attr['typ'] ); $type = ( $type == 'cd' or $type == 'dysk' ) ? 'cd' : ''; }

// Utworzenie adresu URL prowadzącego do obrazu w serwisie Amazon. $img = 'http://images.amazon.com/images/P/';

Page 20: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

286 � ROZDZIAŁ 10. API SHORTCODE

$img .= $asin; // Opcje obrazu: wielkość. if( $size ) { switch( $size ) { case 'maly': $size = '_AA100'; break; default: case 'sredni': $size = '_AA175'; break; case 'duzy': case 'ogromny': $size = '_SCLZZZZZZZ'; break; // Dobra praktyka, nie zapomnij o ostatnim poleceniu break. } } // Opcje obrazu: typ. if( $type == 'cd' ) { $type = '_PF'; } // Dołączenie opcji do adresu URL, o ile podano jakiekolwiek opcje. if( $type or $size ) { $img .= '.01.'.$type.$size; } // Zakończenie tworzenia adresu URL obrazu. $img .= '.jpg';

// Trzeba pamiętać o zwróceniu obrazu. return "<a href='http://www.amazon.com/dp/$asin'><img src='$img' /></a>";}

// Funkcja pomocnicza:// Wyszukuje $find_keys w tablicy $in_array, zwraca $default, jeśli nie znajdzie $find_keys.function boj_sc4_find( $find_keys, $in_array, $default ) { foreach( $find_keys as $key ) { if( isset( $in_array[$key] ) ) return $in_array[$key]; } return $default;}?>

Powyższy fragment kodu pochodzi z pliku plugin_boj_sc4.php.

Najpierw uwagę należy zwrócić na rejestrację dwóch skrótów wywołujących tę samą funkcję: w tensposób użytkownik może użyć skrótu zarówno [amazonobraz], jak i [obrazamazon].

Następnie warto zwrócić uwagę na to, jak wiele atrybutów jest traktowanych jako synonimy: przyużyciu funkcji pomocniczej o nazwie boj_sc4_find() główna funkcja odpowiedzialna za obsługęskrótu sprawdza wartości $attr['asin'] i $attr['isbn']. Gdy ich brakuje powoduje ustawieniewartości domyślnej.

Kiedy informacje nie są związane z platformą WordPress, warto także przyjrzeć się sposobowitworzenia przez wtyczkę odnośnika do obrazu w serwisie Amazon. Podstawowy adres URLto http://images.amazon.com/images/P/; do niego są dołączane następujące elementy:

Page 21: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

Wskazówki dotyczące skrótów � 287

� numer ASIN, np. w postaci B002OEBMN4;� jeśli mają być użyte opcje, trzeba dołączyć .01.;� pierwsza użyta opcja to wielkość: dołączenie _AA100 powoduje pobranie obrazu o szerokości

100 pikseli, podczas gdy dołączenie _SCLZZZZZZZ pobiera dużą wersję obrazu;� inna możliwa opcja to pobranie obrazu płyty CD: w tym celu do tworzonego adresu URL

trzeba dołączyć _PF;� na końcu adres URL obrazu trzeba zakończyć, dodając .jpg.

Po aktywacji wtyczki można utworzyć nowy wpis bloga o treści Aktualnie s�ucham [amazonobrazasin="B00008WT5E" typ="cd" wielkosc= "maly"], a otrzymany wynik będzie podobny do poka-zanego na rysunku 10.2.

Rysunek 10.2. Wtyczka pobierająca dane z serwisu Amazon w działaniu

Pamiętaj o dynamiczności

Dane skrótu są generowane dynamicznie: za każdym razem, gdy platforma WordPress wyświetlastronę (pojedynczy wpis bloga lub archiwum), treść skrótu jest przetwarzana, a wszystkie skrótyzastępowane są danymi zwracanymi przez wywołania funkcji obsługujących te skróty.

Zamienniki, takie jak wykorzystane w rozdziale, są bardzo szybkie, więc podczas rejestrowanianowego skrótu nie trzeba się przejmować wydajnością działania platformy WordPress.

Page 22: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

288 � ROZDZIAŁ 10. API SHORTCODE

Jednak wydajność nabierze większego znaczenia, gdy skróty będą pobierały informacje z bazydanych bądź ze zdalnych witryn internetowych.� W pierwszym przypadku kod spowoduje wykonanie dodatkowych zapytań SQL, co może

drastycznie zmniejszyć wydajność w wolniejszych serwerach.� W drugim przypadku kod będzie wykonywał zewnętrzne żądania HTTP, które mogą

spowolnić wygenerowanie całej strony, bo platforma WordPress będzie oczekiwałana odpowiedź ze zdalnego serwera.

W takich przypadkach warto rozważyć buforowanie wyniku przetworzenia skrótu, np. w meta-danych wpisu bloga. W kolejnej wtyczce zostanie zaimplementowana taka technika buforowania.

Wewnętrzny sposób działania

Oprócz add_shortcode() służącej do rejestracji nowego skrótu istnieją także inne interesującefunkcje. Ponadto warto poznać kilka faktów dotyczących API Shortcode, które można wykorzystaćw tworzonych wtyczkach.

$shortcode_tags

Wszystkie zarejestrowane skróty są przechowywane w tablicy globalnej o nazwie $shortcode_tagsw postaci par 'nazwa_skrótu' => 'funkcja_obs�uguj�ca_dany_skrót':

<?phpglobal $shortcode_tags;var_dump( $shortcode_tags );/* Wynik:array ( 'wp_caption' => 'img_caption_shortcode', 'caption' => 'img_caption_shortcode', 'gallery' => 'gallery_shortcode', 'embed' => '__return_false', 'amazonimage' => 'boj_sc4_amazonimage', 'amazonimg' => 'boj_sc4_amazonimage',)*/?>

remove_shortcode()

Przy użyciu funkcji remove_shortcode() mamy możliwość dynamicznego wyrejestrowaniaskrótu, np.:

remove_shortcode( 'amazonobraz' );

remove_all_shortcodes()

Podobnie, w celu dynamicznego wyrejestrowania wszystkich skrótów należy użyć funkcjiremove_all_shortcodes() bez parametrów. Z technicznego punktu widzenia wymienionafunkcja po prostu zeruje tablicę globalną $shortcode_tags, która staje się pusta.

Page 23: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

Wskazówki dotyczące skrótów � 289

strip_shorcodes()

Funkcja strip_shorcodes() powoduje usunięcie zarejestrowanych skrótów z treści, co przedsta-wiono w poniższym przykładzie:

<?php$content = <<<SPewne istniej�ce skróty: [amazonobraz] [gallery]Nieistniej�ce skróty: [bleh] [123]S;echo strip_shortcodes( $content );/* Result:Pewne istniejące skróty:Nieistniejące skróty: [bleh] [123]*/?>

shortcode_atts()

Funkcja może być użyta do porównania atrybutów podanych przez użytkownika względem listyobsługiwanych atrybutów, a następnie do ustawienia wartości domyślnych, jeśli będzie trzeba.

Spójrz np. na sposób działania wbudowanego skrótu [gallery]. Odpowiedzialna za jego obsługęfunkcja to gallery_shortcode(), która przetwarza atrybuty skrótu następująco:

<?phpfunction gallery_shortcode( $attr ){ // Zdefiniowanie atrybutów obsługiwanych oraz ich wartości domyślne. $defaults = array( 'order' => 'ASC', 'orderby' => 'menu_order ID', 'id' => $post->ID, 'itemtag' => 'dl', 'icontag' => 'dt', 'captiontag' => 'dd', 'columns' => 3, 'size' => 'thumbnail', 'include' => '', 'exclude' => '' ); // Filtrowanie atrybutów podanych przez użytkownika oraz ustawienie ich wartości domyślnych,

�jeśli zostały pominięte. $options = shortcode_atts( $defaults, $attr ); // [... dalsza część kodu...] // Plik: wp-includes/media.php}?>

Dość długa lista obsługiwanych atrybutów oraz ich wartości domyślne zdefiniowane w tablicy$defaults są łączone z atrybutami dostarczonymi przez użytkownika w tablicy $attr. Wszystkienieznane atrybuty są ignorowane.

Page 24: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

290 � ROZDZIAŁ 10. API SHORTCODE

do_shortcode()

Funkcja do_shortcode() przeszukuje pod kątem skrótów przekazany jej jako parametr ciągtekstowy treści, a następnie przetwarza je. Podczas inicjalizacji platformy WordPress jest powiązanaz filtrem the_content, więc zajmuje się treścią wpisu bloga:

<?php// W pliku wp-includes/shortcodes.phpadd_filter( 'the_content', 'do_shortcode', 11 );?>

Skróty rekurencyjne

Może się zdarzyć, że treść skrótu będzie zawierała inne skróty. Przykładowo możesz zarejestro-wać skróty [b] i [i] do wyświetlania tekstu pogrubionego i zapisanego kursywą. Skróty powinnydziałać w zagnieżdżonej strukturze, takiej jak [b]pewien [i]ciekawy[/i] tekst[/b].

Struktura taka nie stanowi problemu, ponieważ funkcja obsługująca dany skrót może rekurencyj-nie wywołać funkcję do_shortcode():

<?php// Dodanie skrótów [b] i [i].add_shortcode( 'i', 'boj_sc5_italic' );add_shortcode( 'b', 'boj_sc5_bold' );// Funkcja obsługująca skrót: zwraca pogrubiony tekst.function boj_sc5_bold( $attr, $content ) { return '<strong>' . do_shortcode( $content ) . '</strong>';}// Funkcja obsługująca skrót: zwraca tekst zapisany kursywą.function boj_sc5_italic( $attr, $content ) { return '<em>' . do_shortcode( $content ) . '</em>';}?>

Powyższy fragment kodu pochodzi z pliku plugin_boj_sc5.php.

Każda funkcja obsługująca skrót upewnia się, że przetworzony zostanie skrót znajdujący się w tekściedanego skrótu.

Kod BBCode we wtyczce obsługującej komentarze

Na tym etapie można utworzyć nową wtyczkę, która umożliwi stosowanie w komentarzach znacz-ników typu BBCode. W większości forów zamiast zwykłych znaczników HTML, np. <a> lub <b>,komentujący muszą stosować znaczniki, takie jak [url] i [b].

Wtyczka będzie ponadto charakteryzowała się następującymi cechami.� Nie będzie zmieniać sposobu tworzenia wpisów bloga przez autorów (czyli z użyciem

znaczników HTML).� W komentarzach nie będą stosowane skróty zarejestrowane do używania w innych miejscach

wpisu bloga, takie jak np. zdefiniowany wcześniej skrót [amazonobraz] lub [gallery].

Poniżej przedstawiono pełny kod wtyczki.

<?php/*Plugin Name: Przykład skrótu nr 6

Page 25: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

Wskazówki dotyczące skrótów � 291

Plugin URI: http://przyklad.pl/Description: Umożliwia stosowanie skrótów [url] i [b] w komentarzach.Version: 1.0Author: OzhAuthor URI: http://wrox.com/*/

// Rejestracja dla zaczepu 'comment_text' funkcji odpowiedzialnej za przetworzenie komentarza.add_filter( 'comment_text', 'boj_sc6_comments' );

// Funkcja przetwarzająca treść komentarza.function boj_sc6_comments( $comment ) {

// Zapisanie zarejestrowanych skrótów. global $shortcode_tags; $original = $shortcode_tags;

// Wyrejestrowanie wszystkich skrótów. remove_all_shortcodes();

// Zarejestrowanie nowych skrótów. add_shortcode( 'url', 'boj_sc6_comments_url' ); add_shortcode( 'b', 'boj_sc6_comments_bold' ); add_shortcode( 'strong', 'boj_sc6_comments_bold' );

// Usunięcie wszystkich znaczników HTML z komentarza. $comment = wp_strip_all_tags( $comment );

// Przetworzenie treści komentarza z uwzględnieniem skrótów. $comment = do_shortcode( $comment );

// Wyrejestrowanie skrótów komentarza, przywrócenie zapisanych skrótów. $shortcode_tags = $original;

// Zwrócenie komentarza. return $comment;}

// Skrót [b] lub [strong] powoduje wywołanie funkcji zastępującej skrót znacznikiem <strong>.function boj_sc6_comments_bold( $attr, $text ) { return '<strong>' .do_shortcode( $text ). '</strong>';}

// Skrót [url] powoduje wywołanie funkcji zastępującej skrót znacznikiem <a>.function boj_sc6_comments_url( $attr, $text ) { $text = esc_url( $text ); return "<a href=\"$text\">$text</a>";}?>

Powyższy fragment kodu pochodzi z pliku plugin_boj_sc6.php.

Jak to działa? 1. Jak możesz zobaczyć, wtyczka nie powoduje zarejestrowania nowych skrótów [url] i [b]

od razu na początku, ponieważ w takim przypadku wpływałyby one na treść wpisu bloga.Pierwszym zadaniem wtyczki jest przechwycenie treści komentarza.

Page 26: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

292 � ROZDZIAŁ 10. API SHORTCODE

2. Funkcja przetwarzająca komentarz boj_sc6_comments() najpierw tworzy kopię wszystkichskrótów, a następnie je wyrejestrowuje.

3. Kolejnym krokiem jest rejestracja nowych skrótów: [url] i [b]. (W celu ułatwienia życiaużytkownikowi [strong] jest odpowiednikiem [b]).

4. Z treści komentarza przechowywanej w zmiennej $comment następuje usunięcie zwykłychznaczników HTML, a następnie zastosowanie nowo zarejestrowanych skrótów.

5. Warto zwrócić uwagę, jak funkcja odpowiedzialna za pogrubienie tekstu rekurencyjniewywołuje funkcję do_shortcode(), co pozwala na stosowanie zagnieżdżonych struktur.

6. Kolejny krok to przywrócenie oryginalnych skrótów, przy okazji następuje wyrejestrowanieskrótów komentarza [url] i [b].

7. Sformatowana treść komentarza zostaje zwrócona w celu wyświetlenia.

Teraz możesz aktywować wtyczkę i dodać nowy komentarz. Spójrz na rysunek 10.3, aby przeko-nać się, jak ignorowane są znaczniki HTML. Skróty [b] i [url] są przetwarzane, ale zwykłe skróty,takie jak [gallery], które są przetwarzane we wpisie bloga, są w komentarzach ignorowane.

Rysunek 10.3. Wtyczka umożliwiająca stosowanie znaczników typu BBCode w działaniu

Ograniczenia skrótów podczas obsługi

struktur zagnieżdżonych

Jak się wcześniej dowiedziałeś, platforma WordPress potrafi obsługiwać zagnieżdżone strukturyskrótów przy założeniu, że funkcje odpowiedzialne za ich obsługę rekurencyjnie wywołują do_�shortcode(). Jednak tego rodzaju rozwiązanie ma swoje ograniczenia i czasami może po prostunie działać, o czym się wkrótce przekonasz.

Struktura przedstawiona poniżej jest obsługiwana prawidłowo, ponieważ zagnieżdżone skróty sąinne, a każdy z nich jest prawidłowo osadzony:

Dzia�a:[foo]

Page 27: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

Integracja z usługą Google Mapy � 293

[bar] [baz] [/bar][/foo]

Struktura przedstawiona niżej nie będzie prawidłowo obsłużona, bo osadzony skrót jest taki samjak skrót, w którym się zawiera:

Nie dzia�a:[foo] [foo] [/foo][/foo]

Pamiętaj, że skróty mogą być samozamykające się (samodzielny skrót [foo] lub [foo/]) bądźmogą zawierać treść ([foo]tre��[/foo]). Wspomniana treść również może uniemożliwiać pra-widłowe przetwarzanie pewnych struktur:

Nie dzia�a:[foo][foo] tre��[/foo]

Integracja z usługą Google Mapy

Jako pełny i znacznie bardziej skomplikowany przykład użycia skrótów utworzymy wtyczkę pozwa-lającą na integrację usługi Google Mapy z Twoją witryną bazującą na platformie WordPress.

Google oferuje wiele różnych API pozwalających na uzyskanie dostępu do usług, szczególnie dousługi map. Usługa ta bazuje na dwóch powiązanych z nią usługach: API Google Geocoding i APIGoogle Maps.

UWAGA

Google udostępnia dokładną dokumentację API Google Maps. Więcej informacji na tentemat można znaleźć na stronie http://code.google.com/apis/maps/documentation/javascript/.

W tym podrozdziale utworzymy wtyczkę pozwalającą na konwersję adresu zapisanego w postacizwykłego tekstu (np. ul. Kościuszki 1c, 44-100 Gliwice) na dynamicznie generowaną, interaktywnąmapę Google.

Uzyskanie dostępu do API Google Geocoding

Pierwszym krokiem podczas konwersji adresu na mapę jest utworzenie „geokodu” adresu. Two-rzenie geokodu to proces opisany jako konwersja standardowego adresu (np. ul. Kościuszki 1c,44-100 Gliwice) na współrzędne geograficzne (50.289, 18.660). Współrzędne są używane przezAPI Google Maps do znalezienia wskazanego położenia na mapie oraz umieszczenia na niej znacz-ników zależnych od podanych współrzędnych.

Obecnie API Google Geocoding zwraca wyniki w dwóch formatach: JSON i XML. W omawianymtutaj przykładzie zostanie wykorzystany format JSON. Ponadto będziemy stosować technikiomówione w rozdziale 9., który jest poświęcony wykonywaniu i obsłudze żądań HTTP.

Page 28: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

294 � ROZDZIAŁ 10. API SHORTCODE

Firma Google uprościła proces współpracy z API. W celu otrzymania współrzędnych możnawykonać żądanie na następujący adres URL: http://maps.google.com/maps/api/geocode/$output?$parameters, gdzie $output oznacza format danych wyjściowych (np. 'json'), natomiast $parameterto ciąg tekstowy zapytania zawierający parametry dodatkowe dla geokodu.

Do API trzeba przekazać tylko dwa wymagane parametry: address lub latlng i sensor.� Ponieważ nie są znane współrzędne geograficzne, użyty będzie parametr address. Ten

parametr to zapisany w postaci zwykłego tekstu pełny adres, który ma zostać zamienionyna geokod. Adres jest zakodowany w adresie URL.

� Parametr sensor wskazuje, czy żądanie pochodzi z urządzenia zawierającego sensorlokalizacji (np. smartfon). Tej zmiennej ustawimy wartość false.

Możesz to bardzo łatwo przetestować: wczytaj API Google Geocoding poprzez uruchomieniedowolnej przeglądarki internetowej i przejdź na stronę http://maps.google.com/maps/api/geocode/json?address=Kościuszki+1c+Gliwice&sensor=false.

Jak widać, zwrócone dane JSON zawierają współrzędne geograficzne podanego adresu, a takżedane dodatkowe, takie jak kod pocztowy (który nie został podany w żądaniu).

Teraz możemy przystąpić do tworzenia funkcji boj_gmap_geocode(), która wygeneruje geokoddla wskazanego adresu:

<?php// Utworzenie geokodu na podstawie adresu: wartością zwrotną jest tablica zawierająca współrzędne

�geograficzne.function boj_gmap_geocode( $address ) { // Utworzenie adresu URL do API Google Geocoding. $map_url = 'http://maps.google.com/maps/api/geocode/json?address='; $map_url .= urlencode( $address ).' & sensor=false'; // Wykonanie żądania GET. $request = wp_remote_get( $map_url ); // Pobranie obiektu JSON. $json = wp_remote_retrieve_body( $request ); // Upewnienie się, że żądanie zakończyło się powodzeniem. W przeciwnym razie trzeba zwrócić false. if( empty( $json ) ) return false; // Odkodowanie obiektu JSON. $json = json_decode( $json ); // Pobranie współrzędnych geograficznych. $lat = $json->results[0]->geometry->location->lat; // Szerokość geograficzna. $long = $json->results[0]->geometry->location->lng; // Długość geograficzna. // Zwrócenie tablicy zawierającej współrzędne geograficzne. return compact( 'lat', 'long' );}?>

Funkcja wykonuje żądanie do API Google Geocoding i otrzymuje odpowiedź w formacie JSON,która po zdekodowaniu będzie zawierała współrzędne geograficzne. Można to sprawdzić, analizu-jąc otrzymaną wartość zwrotną:

<?php$coords = boj_gmap_geocode( 'ul. Ko�ciuszki 1c, Gliwice' );var_dump( $coords );/* Wynik:array(2) {

Page 29: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

Integracja z usługą Google Mapy � 295

["lat"]=> float(50.28891549) ["long"]=> float(18.65953990)}*/?>

Więcej informacji wraz z objaśnieniem funkcji użytych w powyższej funkcji można znaleźćw rozdziale 9.

Przechowywanie wyników

Jednym z ważniejszych aspektów skrótów jest fakt, że za każdym razem dynamicznie generująswoją treść. Jednak wykonywanie żądania HTTP do API Google Geocoding podczas każdegowyświetlania wpisu bloga nie będzie efektywnym rozwiązaniem, ponieważ doprowadzi do spowol-nienia wczytywania każdej strony.

Alternatywą jest przechowywanie współrzędnych danego adresu w metadanych dołączanych dowpisu bloga. W ten sposób podczas kolejnego wyświetlenia wpisu bloga współrzędne geograficznezostaną pobrane z bazy danych wraz z pozostałymi metadanymi wpisu bloga. W ten sposób unikasię wykonywania dodatkowego żądania HTTP.

UWAGA

Metadane wpisu bloga dostępne w interfejsie WordPress są pobierane razem z samymwpisem bloga. Tak więc odczyt tych informacji nie powoduje wykonania dodatkowegozapytania SQL. Więcej informacji na temat metadanych znajduje się w rozdziale 11.

Zamiast pobierać współrzędne z API Google za pomocą funkcji boj_gmap_geocode(), możnaużyć funkcji proxy o nazwie boj_gmap_get_coords(), która sprawdza dostępność tych informacjiw metadanych wpisu bloga. Jeżeli informacje nie zostaną znalezione w metadanych, będą pobranez API Google, a następnie zapisane w metadanych w celu ich późniejszego wykorzystania.

Poniżej przedstawiono kod funkcji proxy:

<?php// Konwersja adresu zapisanego w postaci zwykłego tekstu na współrzędne geograficzne.// Współrzędne będą pobrane z metadanych, o ile to możliwe. W przeciwnym razie będą pobrane z API Google.function boj_gmap_get_coords( $address = 'ul. Ko�ciuszki 1c, Gliwice' ) { // Identyfikator bieżącego wpisu bloga. global $id; // Sprawdzenie, czy współrzędne geograficzne znajdują się w bazie danych. $saved = get_post_meta( $id, 'boj_gmap_addresses' ); foreach( (array)$saved as $_saved ) { if( isset( $_saved['address'] ) && $_saved['address'] == $address ) { extract( $_saved ); return compact( 'lat', 'long' ); } } // Współrzędne nie są jeszcze buforowane, więc trzeba je pobrać z Google. $coords = boj_gmap_geocode( $address ); if( !$coords ) return false;

Page 30: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

296 � ROZDZIAŁ 10. API SHORTCODE

// Buforowanie wyniku w metadanych wpisu bloga. add_post_meta( $id, 'boj_gmap_addresses', array( 'address' => $address, 'lat' => $coords['lat'], 'long' => $coords['long'] ) ); extract( $coords ); return compact( 'lat', 'long' );}?>

Gdy adres będzie po raz pierwszy konwertowany na geokod, wywołanie add_post_meta() spowo-duje wstawienie do metadanych (o nazwie boj_gmap_addresses) wpisu bloga tablicy, podobnej doprzedstawionej poniżej:

array( "address" => "ul. Ko�ciuszki 1c, Gliwice", "lat" => "50.28891549", "long" => "18.65953990")

Podczas kolejnego wczytywania strony współrzędne geograficzne powinny już być znalezionei pobrane wraz z metadanymi wpisu bloga.

Uzyskanie dostępu do API Google Maps

Kiedy wiadomo, w jaki sposób skonwertować adres na współrzędne geograficzne przy użyciu APIGoogle Geocoding, można przystąpić do wykorzystania tych współrzędnych w usłudze GoogleMapy za pomocą API Google Maps.

Koncepcje API

Interaktywne mapy usługi Google Mapy są tworzone za pomocą kodu JavaScript. Ten kod musibyć wstawiony na stronie, na której ma zostać wyświetlona mapa. Przed rozpoczęciem integracjiusługi z wtyczką warto dowiedzieć się, jak można osadzić mapę na stronie HTML.

Na początek trzeba dodać skrypt główny:

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false">

Następnie należy wstawić kod JavaScript dotyczący map i mieszczący się we własnej funkcji:

function initialize_map() {

Obiekt przechowuje nowy egzemplarz Google Maps wraz z podanymi parametrami szerokościi długości geograficznej:

var myLatlng = new google.maps.LatLng(45.124099,-123.113634);

Inny obiekt może zdefiniować opcje mapy: poziom przybliżenia, wycentrowanie oraz rodzaj mapy(teren, mapa, satelita lub widok hybrydowy):

var myOptions = { zoom: 4, center: myLatlng, mapTypeId: google.maps.MapTypeId.SATELLITE}

Page 31: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

Integracja z usługą Google Mapy � 297

Teraz mapę można już dołączyć do obiektu HTML, takiego jak <div>; w omawianym przykładzieobiekt ma atrybut o identyfikatorze map_canvas:

var map = new google.maps.Map( document.getElementById("map_canvas"), myOptions );

Przedstawiony poniżej ciąg tekstowy przechowuje własny tekst wyświetlający informacje w oknie,które się pokazuje po kliknięciu znacznika znajdującego się na mapie:

var contentString = '<div id="content">'+ '<p><b>Ikona Firefox</b>: Gdzie� w Oregonie, ta ikona o �rednicy 67 '+ 'metrów zosta�a utworzona przez grup� u�ytkowników systemu Linux Uniwersytetu '+ 'Stanowego w celu �wi�towania wydania przegl�darki Firefox 2</p>'+ '</div>'+ '</div>';

Ten ciąg tekstowy jest teraz dołączony do nowego egzemplarza obiektu InfoWindow:

var infowindow = new google.maps.InfoWindow({ content: contentString});

Pozostało umieszczenie znacznika na mapie:

var marker = new google.maps.Marker({ position: myLatlng, map: map, title: 'Ikona Firefox'});

Trzeba jeszcze zdefiniować odpowiednie zachowanie, czyli wyświetlenie okna z informacjamipo kliknięciu znacznika:

google.maps.event.addListener(marker, 'click', function() { infowindow.open(map,marker); });}

Prawie gotowe! Teraz tworzymy pusty obiekt HTML, który otrzyma mapę, i wywołujemy funkcjęJavaScript odpowiedzialną za wyświetlenie mapy:

<p>Mapa jest wy�wietlona poni�ej:</p><div id="map_canvas" style="width:600px;height:600px"></div><script type="text/javascript">initialize_map()</script>

Powyższy fragment kodu pochodzi z pliku google_map_api_example.html.

W pliku przedstawiono koncepcję używania API Google Maps w celu wyświetlenia mapy (zobaczrysunek 10.4).

Teraz jesteś przygotowany do implementacji dynamicznej mapy Google we własnej wtyczce.

Implementacja wtyczki

Trzeba przygotować główną część wtyczki: funkcję rejestrującą skrót [googlemap] i wyświetlającąmapę Google. Skrót będzie używany w następujący sposób:

[googlemap width=500 height=300 zoom=12]ul. Ko�ciuszki 1c, Gliwice[/googlemap]

Page 32: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

298 � ROZDZIAŁ 10. API SHORTCODE

Rysunek 10.4. Gotowa mapa wyświetlona w przeglądarce internetowej

Najpierw należy zarejestrować sam skrót. Można również zarejestrować podobne skróty, np.[googlemaps], [google_map] i [google_maps], które będą obsługiwane przez tę samą funkcję.

<?php// Dodanie obsługi skrótu [googlemap].add_shortcode( 'googlemap', 'boj_gmap_generate_map' );

Kolejny krok to rozpoczęcie definiowania funkcji odpowiedzialnej za analizę i przetworzenieatrybutów skrótu oraz jego treści:

// Funkcja odpowiedzialna za obsługę skrótu.function boj_gmap_generate_map( $attr, $address ) { // Ustawienie wartości domyślnych mapy. $defaults = array( 'width' => '500', 'height' => '500', 'zoom' => 12, ); // Pobranie atrybutów mapy (w przypadku ich pominięcia będą miały wartości domyślne). extract( shortcode_atts( $defaults, $attr ) );

W części pierwszej następuje przygotowanie tablicy wartości domyślnych połączonych z rzeczy-wistymi atrybutami przy użyciu funkcji shortcode_atts(), która zwraca tablicę. Wywołanieextract() powoduje zaimportowanie zmiennych z tablicy w taki sposób, że dla egzemplarzaarray( 'size' => 300 ) otrzymamy $size = 300.

// Pobranie współrzędnych.$coord = boj_gmap_get_coords( $address );// Upewniamy się, że mamy współrzędne. W przeciwnym razie trzeba zwrócić pusty ciąg tekstowy.if( !$coord ) return '';

Page 33: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

Integracja z usługą Google Mapy � 299

W tym miejscu utworzono geokod na podstawie adresu (albo pobrano z API albo z bazy danychwraz z metadanymi wpisu bloga). Gdy utworzenie geokodu zakończy się niepowodzeniem (np. naskutek tymczasowego problemu między serwerami Twoim i Google), należy zwrócić pusty ciągtekstowy.

// Dane wyjściowe skrótu.$output = '';// Przypisanie wartości zmiennym $lat i $long.extract( $coord );

Po przygotowaniu wszystkich wymaganych zmiennych, a przed wygenerowaniem danych wyj-ściowych, trzeba je oczyścić. Niektóre będą umieszczone w ciągach tekstowych JavaScript, jeszczeinne użyte jako atrybuty elementów HTML. Konieczne jest więc prawidłowe ich oczyszczenie,zgodnie z opisem przedstawionym w rozdziale 6.

// Oczyszczenie zmiennych w zależności od kontekstu, w którym będą użyte.$lat = esc_js( $lat );$long = esc_js( $long );$address = esc_js( $address );$zoom = esc_js( $zoom );$width = esc_attr( $width );$height = esc_attr( $height );

Teraz przechodzimy do kodu JavaScript.

Główny skrypt najczęściej umieszczany jest w elemencie <head> dokumentu HTML, ale w tymprzypadku to nie jest najlepsze rozwiązanie, ponieważ skrypt będzie wówczas wstawiony nawetna tej stronie, na której nie jest potrzebny.

Lepiej skrypt osadzić w kodzie jako fragment kodu skrótu. W ten sposób znajdzie się tylko na wyma-gającej go stronie.

// Wygenerowanie unikalnego identyfikatora mapy, co pozwala mieć wiele map na stronie.$map_id = 'boj_map_'.md5( $address );// Tylko jednokrotne dodanie głównego skryptu Google Maps na stronie.static $script_added = false;if( $script_added == false ) { $output .= '<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false" ></script>'; $script_added = true; }

Teraz można wstawić kod JavaScript odpowiedzialny za obsługę mapy. Każda funkcja i każdemiejsce zarezerwowane dla mapy będą miały unikalne nazwy, uzyskamy to, używając wcześniejwygenerowanej zmiennej $map_id, co pozwala na umieszczenie wielu map na tej samej stronie.

// Dodanie kodu dotyczącego mapy.$output .= <<<CODE<div id="$map_id" ></div><script type="text/javascript" > function generate_$map_id() { var latlng = new google.maps.LatLng( $lat, $long ); var options = { zoom: $zoom, center: latlng, mapTypeId: google.maps.MapTypeId.ROADMAP }

Page 34: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

300 � ROZDZIAŁ 10. API SHORTCODE

var map = new google.maps.Map( document.getElementById("$map_id"), options ); var legend = '<div class="map_legend"><p> $address </p></div> '; var infowindow = new google.maps.InfoWindow({ content: legend, }); var marker = new google.maps.Marker({ position: latlng, map: map, }); google.maps.event.addListener(marker, 'click', function() { infowindow.open(map,marker); }); } generate_$map_id();</script>

Do danych wyjściowych dodajemy proste style w postaci atrybutów zdefiniowanych przez użyt-kownika:

<style type"text/css"> .map_legend{ width:200px; max-height:200px; min-height:100px; } #$map_id { width: {$width}px; height: {$height}px; } </style>CODE;

Oczywiście, nie wolno zapomnieć o zwróceniu treści zamiennika dla skrótu:

return $output;}?>

Powyższy fragment kodu pochodzi z pliku plugin_boj_sc7.php.

Na tym etapie wtyczka jest już gotowa do użycia! Utwórz nowy wpis bloga i zastosuj np. poniższyskrót:

[googlemap width=450 height=300 zoom=14]ul. Ko�ciuszki 1c, Gliwice[/googlemap]

Tak utworzony wpis bloga powinien być podobny do pokazanego na rysunku 10.5.

Więcej pomysłów dotyczących skrótów

Przy użyciu skrótów można bardzo łatwo dodawać interesujące i praktyczne funkcje, tutaj ogra-niczeniem jest jedynie Twoja wyobraźnia. Istnieje np. możliwość zarejestrowania skrótu wyświe-tlającego treść tylko dla zalogowanych użytkowników, wyświetlającego treść zależną ograniczonączasowo, zaciemniającego adres e-mail oraz wiele innych. W kolejnych punktach zostaną przed-stawione niektóre opcje.

Page 35: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

Więcej pomysłów dotyczących skrótów � 301

Rysunek 10.5. Wpis bloga zintegrowany z mapą Google

Wyświetlanie treści jedynie dla zalogowanych użytkowników

Pierwszy krótki implementowany skrót to elegancki sposób wyświetlenia treści jedynie zalogo-wanym użytkownikom. Jego sposób użycia we wpisie bloga może być następujący:

Dzisiejsza porada Jedi:[czlonkowie]U�ywaj mocy[/czlonkowie]

Funkcja odpowiedzialna za obsługę wspomnianego skrótu znajduje się w poniższym fragmenciekodu:

<?phpadd_shortcode( 'czlonkowie', 'boj_sc8_loggedin' );function boj_sc8_loggedin( $attr, $content ) { if( is_user_logged_in() ) { return $content; } else { return "<p>Tylko dla zalogowanych u�ytkowników</p>"; }}?>

Powyższy fragment kodu pochodzi z pliku plugin_boj_sc8.php.

Page 36: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

302 � ROZDZIAŁ 10. API SHORTCODE

Wynikiem jest treść umieszczona pomiędzy znacznikami skrótu [czlonkowie]. Będzie ona wyświe-tlona tylko zalogowanym użytkownikom. Przykład tej samej koncepcji, jednak omówiony bardziejszczegółowo, znajduje się w rozdziale 8.

Wyświetlenie treści ograniczonej czasowo

Innym prostym i przydatnym skrótem jest kod pozwalający na wyświetlenie treści ograniczonejczasowo, np. odnośnik promocyjny ważny przez jedynie 24 godziny:

Ten odno�nik promocyjny jest wa�ny przez jedynie 24 godziny:[24godziny] http://przyklad.pl/promo/ [/24godziny]

W celu zaimplementowania takiego skrótu trzeba wykorzystać przedstawiony poniżej fragmentkodu, który po prostu sprawdza bieżącą godzinę oraz godzinę opublikowania wpisu bloga:

<?phpadd_shortcode( '24godziny', 'boj_sc8_24hours' );function boj_sc8_24hours( $attr, $content ) { $now = time(); $post_time = get_the_date( 'U' ); if( ( $now - $post_time ) > 86400 ) { return 'Oferta wygas�a!'; } else { return $content; }}?>

Powyższy fragment kodu pochodzi z pliku plugin_boj_sc8.php.

Jeżeli bieżący wpis bloga był opublikowany wcześniej niż 86 400 sekund wcześniej (czyli 24 godziny),to tekst znajdujący się między znacznikami [24godziny] nie zostanie wyświetlony.

Zaciemnienie adresu e-mail

W kolejnym krótkim i użytecznym skrócie pokazano praktyczny sposób konwersji adresu e-mailzapisanego w postaci zwykłego tekstu na odnośnik mailto:, który będzie zaciemniony (tzn. mniejczytelny) dla robotów spamowych. We wpisie bloga wystarczy po prostu użyć skrótu:

Napisz do mnie na adres [email][email protected][/email]

Funkcja obsługująca skrót wykorzystuje funkcję WordPress o nazwie antispambot(), która poprostu konwertuje znaki na encje HTML, które są trudniejsze do odczytania przez roboty spamowei roboty kolekcjonujące adresy e-mail:

<?phpadd_shortcode( 'email', 'boj_sc8_email' );function boj_sc8_email( $attr, $content ) { if( is_email( $content ) ) { $content = antispambot( $content ); return sprintf( '<a href="mailto:%s" > %s <a/>', $content, $content ); }else { return ''; }}?>

Powyższy fragment kodu pochodzi z pliku plugin_boj_sc8.php.

Page 37: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

Podsumowanie � 303

Umieszczenie adresu e-mail między znacznikami [email][/email] spowoduje zaciemnienietego adresu przez skrót. Przykładowo po podaniu adresu [email protected] wartością zwrotną skrótubędzie &#122;&#104;&#64;&#111;z&#104;&#46;org.

Podsumowanie

Skróty otwierają użytkownikom końcowym drzwi do zaawansowanej, dostosowanej do własnychpotrzeb i dynamicznej treści. Ci użytkownicy nie muszą znać skomplikowanego kodu HTML,JavaScript, CSS lub PHP albo mogą nie mieć ochoty na jego tworzenie.

Za pomocą skrótów można przygotować dla klientów zaawansowane makra i znacznie zwiększyćwartość swojej pracy przy niewielkim wysiłku.

Page 38: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

304 � ROZDZIAŁ 10. API SHORTCODE

Page 39: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

Skorowidz

#wordpress, 502#wordpress-dev, 502$args

blog_id, 211can_export, 310capabilities, 308capability_type, 308exclude, 211exclude_from_search, 307has_archive, 308hierarchical, 308include, 211labels, 308menu_icon, 309menu_position, 309meta_compare, 211meta_key, 211meta_value, 211number, 212offset, 212order, 211orderby, 211permalink_epmask, 310public, 307publicly_queryable, 307query_var, 309register_meta_box_cb, 310rewrite, 309role, 211search, 211show_in_nav_menus, 309show_ui, 307supports, 307taxonomies, 309

$shortcode_tags, 288$userdata

admin_color, 215comment_shortcuts, 215description, 215display_name, 215

first_name, 215ID, 214last_name, 215nickname, 215rich_editing, 215role, 215user_email, 215user_login, 215user_nicename, 215user_pass, 214user_registered, 215user_url, 215

%1$s, 125, 127%2s, 127%s, 125, 126__return_empty_array, 68__return_false, 68__return_true, 68__return_zero, 68

A

admin, 210Administracja siecią, 452adres URL, 40–41, 155, 401agent użytkownika, 258agregacja treści sieci, 429Ajax, Patrz technologia Ajaxakcje, 51, 52akcje Ajax, 364Akismet, 26aktualizacja oprogramowania, 458aktywacja wtyczki, 29, 42, 450album_artist, 336album_genre, 336All in One SEO Pack, 26alternatywne API, 275amazon, 281analizator składni RSS, 276Apache, 402

API Google Geocoding, 293, 294API Google Maps, 293, 296

implementacja wtyczki, 298osadzanie mapy, 296rejestracja skrótu, 298

API Google QR Code, 417API HTTP, 247, 249, 252, 277API Options, 175

parametr autoload, 179, 180rozdzielanie opcji wtyczki, 179usuwanie opcji, 178wczytywanie tablicy opcji, 178zapisywanie opcji, 175

API Rewrite, 401, 419, 421API Settings, 391

dodawanie pól, 188, 189dodawanie sekcji, 189funkcje, 181generowanie formularza, 185rejestracja ustawień, 182sekcje i ustawienia, 183strona administracyjna, 181tworzenie kodu HTML, 185weryfikacja błędów, 187weryfikacja danych, 184zarządzanie wtyczką, 185

API Shortcode, 279API Transients

pobieranie opcji, 192usunięcie opcji, 193zapisywanie opcji, 192

apostrof, 47argument

can_export, 310capabilities, 308, 313, 327

assign_terms, 327delete_terms, 327edit_terms, 327manage_terms, 327

capability_type, 308, 313

Page 40: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

508 � WTYCZKI DO WORDPRESSA

argumentexclude_from_search, 307has_archive, 308hierarchical, 308, 325labels, 308, 326

klucze tablicy, 326menu_icon, 309menu_position, 309permalink_epmask, 310post_type, 317public, 307, 325publicly_queryable, 307query_var, 309, 325register_meta_box_cb, 310rewrite, 309, 325

hierarchical, 325slug, 325with_front, 325

show_in_nav_menus, 309, 326show_tagcloud, 325show_ui, 307, 325supports, 307taxonomies, 309update_count_callback, 325

arkusze stylów, 351ASIN, 283atak typu

CSRF, 137SQL Injection, 162, 170XSS, 144

atak związany z nadużyciemuprawnień, 134

atrybut class="more-link", 365

B

baza danych, 24, 455baza danych MySQL, 506baza danych zaczepów, 500BBCode, 279, 290bezpieczeństwo, 371bezpieczeństwo wtyczki, 133

dobre nawyki, 172biała lista, 161biblioteka jQuery, 337, 349bit.ly, 137blog, 306

dodawanie metadanych, 320metadane wpisu, 319możliwe typy wpisów, 306

możliwości, 313pętla własnego typu, 315pobieranie metadanych, 321pobieranie treści, 317przypisanie taksonomii, 329rejestracja własnego typu

wpisu, 306, 310taksonomia, 314typ wpisu, 314, 318uaktualnienie metadanych

wpisu, 322ustawianie etykiet, 311usuwanie metadanych, 322usuwanie wersji wpisu, 385własne typy wpisów, 306, 315wpisy, 330

błąd 404, 262błąd serwera, 262błędy, 373, 461

rejestracja, 466tryb usuwania, 461, 462włączanie rejestracji, 466wyłączanie wyświetlania, 467wyświetlanie komunikatów, 462

body, 256BOJ Admin Lang, 194branding wtyczki, 485Brown Adam, 500buforowanie danych, 467buforowanie danych we wtyczce,

470

C

Chrome, 374ciągi tekstowe, 312CMS, 194Coda, 505Codex, 497

opis funkcji, 498przeszukiwanie witryny, 497

Contact Form 7, 26cookies, 256cron, 375, 399

harmonogram zadań, 376metody wykonywania zadań,

385Cross Site Scripting, 133cudzysłów, 47CURL, 251, 260czat WordPress, 502

D

dane JSON, 264, 294dane krótkotrwałe, 193, 194dane skrótu, 287dane użytkownika, 219

display_name, 219ID, 219user_email, 219user_login, 219user_nicename, 219user_pass, 219user_registered, 219user_url, 219

dane wyjściowe, 415, 428Dashboard Widgets, Patrz

widgety kokpitu, 24, 93Database, Patrz baza danychDATEDIFF, 396definiowanie sekcji, 183definiowanie ustawień, 183delete_users, 237demon cron, 375description, 84dezaktywacja wtyczki, 29, 43dezinstalacja wtyczki, 44DNS, 262dodanie możliwości do roli, 241dodawanie

elementu menu, 80menu, 77podmenu, 78pól, 189, 191, 197sekcji, 189, 190skryptów, 353strony w oparciu o szablon, 412treści, 118własnego pola użytkownika,

97dokumentacja, 493

kodu, 46osadzona w kodzie, 494WordPress, 497

dołączanie skryptów, 345DOM, 341dowolne zapytania, 169dynamiczność, 287dynamiczny skrypt, 358dyrektywa mod_rewrite, 403dziennik błędów, 467

Page 41: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

Skorowidz� 509

E

edytor tekstu, 495, 505edytor wtyczek, 31e-mail, 302etykiety, 311

add_new, 312add_new_item, 312edit_item, 312name, 312new_item, 312not_found, 312not_found_in_trash, 312parent_item_colon, 313search_items, 312singular_name, 312view_item, 312

F

filtr, 51, 61filtr plugins_api, 274filtrowanie odpowiedzi, 258filtrowanie zaawansowane, 260filtrowanie znaczników, 148filtrowanie żądań, 258Firebug, 158, 374, 504Firefox, 374, 504fora pomocy technicznej, 501formularz opcji widgetu, 439FSF, 474FTP, 505fundacja FSF, 474funkcja

__(), 118__return_empty_array(), 67__return_false(), 261_e(), 118_ex(), 120_n(), 122_n_noop(), 123_nx(), 123_nx_noop(), 124_x(), 120abs(), 145absint(), 147, 158, 439add_action(), 71, 100, 496add_blog_option(), 448add_comments_page(), 82add_dashboard_page(), 81

add_feed(), 419add_filter(), 71, 496add_links_page(), 82add_management_page(), 82add_media_page(), 82add_menu_page(), 77add_meta_box(), 97add_option(), 179add_options_page(), 82add_pages_page(), 82add_permastruct(), 413add_plugins_page(), 82add_post_meta(), 320add_posts_page(), 81add_rewrite_rule(), 407add_rewrite_tag(), 413add_role(), 239add_settings_error(), 187add_settings_field(), 183add_settings_section(), 183add_shortcode(), 281, 284, 432add_submenu_page(), 79add_theme_page(), 82add_user_meta(), 195, 223add_users_page(), 82add_user_to_blog(), 449, 450admin_url(), 364aktywacji wtyczki, 42apply_filters(), 61, 72, 75apply_filters_ref_array(), 63,

72, 75array_map(), 158author_can(), 234boj_addfeed_add_feed(), 420boj_altapi_check(), 273boj_cron_pester_check(), 390boj_cron_rev_delete(), 386boj_cron_rev_setting_input(),

387boj_display_user_website(),

219boj_ep_display_json(), 417boj_ep_display_qr(), 417boj_gmap_geocode(), 294boj_gmap_get_coords(), 295boj_install(), 43boj_list_users_of_blog(), 213boj_mbe_create(), 97boj_mbe_function(), 97boj_multisite_widget(), 437

boj_multisite_switch_page(),429

boj_myplugin_validate_options(), 184

boj_sc6_comments(), 292boj_styling_settings(), 108boj_ti_ask_twitter(), 266boj_ti_get_infos(), 266boj_utags_do_action(), 142boj_view_cron_settings(), 382check_admin_referer(), 139check_ajax_referer(), 372checked(), 89, 392compare(), 395count_many_users_posts(), 222count_user_posts(), 221count_users(), 213create_function(), 67current_filter(), 66current_time(), 496current_user_can(), 134, 136,

232, 237current_user_can_for_blog(),

233dbDelta(), 204deactivate_plugins(), 43delete_blog_option(), 448delete_option():, 178delete_post_meta(), 322delete_user_meta(), 196, 226dezaktywacji, 43did_action(), 57do_action(), 72, 75do_action_ref_array(), 54, 72,

75do_settings_fields(), 189do_settings_sections(), 189do_shortcode(), 290, 292error_log(), 260error_reporting(), 145esc_attr(), 155, 438esc_attr__(), 118esc_attr_e(), 119esc_attr_x(), 121esc_html(), 155esc_html__(), 119esc_html_e(), 119esc_html_x(), 121esc_js(), 156esc_sql(), 162

Page 42: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

510 � WTYCZKI DO WORDPRESSA

funkcjaesc_url(), 156esc_url_raw(), 95, 103fetch_feed(), 276fopen(), 250fsockopen(), 251function_exists(), 458get_avatar(), 496get_blog_count(), 454get_blog_details(), 428, 438get_blog_option(), 448get_blog_post(), 428get_currentuserinfo(), 135,

220, 496get_num_queries(), 172get_option(), 177, 387get_pages(), 496get_post(), 229get_post_meta(), 99get_post_types(), 497get_posts(), 496get_query_var(), 409get_role(), 241get_sitestats(), 454get_super_admins(), 453get_taxonomy(), 330get_the_author_description(),

465get_user_count(), 454get_user_meta(), 224get_userdata(), 219, 496get_users(), 211, 212get_users_of_blog(), 212grant_super_admin(), 452have_posts(), 430has_action(), 56has_filter(), 65home_url(), 41insert(), 164intval(), 145, 147is_blog_user(), 449is_email(), 151, 495is_int(), 147is_multisite(), 427, 430is_super_admin(), 237is_tax(), 334is_taxonomy(), 462is_taxonomy_hierarchical(),

333is_user_logged_in(), 210

is_wp_error(), 255isset(), 100, 465json_decode(), 264json_encode(), 264, 417load_plugin_textdomain(), 117load_tweets(), 342map_meta_cap(), 232, 235mysql_fetch_array(), 163mysql_query(), 163parse_request(), 404, 405plugin_dir_path(), 40plugins_api(), 274plugins_url(), 41post_type_exists(), 318prepare(), 386print_r(), 405printf(), 125register_deactivation_hook(),

43register_activaction_hook(),

496register_activation_hook(), 42register_deactivation_hook(),

496register_post_type(), 307, 313,

314, 319, 497register_setting(), 182, 184register_taxonomy(), 324, 327register_taxonomy_for_object_

type(), 329register_uninstall_hook(), 46,

496rejestracji błędów, 466remove_action(), 55remove_all_actions(), 56remove_all_filters(), 65remove_all_shortcodes(), 288remove_filter(), 64remove_role(), 240remove_shortcode(), 288remove_user_from_blog(), 451restore_current_blog(), 429revoke_super_admin(), 452sanitize_email(), 151sanitize_key(), 149sanitize_text_field(), 148selected(), 89shortcode_atts(), 289, 298site_url(), 41sprintf(), 125

strip_shorcodes(), 289strip_tags(), 85strtotime(), 150, 390strumienia fopen(), 250switch_to_blog(), 429, 431, 440taxonomy_exists(), 333, 462the_content, 317the_excerpt(), 318the_permalink(), 318the_post(), 430the_terms(), 331the_title(), 317update(), 84, 164, 439update_blog_option(), 448update_blog_status(), 447update_option(), 179update_post_meta(), 103, 322update_user_meta(), 225user_can(), 234usort(), 435var_dump(), 167, 171version_compare(), 43widget(), 85WordPress Object Cache, 468wp_add_dashboard_widget(),

92wp_cache_add(), 469wp_cache_delete(), 469wp_cache_get(), 469, 470wp_cache_replace(), 469wp_cache_set(), 469–471wp_create_user(), 216wp_default_styles(), 351wp_delete_user(), 218wp_dequeue_script(), 349wp_enqueue_script(), 104,

128, 345, 348, 374podstawowy skrypt, 346skrypt w stopce

dokumentu, 348skrypt z numerem wersji,

347skrypt z zależnościami, 347własny skrypt, 346

wp_enqueue_style(), 351wp_enqueue_styles(), 104wp_get_current_user(), 220wp_head(), 60wp_insert_user(), 214, 217wp_kses(), 157

Page 43: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

Skorowidz� 511

wp_localize_script(), 127, 359wp_mail(), 28, 496wp_nav_menu(), 431wp_next_scheduled(), 383wp_nonce_field(), 139wp_nonce_url(), 138wp_rand(), 496wp_redirect(), 496wp_register_script(), 351wp_remote_get(), 252wp_remote_head(), 252wp_remote_post(), 252wp_remote_request(), 252wp_schedule_event(), 376wp_schedule_single_event(),

378wp_strip_all_tags(), 148, 495wp_unschedule_event(), 380wp_upload_dir(), 496wp_widget_rss_output(), 94wpdb_query(), 386wpmu_create_blog(), 443, 445

funkcje*_option(), 496*_post_meta(), 497API HTTP, 277API Settings, 181esc_*(), 495fabryczne, 47obsługi HTTP, 252plugin_dir_*(), 496szybko zwracające wartość, 67uznane za przestarzałe, 459WordPress, 495wp_*_post(), 496wp_nonce_*(), 496wp_remote_*

parametry domyślne, 253parametry opcjonalne, 253

zaczepu akcji, 54zaczepu filtru, 63

G

generator dokumentacji, 498generowanie formularza, 185GET, 248, 249Google CDN, 350Google Chrome, 504Google XML Sitemaps, 26

H

Hackers mailing list, 501harmonogram

jednorazowe zadanie, 378stare wersje wpisu bloga, 385tworzenie zadań, 376usunięcie zadania, 380własne odstępy czasu, 381wyświetlanie zadań, 381

headers, 256heredoc, 260HTML, 152HTTP, 24, 247

kody stanu, 249http_request_failed, 254

I

i18n, 115identyfikator bloga, 438ikony, 107, 108instalacja wtyczki, 30integracja wtyczki z platformą,

77interfejs użytkownika, 191interfejs użytkownika platformy

WordPress, 106internacjonalizacja, 115internacjonalizacja kodu

JavaScript, 127is_wp_error(), 262iteracja, 343, 365, 382, 383, 404

J

JavaScript, 156, 337jądro platformy, 493jednorazowe zadanie, 378język domyślny WordPress, 130jQuery, 337

łączenie, 338obiekt, 338składnia, 338tryb bezkonfliktowy, 340wykonanie kodu, 340

JSON, 264

K

kanał IRC, 502kanał RSS, 95kanał wiadomości, 419

rejestracja, 419wtyczka, 420

katalogblogs.dir, 426boj-alert-box, 127boj-alert-box.php, 127boj-plugin, 117FTP, 261languages, 117mu-plugins, 450plugins, 36wp-admin/js, 349wp-content, 40, 358, 426, 466wp-includes, 495wp-includes/js, 349wtyczek, 26, 32, 36, 117

klasabutton-highlighted, 109button-primary, 109button-secondary, 109displaying-num, 113form-table, 110page-numbers, 113SimplePie, 277widefat, 112WP_Ajax_Response, 372WP_Http, 252WP_Widget, 437wpdb, 163

klient Subversion, 480klient wysyłający żądanie, 248klient-serwer, 248kod, 46kod BBCode, 290kod błędu, 254kod błędu 404, 405kod flash, 416kod funkcji proxy, 295kod JavaScript, 296kod kreskowy, 416kod makro, 279kod QR, 406, 416kod źródłowy, 21kod źródłowy dowolnego pliku,

499

Page 44: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

512 � WTYCZKI DO WORDPRESSA

kody stanu HTTP, 249kolejkowanie skryptów, 346, 365komentarz, 494komunikaty błędów, 254, 263,

373, 462, 464konfiguracja procesu cron, 385konfiguracja SVN, 480konto na witrynie

WordPress.org, 478kontrola nad możliwościami,

313konwersja cudzysłowu, 144konwersja znaków na encje

HTML, 154

L

l10n, 116licencja, 474

Apache, 474BSD, 474dla wtyczki, 39, 474GPL, 474, 475

zalety, 475LGPL, 474MIT (X11), 474podwójna, 475podzielona, 475

liczba użyta jednokrotnie, 137lista nieuporządkowana, 74lista uporządkowana, 74listy dyskusyjne, 501listy zaczepów, 76lokalne ścieżki dostępu, 40

M

marketing, 473, 491menu najwyższego poziomu, 429metadane, 194

pobieranie, 196uaktualnianie, 195usuwanie, 196zapisywanie, 195

metadane użytkownika, 223metadane wpisu bloga, 295, 319metoda

GET, 139get_results(), 168get_row(), 166

get_var(), 166insert(), 166, 170prepare(), 170, 171query(), 169remove_cap(), 242

miejsca zarezerwowane, 125model DOM, 341, 353moduł mod_rewrite, 402modyfikacja pliku .htaccess, 426motyw, 28, 29możliwości, 229, 230, 313możliwości domyślne, 313możliwości meta, 232możliwości roli, 232możliwość

delete_post, 314delete_forum_topics, 241delete_users, 237edit_others_posts, 314edit_post, 314edit_posts, 314publish_forum_topics, 241publish_posts, 314read_post, 314read_private_content, 238read_private_posts, 314

music_album, 335

N

nagłówek wtyczki, 38nagłówki, 107narzędzia programisty, 493, 504narzędzia służące do

tłumaczenia, 130narzędzie

GlotPress, 130GNU Gettext, 130KBabel, 130Launchpad, 130phpMyAdmin, 205PHPXref, 499Poedit, 130, 131Pootle, 130

nawiasy, 48nazwa wtyczki, 483nazwy domyślne tabel, 202nazywanie

funkcji, 47katalogów, 36

plików, 47wtyczek, 36zmiennych, 47

NetBeans IDE, 505NextGEN Gallery, 26niebezpieczne dane, 144niebezpieczny kod HTML, 157nieprawidłowy formularz, 143nonce, 137Notepad++, 505number used once, 137numer ASIN, 283

O

obiekt$post, 99$wp_query, 404, 406$wp_rewrite, 404, 419$wpdb, 163query, 405rewrite, 405wpdb, 172

obiekty błędów, 254obraz płyty CD, 287obsługa

komentarzy, 290proxy, 257struktur zagnieżdżonych, 292zapytań, 404

obiekt query, 405obiekt rewrite, 405proces ogólny, 404wtyczki, 406

oczyszczanie danych, 143, 146odnośnik bezpośredni, 412odnośniki, 110, 362, 364odpowiedź serwera WWW

body, 256cookies, 256headers, 256response, 256

odpowiedź XML, 371, 373ogłoszenie wydania wtyczki, 487ograniczanie dostępu, 231

nadawanie uprawnień, 237uprawnienia użytkownika,

232opakowanie, 340opakowaniem noConflict(), 341

Page 45: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

Skorowidz� 513

opcjaclassname, 83description, 84UTF-8, 131WP_DEBUG, 466WP_DEBUG_LOG, 466

opcje. 24pobieranie, 177, 192rozdzielanie, 179usuwanie, 178, 193wczytywanie tablicy, 178zapisywanie, 175, 192zapisywanie tablicy, 176

opcje widgetu, 93opcje witryny, 448open source, 474opis funkcji, 498opłaty, 476Options, Patrz opcjeosadzanie mapy, 296osadzanie skryptu, 351Ozh Richard, 15

P

parametr$abs_rel_path, 117$accepted_args, 53, 55, 62, 64$action, 138, 372$after, 317, 331$arg, 52, 54$args, 211, 233, 235, 253, 307,

324$attr, 282$autoload, 179$before, 317, 331$blog_id, 428, 429, 443, 447,

448, 449, 451$cap, 235$capabilities, 239$capability, 232, 234, 235$caps, 235$content, 283$context, 120$data, 468$dependencies, 345$die, 372$display_name, 239$domain, 117, 443$echo, 317

$email, 216$expire, 469$fields, 428$file, 40, 42, 44, 45$function, 42, 44, 45, 53$function_to_check, 57, 66$function_to_remove, 55, 64$getall, 428$group, 469$handle, 127, 345$id, 218, 331$in_footer, 345$key, 448, 468$l10n, 127, 129$meta, 443$meta_key, 195, 224, 225, 226,

320, 321, 322, 323$meta_value, 195, 224, 225,

226, 320, 322, 323$more_link_text, 318$object_name, 127$object_type, 324, 330$output_type, 166$password, 216$path, 41, 443$plugin, 41$plugin_rel_path, 117$post, 234$post_id, 320, 321, 322, 323,

428$post_type, 124, 307$pref, 447$prev_value, 322$priority, 53, 55, 56, 61, 64, 65$query-arg, 372$reassign, 218, 451$refresh, 448$role, 239, 449$row_offset, 166$sep, 62, 331$seplocation, 62$single, 224, 321$sql, 166$src, 345$stripteaser, 318$tag, 52, 53, 54, 55, 56, 57$taxonomy, 324, 329, 331$text, 125$title, 62, 443$unique, 195, 224, 320

$url, 138, 252$user_id, 195, 224, 225, 226,

235, 237, 443, 449, 451—$user_id, 221$userdata, 214$username, 216$validate, 429$value, 61, 447, 448$ver, 345$wp_title, 62address, 294args, 376, 378autoload, 179, 180blogid, 433body, 254boj_action, 138boj_single_cron_hook, 379callback, 92, 97callback_args, 97capability, 78, 79, 80context, 97control_callback, 92cookies, 254function, 78, 79, 80headers, 254hook, 376, 378icon_url, 78id, 97key, 99latlng i sensor, 294menu_slug, 78, 79, 80menu_title, 78, 79, 80meta_key, 100meta_value, 100method, 253num, 433page, 97page_title, 78, 79, 80parent_slug, 79pobieranie opcji, 177position, 78post_id, 99, 100posts_per_page, 433prev_value, 100, 225priority, 97recurrence, 376sensor, 294single, 99store_id, 407timeout, 253

Page 46: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

514 � WTYCZKI DO WORDPRESSA

parametrtimestamp, 376, 378title, 97update-check, 275user-agent, 253widget_id, 92widget_name, 92wp_ajax_$action, 362wp_ajax_nopriv_$action, 362zapisywanie tablicy opcji, 176

pętla własnego typu, 315PHP, 36PHPDoc, 47, 494, 498PHPDocumentor, 47phpMyAdmin, 506PHPXref, 47, 498Planet WordPress, 503plik

boj-alert-box-$locale.mo, 130.htaccess, 402admin-ajax.php, 364boj-alert-box-$locale.po, 130boj-alert-box-script.js., 129boj-error-plugin.php, 463boj-force-admin-color.php,

217boj-insert-user.php, 215boj-meta-box.php, 104boj-meta-image.js, 105boj-meta-image.js., 103boj-music-collection.php, 335boj-user-favorite-post.php,

228boj-user-ratings.php, 221boj-user-registration-

date.php, 220debug.log, 466dziennika błędów, 467formatting.php, 495functions.php, 495http.log, 260index.php, 404MO, 130page.php, 409pluggable.php, 496plugin.php, 496, 500PO, 130post.log, 160post.php, 496POT, 131

readme.txt, 480, 482Changelog, 483Contributors, 482Description, 482Donate link, 482Extra, 483Frequently Asked

Questions, 483Installation, 482Requires at least, 482Screenshots, 483Stable tag, 482Tags, 482Tested up to, 482

script.js.php?args, 359self_form.php, 158sklepy.php, 409

kod źródłowy strony, 410skrypt.js.php, 357testsql.php, 205uninstall.php, 37, 44, 45wp-admin/includes/

deprecated.php, 460wp-admin/includes/ms.php,

453wp-config.php, 33, 130, 203,

358, 385wp-includes/class-http.php,

252wp-includes/compat.php, 264wp-includes/deprecated.php,

460wp-includes/l10n.php, 199wp-includes/ms-

deprecated.php, 460wp-includes/pluggable.php,

135wp-includes/pluggable-

deprecated.php, 460wp-includes/post.php, 315wp-includes/post-

template.php, 315wp-includes/rewrite.php, 416wp-load.php, 358, 404wp-settings.php, 404

plikicookies, 158CSS, 351pl_PL, 200statyczne .js, 357

tłumaczenia, 130tworzące jądro platformy, 495wtyczki boj-music-collection-

-post-types.php, 310Plugin, Patrz wtyczkapobieranie opcji, 177pobranie kolumny, 168pobranie ogólnych wyników, 168pobranie rekordu, 166pobranie zmiennej, 166podstrony, 406pojemnik zaczepów filtrów, 70pola formularza, 110pola ustawień, 191pole użytkownika, 97

inicjalizacja, 99pobranie wartości

metadanych, 99pole zaawansowane, 101wstawianie adresu URL, 104wstawianie obrazu, 103zapis danych, 98zapis metadanych, 98

polecenia SELECT * FROM, 169polecenia SQL, 49polecenie

crontab, 385echo, 281return, 281testowe SQL, 206wget, 385

pomoc techniczna, 488poprawianie błędów, 463POST, 120, 249, 267poufne dane, 135prefiks, 36proces tworzenia wtyczki, 50proces wczytywania strony, 25promowanie wtyczki

fora, 491odnośnik do własnej strony,

491ogłoszenie wydania, 487serwisy społecznościowe, 491tworzenie doskonałego kodu,

486utworzenie własnej strony,

487zbudowanie witryny

internetowej, 485

Page 47: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

Skorowidz� 515

protokółFTP, 506HTTP, 247HTTPS, 364SFTP, 506typu żądanie-odpowiedź, 248

proxy, 257przechowywanie danych

dostęp do tabeli, 206sprawdzenie istnienia tabeli,

203standardowe tabele, 202typy danych, 202uaktualnienie struktury tabeli,

204własna tabela, 202

przechowywanie współrzędnychadresu, 295

przeglądarka Chrome, 374przeglądarka Firefox, 374przeglądarka internetowa, 504przyciski, 109punkt końcowy, 415

definicja, 416dodawanie punktu, 416lista stałych, 417

PuTTY, 506

R

read_private_content, 238register_activation_hook, 58register_deactivation_hook, 58reguła zmiany adresów, 407rejestracja ustawień, 182rejestracja widgetu, 87rejestracja zdarzeń, 260rejestrowanie błędów, 466rejestrowanie skryptów, 351repozytorium, 261repozytorium Subversion, 480repozytorium wtyczki, 270, 477

informacje szczegółowe, 275uaktualnienie wtyczki, 271zalety, 477

response, 256rewrite, 24robot spamowy, 302rola, 229, 230

administrator, 242contributor, 241dodanie możliwości, 241

dostosowanie, 238Superadministratora, 452tworzenie, 239usuwanie, 240usuwanie możliwości, 242

role domyślne, 230Administrator, 230Author, 231Contributor, 231Editor, 231Subscriber, 231

role własne, 231administrator forum, 231, 243budowanie wtyczki, 242członek forum, 231, 243moderator forum, 231, 243uprawnienia

delete_forum_topics, 242edit_others_forum_topics,

242publish_forum_topics, 242read_forum_topics, 242

zawieszony członek forum,231, 243

rozsławienie wtyczki, 483rozszerzenie Firebug, 504rozszerzenie YSlow, 504RSS, 95, 276

S

sekcjadiscussion, 191general, 191media, 191permalink, 191privacy, 191reading, 191writing, 191

sekcja WordPress, 191serwer

Apache, 402IIS, 402Lighttpd, 402Nginx, 402odpowiedź, 248WWW, 402

serwisAmazon, 281Tumblr, 269Twitter, 263

Settings, Patrz ustawieniaSFTP, 505Shortcode, Patrz skrótsieć Multisite, 423, 424, 456

agregacja treści sieci, 429baza danych, 455funkcje, 427identyfikator bloga, 427instalacja, 425nowa witryna, 443opcje witryny, 448przełączanie witryn, 433sieć i witryna, 424statystyka, 454superadministrator, 452tabele, 455uaktualnianie stanu witryny,

447użytkownicy, 448widget, 436właściciel witryny, 453włączanie obsługi, 426zalety, 425

SimplePie, 276Site Request Forgery, 133sklep, 407

tworzenie strony, 409wyświetlanie produktów, 414

składnia $(), 341składnia dla HTML5, 353składnia dla XHTML, 353skrót, 24, 279, 303skrót do wpisu bloga, 432skrót samozamykający się, 293skróty rekurencyjne, 290skrypt

dodawanie, 353dodawanie na stronach

administracyjnych, 355dodawanie na stronach

publicznych, 356dołączanie, 345osadzanie, 351rejestrowanie, 351strona klienta, 365strona serwera, 366usuwanie, 349wstawianie, 363zastępowanie, 350

skrypty Ajax, 142

Page 48: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

516 � WTYCZKI DO WORDPRESSA

skrypty domyślne, 349skrypty dynamiczne, 357słowa kluczowe, 131słownik, 497słowo kluczowe KEY, 204SMTP, 25solidna implementacja, 201Source View, 499spacja, 49spotkania

WordCamp, 504WordPress Meetup, 504

sprawdzanie typu protokołu, 103SQL Injection, 133SSH, 505, 506SSL, 42stała

__FILE__., 40FORCE_SSL_ADMIN, 364SAVEQUERIES, 135WP_ACCESSIBLE_HOSTS,

258WP_DEBUG, 145WP_HTTP_BLOCK_

EXTERNAL, 258WP_PLUGIN_URL, 42WP_UNINSTALL_PLUGIN,

45standard PHPDoc, 494stopka dokumentu, 348stronicowanie, 113struktura katalogów, 37styl poleceń SQL, 204styl thickbox, 104style, 351style dla znaczników HTML, 112Subversion, 480synchronizacja pliku POT, 131

Ś

ścieżka dostępu, 39

T

tabelawp_1_commentmeta, 455wp_1_comments, 455wp_1_links, 455wp_1_options, 455

wp_1_postmeta, 455wp_1_posts, 455wp_1_term_relationships, 456wp_1_term_taxonomy, 456wp_1_terms, 456wp_blog_versions, 455wp_blogs, 455wp_registration_log, 455wp_signups, 455wp_site, 455wp_sitecategories, 455wp_sitemeta, 455wp_usermeta, 455wp_users, 455

tabela $wpdb->postmeta, 319tabela $wpdb->usermeta, 223tabela users, 219tabela wp_blogs, 428tabele, 112

dostęp do tabeli, 206sprawdzenie istnienia, 203standardowe, 202tworzenie tabel, 202uaktualnianie struktury, 204

tablica$_COOKIE, 158$_GET, 145, 158$_POST, 145, 158$_REQUEST, 145, 158$results, 169formatów, 165globalna $shortcode_tags, 288klauzul WHERE, 164opcji, 84superglobalna $_SERVER,

157tablice danych, 158Tadlock Justin, 15tagi warunkowe taksonomii, 333taksonomia, 314, 323

kategoria, 323menu nawigacyjne, 323odnośnik, 323pobieranie, 330przypisanie do typu wpisu,

329rejestracja, 324tag wpisu, 323tagi warunkowe, 333

taksonomia hierarchiczna, 327

taksonomia niehierarchiczna,327

taksonomie własne, 330technologia Ajax, 337, 341, 343,

360, 374dostęp do treści, 344informowanie użytkownika,

344kod JavaScript, 344odpowiedź, 361reguły, 360usuwanie błędów, 373wskaźnik postępu, 344zdarzenia, 361żądania, 361, 362

testowanie funkcji wtyczek, 33TextMate, 505thickbox, 104tłumaczenie

dostępne narzędzia, 130GlotPress, 130GNU Gettext, 130KBabel, 130Launchpad, 130Poedit, 130Pootle, 130

tłumaczenie wtyczki, 116, 117TortoiseSVN, 480Trac, 501transakcje HTTP, 248transients, 24treści dla zalogowanych, 301treści ograniczone czasowo, 302tryb bezkonfliktowy, 340tryb usuwania błędów, 461Tumblr, 269Twitter, 263, 503Twitter Info, 264tworzenie

alternatywnego API, 275geokodu, 293harmonogramu zadań, 376kodu, 46koszmarnego kodu, 463menu najwyższego poziomu, 77nazwy wtyczki, 483plików tłumaczenia, 130roli, 239skrótu, 279strony administracyjnej, 181

Page 49: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

Skorowidz� 517

strony sklepów, 409unikalnych identyfikatorów,

137użytkowników, 214widgetów, 82widgetów kokpitu, 92witryn w sieci Multisite, 444własnej tabeli, 202własnych taksonomii, 323własnych zaczepów, 72wtyczki, 35wtyczki z metadanymi

użytkownika, 227zaawansowanego widgetu, 90zadań, 376

typ wpisu bloga, 314typy danych, 202typy wtyczek, 32typy zwracanej wartości, 67

U

uaktualnianiekomentarzy, 170metadanych, 195struktury tabeli, 204

uaktualnieniaplatformy, 51użytkowników, 214wtyczek, 29

udostępnienie wtyczki, 477unieszkodliwianie

niebezpiecznych znaków, 121unikalna wartość, 372unikalny identyfikator, 137

83a08fcbc2, 137dla adresu URL, 138dla formularza, 139w skryptach Ajax, 142

UNIX, 375, 390uprawnienia użytkownika, 134,

136uruchamianie sieci, 426usługa skracania adresów URL,

137ustawienia, 24ustawienia platformy, 192ustawienia użytkowników, 194

dodanie opcji, 198dodawanie pól, 197

metadane, 194pobieranie identyfikatora, 197pobieranie metadanych, 196przechowywanie ustawień, 201tworzenie wtyczki, 194uaktualnianie metadanych, 195usunięcie metadanych, 196

ustawienia widgetu, 84usuwanie

błędów, 461komentarzy, 369

kod źródłowy, 396metadanych, 322możliwości z roli, 242opcji, 178skryptu, 349użytkowników, 214zadań, 380znaków z adresu URL, 103

użytkownik, 210, 230dane użytkownika, 219metadane użytkownika, 223tworzenie, 214uaktualnianie, 214uprawnienia, 232usuwanie, 214wtyczka z metadanymi, 227

V

Versions, 480

W

wartośćdomyślna, 43, 395manage_music_collection, 314zwrotna, 205

wcięcie, 48wczytywanie tablicy opcji, 178WeblogToolsCollection.com, 503weryfikacja danych, 143, 146, 184

ciąg tekstowy adresu e-mail,151

dane pochodzące zezdefiniowanego zbioru, 159

HTML, 152JavaScript, 156liczby całkowite, 147mieszane ciągi tekstowe, 148

oczyszczanie adresów URL, 155oczyszczanie wewnętrznych

identyfikatorów, 149pliki cookies, 158tablice danych, 158usuwanie znaczników HTML,

153wzorce ciągu tekstowego, 149zapytania do bazy danych, 161zwykłe ciągi tekstowe, 147

weryfikacja unikalnegoidentyfikatora, 139

weryfikacji daty, 150węzeł, 154

atrybut węzła, 154element węzła, 154tekst węzła, 154

węzeł HTML, 154wiadomości RSS, 276widget, 24, 82, 317

boj_widgetexample_widget_my_info(), 84

wyświetlający wpisy bloga,441

z treścią sieciową, 436zaawansowany, 87

widgety kokpitu, 24, 93Williams Brad, 15window.onload, 340witryna

stan Archived, 424stan Deleted, 424stan Mature, 424stan Public, 424stan Spam, 424

witryna Gravity Forms, 486witryna WordPress.org, 477wizualna integracja, 201własne pola, 319własne typy wpisów bloga, 315właściwości obiektu wpdb, 172WordCamp, 491, 504WordPress, 23

wydania główne, 459wydania mniejsze, 459

WordPress DevelopmentUpdates, 502

WordPress Meetup, 504WordPress Multisite, Patrz sieć

Multisite

Page 50: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

518 � WTYCZKI DO WORDPRESSA

WordPress Planet, 503WordPress.org, 477wpdb, 172

śledzenie liczby zapytań, 172włączenie wyświetlania

błędów, 172zmienne klasy, 172

WPEngineer.com, 503wstawianie kodu JavaScript, 363wtyczka, 23, 24

aktualizacja oprogramowania,458, 460

automatyczny e-mail, 390bezpieczeństwo, 133BOJ Admin Lang, 199buforowanie wpisów, 470dezinstalacja, 44dodawanie użytkownika

do witryny, 450edycja, 31harmonogram, 383instalacja, 30kanał wiadomości

kod źródłowy, 420katalog, 32Kolekcja muzyczna, 334licencja, 39lista sklepów, 407

kod źródłowy, 408memcached, 194nagłówek, 38Nieużywane tagi, 140, 142obsługująca własne role

i możliwości, 242oczyszczenie danych, 143odnośnik, 363odnośnik bezpośredni, 415oficjalny katalog, 26określanie ścieżek dostępu, 39opłaty, 476pobierająca dane, 287pomoc techniczna, 488poprawione błędy, 465promowanie, 483przełączanie witryny, 430punkt końcowy, 418

kod źródłowy, 418repozytorium wtyczek, 477Simple Tumblr Backup, 268skrótu, 280

testowanie funkcji, 33witryny w sieci Multisite, 444

kod, 445Twitter Info, 264typu wpisu bloga, 334typy, 32unikalne identyfikatory, 136ustawienia, 175, 207usuwanie komentarzy, 369-370,

393kod źródłowy, 396

utworzenie pliku, 35weryfikacja, 143wpisy bloga, 435z błędami, 463z metadanymi użytkownika, 227zabezpieczenie, 133zadanie raz w tygodniu, 388zalety, 27zarządzanie, 31zgłoszenie do repozytorium,

479wyrażenia regularne, 149, 270, 403

nawiasy kwadratowe, 149znak /, 149znak +, 149

wyrażenie ?debug=1, 135wysyłanie danych do zdalnego

API, 267wyszukiwanie funkcji, 495wyszukiwanie zaczepów, 75wyświetlanie komunikatów, 108wyświetlanie widgetu, 439wzorzec, 149wzorzec znacznika, 284

Y

YSlow, 504

Z

zaawansowane poleużytkownika, 102

zachowanie spójności interfejsuużytkownika, 106

zaczep, 51404_template, 70admin_menu, 59admin_notices, 142

akcji admin_init, 387akcji boj_cron_hook, 377akcji init, 329archive_template, 70attachment_template, 70author_template, 70baza danych, 500category_template, 70comment_text, 69date_template, 70filtru, 68, 73filtru map_meta_cap, 235front_page_template, 70home_template, 70index_template, 70init, 59, 136, 408page_template, 70plugins_loaded, 58, 136search_template, 70single_template, 70tag_template, 70template_include, 70template_redirect(), 60the_content, 68the_title, 69uninstall, 45user_contactmethods, 226wp_head, 60

zaczepy akcji, 58zaczepy zmienne, 75zapisywanie metadanych, 195zapisywanie opcji, 175zapisywanie tablicy opcji, 176zapora sieciowa, 257zapytania, 404zapytania do bazy danych, 161zarządzanie wtyczkami, 31zastąpienie znacznika, 284zbieranie informacji, 489zdalne API, 267zdarzenia w Ajax, 361zdarzenie onload, 341zmiana adresu URL, 401, 407

dodanie zmiennej store_id, 407tworzenie reguły, 407wyczyszczenie reguł, 408

zmienna$boj_mbe_image, 102$clean, 145$count, 127

Page 51: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288

Skorowidz� 519

$cron, 382$date_format, 382$deleted, 170$domain, 445$local_posts, 434$map_id, 299$network_posts, 434$path, 445$post_content, 267$post_title, 267$return_posts, 433$schedules, 382$title, 445$user_id, 445dynamiczna, 360globalna $blog_id, 427, 450globalna $current_user, 220,

450znacznik

%produkt%, 413<!--more-->, 362

CDATA, 360czasu, 390odnośników bezpośrednich,

413zmiany adresów, 413

znaczniki nagłówków, 107znaczniki PHP, 49znaczniki typu BBCode, 292znak $, 338znak ^, 149

Ż

żądania Ajax, 362, 371żądania FTP, 260żądania HTTP w PHP, 250

funkcja fopen(), 250funkcja fsockopen(), 251rozszerzenie CURL, 251rozszerzenie HTTP, 250strumień fopen(), 250

żądania HTTP w WordPressfunkcje pomocnicze, 256funkcje wp_remote_*, 252parametry wejściowe, 252wartości zwrotne, 254zakończone niepowodzeniem,

254zakończone powodzeniem,

255żądania JSONP, 343żądanie

do alternatywnego API, 272GET, 252HEAD, 252HTTP, 247odpowiedź na żądanie, 258rejestracja żądań, 258JSON, 343POST, 252, 267

Page 53: Wtyczki do WordPressa. Programowanie dla profesjonalistów · Podstawy wtyczek .....35 Utworzenie pliku wtyczki ... 10 WTYCZKI DO WORDPRESSA Wewnętrzny sposób działania .....288