21 ciekawych funkcji ukrytych w WordPressie

Kod PHP

WordPress kryje wiele ciekawych funkcji, które ułatwiają życie twórcom motywów i wtyczek. Większość z nich jest powszechnie znana i stosowana, ale są również takie, których mało kto używa, a niektórych nie znajdziemy nawet w oficjalnej dokumentacji. Ten wpis ma na celu przybliżenie tych mniej znanych funkcji, z których kilka to bardziej ciekawostki niż przydatne narzędzia.

Tym razem poruszany temat jest (wyjątkowo) przeznaczony dla nieco bardziej zaawansowanych użytkowników WordPressa, co oczywiście nie oznacza, że początkujący mają go omijać szerokim łukiem.

Wybrałem funkcje, które (moim zdaniem) są mało popularne, a jednocześnie (również moim zdaniem) ciekawe. Gdyby okazało się, że o czymś zapomniałem, to zapraszam do podzielenia się uwagami w komentarzach.

Celowo pomijam funkcje prywatne, ponieważ są one przeznaczone tylko do użytku wewnętrznego i nie należy z nich korzystać w motywach i wtyczkach.

antispambot()

Ta sprytna funkcja pozwala na „ukrycie” naszego adresu e-mail przed botami zbierającymi adresy ze stron internetowych i umieszczającymi je w bazach używanych do rozsyłania spamu. „Ukrywanie” polega tak naprawdę na zastąpieniu części znaków w adresie encjami HTML. Mój e-mail po potraktowaniu go funkcją antispambot() będzie wyglądał tak (oczywiście tylko w kodzie strony – przeglądarka wyświetli go w czytelny sposób):

Co ciekawe, za każdym razem funkcja zastępuje inne znaki, tak więc wynik jej działania jest zawsze inny.

Najprostszy przykład wykorzystania funkcji może wyglądać tak:

capital_P_dangit()

Mało użyteczna (żeby nie powiedzieć bezużyteczna) funkcja, której jedynym zadaniem jest zamiana w tekście niepoprawnie pisanej nazwy „WordPress” na poprawną wersję „WordPress”.

Przykład:

wp_is_large_network()

Dziwna funkcja, za pomocą której możemy się dowiedzieć, czy nasza wtyczka działa właśnie w dużej instalacji sieciowej (multisite). Według twórców WordPressa, „duża instalacja sieciowa” to taka, w której znajduje się minimum 10 tysięcy stron lub 10 tysięcy użytkowników. To jedna z tych funkcji, które są tylko ciekawe.

human_time_diff()

Funkcja zwraca różnicę pomiędzy dwoma datami w formie słownej. Dzięki niej możemy poinformować naszych czytelników, że wpis został opublikowany nie 2 lutego, ale 5 dni temu.

Przykład (należy umieścić wewnątrz pętli):

Wynik będzie wyglądał mniej więcej tak:

get_url_in_content()

Funkcja zwraca pierwszy napotkany adres URL w podanym tekście. Nadaje się idealnie do wykorzystania na stronach, które używają formatu wpisu „Link”. Funkcja ta jest stosunkowo mało znana – widziałem już wiele motywów, których autorzy tworzyli własne funkcje robiące dokładnie to samo.

Przykład (należy umieścić wewnątrz pętli):

wp_extract_urls()

Jeśli funkcja get_url_in_content() nam nie wystarcza (bo na przykład chcemy użyć na stronie ostatniego adresu URL z wpisu), to możemy skorzystać z funkcji wp_extract_urls(), która zwraca wszystkie adresy URL z podanego tekstu.

Przykład analogiczny do powyższego, tyle że używający ostatniego adresu URL występującego w tekście:

checked(), selected(), disabled()

Nie spotkałem jeszcze programisty, który lubi tworzyć formularze – to dlatego powstało tyle różnych narzędzi ułatwiających ten żmudny proces. Te trzy funkcje ułatwiają ustawianie atrybutów checked, selecteddisabled w polach formularza. Dzięki nim zaoszczędzimy trochę czasu, a kod formularza będzie nieco bardziej czytelny.

Przykłady wykorzystania tych funkcji znaleźć można w dokumentacji (checked(), selected(), disabled()).

is_preview()

is_preview() to jeden z dostępnych w WordPressie znaczników warunkowych (Conditional Tags), które powinien znać każdy, kto kiedykolwiek próbował pogrzebać w jakimś motywie czy wtyczce. Ta konkretna funkcja mówi o tym, czy strona jest wyświetlana w podglądzie. Pozwala to na wyświetlenie lub ukrycie jakichś elementów strony tylko w tym trybie.

Dobrym przykładem jej wykorzystania jest schowanie przycisków społecznościowych („Lubię to”, „Tweetnij” itp.) w trybie podglądu (są niepotrzebne, a i tak nie działają):

wp_is_mobile()

Funkcja sprawdza czy użytkownik przegląda naszą stronę na urządzeniu mobilnym (smartfon, tablet itp.). Sprawdzenie bazuje na wartości nagłówka User Agent przekazywanego przez przeglądarkę, tak więc jeśli użytkownik go odpowiednio zmodyfikuje (pozwalają na to niektóre przeglądarki), to funkcja może zwrócić niepoprawny wynik.

Przykład:

Funkcja ta może okazać się bezużyteczna jeśli korzystamy z mechanizmu cache.

make_clickable()

Funkcja zamienia wszystkie adresy URL w tekście na klikalne linki. Więcej na temat znaleźć można w moim wpisie Automatyczna zamiana adresów URL na linki.

url_to_postid()

Funkcja zwraca identyfikator wpisu na podstawie jego adresu URL. Działa dla wszystkich typów wpisów poza multimediami (czyli tam, gdzie byłoby to najbardziej przydatne) – w ich przypadku trzeba skorzystać z obejścia.

Przykład:

wp_rel_nofollow()

Dodaje atrybut rel="nofollow" do wszystkich znalezionych w tekście linków. Byłaby ona bardzo przydatna gdyby pozwalała na dodawanie tego atrybutu tylko do linków zewnętrznych – bez tego jest po prostu ciekawostką.

wp_generate_password()

Funkcja generująca hasło o wybranej długości i z wybranego zestawu znaków. Domyślnie generuje 12 znakowe hasło składające się z wielkich i małych liter, cyfr i znaków specjalnych (!@#$%^&*()), ale łatwo to zmienić korzystając z trzech dostępnych parametrów.

Przykład:

strip_shortcodes()

Funkcja ta usuwa shortcode z tekstu. Może to być przydatne gdy na jakiejś stronie chcemy wyświetlić treść wpisu, ale bez elementów generowanych przez shortcode (np. bez galerii).

Przykład usuwający shortcode z wpisów wyświetlanych na stronie głównej:

has_shortcode()

Funkcja, którą powinni znać i wykorzystywać wszyscy autorzy motywów, a niestety różnie to wygląda. Za jej pomocą możemy sprawdzić czy tekst zawiera konkretny shortcode. Idealnie nadaje się ona na przykład do ładowania skryptów JavaScript tylko na podstronach, na których są rzeczywiście potrzebne.

Przykład ładujący skrypt wielki-slider-js tylko na podstronach, na których występuje shortcode [wielki-slider]:

wp_rand()

Funkcja generuje losową liczbę z wybranego zakresu. Nie trzeba odkrywać koła na nowo.

Przykład:

convert_smiles()

Konwertuje tekstowe emotikony na ich graficzne odpowiedniki. Funkcja działa tylko gdy włączona jest opcja Konwertuj emotikony (Ustawienia → Pisanie).

Przykład:

trailingslashit()untrailingslashit()

Funkcja trailingslashit() dodaje na końcu dowolnego ciągu znaków (adresu URL, ścieżki itp.) ukośnik (/), a funkcja untrailingslashit() go usuwa. Niby nic, a jakie przydatne.

wp_text_diff()

Funkcja służy do generowania ładnego zestawienia różnic pomiędzy dwoma tekstami. Powstała ona na potrzeby mechanizmu porównywania wersji wpisów, ale można ją wykorzystać do własnych celów.

Przykład:

dbdelta()

To funkcja przeznaczona głównie dla twórców wtyczek, ale jest również wykorzystywana przez mechanizm automatycznych aktualizacji WordPressa. Za jej pomocą można w bardzo prosty sposób tworzyć dodatkowe tabele w bazie danych oraz (co ważniejsze) modyfikować ich strukturę (na przykład dodawać nowe kolumny). Wystarczy przekazać do funkcji przez parametr zapytanie CREATE TABLE tworzące naszą tabelę, a cała reszta wykona się sama.

Szczegółowe informacje na temat korzystania z tej funkcji można znaleźć w artykule na temat tworzenia przez wtyczki tabel w bazie danych.

Filesystem API i funkcje do manipulowania plikami i katalogami

WordPress posiada cały zestaw klas i funkcji służących do manipulowania plikami i katalogami. Wspomniam o nich dlatego, że wielu autorów wtyczek albo nie wie o ich istnieniu, albo nie chce lub nie potrafi z nich korzystać. A możliwości, jakie oferują, są olbrzymie. Możemy kopiować, przenosić i usuwać pliki i katalogi (a nawet całe struktury katalogów), kompresować i dekompresować pliki, odczytywać rozmiary plików i katalogów (w tym również całych struktur) czy generować listę plików znajdujących się w strukturze katalogów. Jeśli ktoś chce robić w WordPressie cokolwiek z plikami lub katalogami, to zanim zacznie wymyślać koło od nowa powinien koniecznie przeszukać dokumentację, bo na pewno jest tam już funkcja, której potrzebuje.

Jeśli znacie jakieś inne mało znane funkcje ukryte w WordPressie, to zapraszam do podzielenia się nimi w komentarzach.

Bezpośredni link

  • Niezła porcyjka! :D

  • Mariusz Szatkowski

    Inspirowane zapewne artykułem sprzed paru dni http://www.hongkiat.com/blog/useful-wordpress-functions/, ale i tak dzięki Bartek za zebranie, rozszerzenie i skomentowanie funkcji!

    • Temat inspirowany. ;) Ale akurat nie tym artykułem, który podlinkowałeś – rzadko zaglądam na Hongkiat.

  • Łukasz

    czy można użyć funkcji antispambot normalnie w poście? Bo w tej chwili WP nie wykonuje kodu PHP.

  • Mateusz Mikołajczak

    jak dla mnie brakuje tylko wp_list_pluck()

    • Paweł Knapek

      No to jak dla mnie, to brakowało by również z tej samej beczki wp_list_filter()
      …a potem jeszcze zyliona innych funkcji.
      Dla wielu użyszkodników ponad 90% zawartości samego tylko Function Reference to czarna magia i jedna wielka ciekawostka – można by więc dluuuuugo listować ciekawe z jakiegoś powodu i zarazem mało znane komuś funkcje.

      Raczej postawił bym tutaj większy nacisk na dobre praktyki, czyli przekaz >> poznaj swojego WordPressa i korzystaj z jego natywnych funkcji, zamiast wymyślać koło na nowo …najczęściej kwadratowe.

  • mariusz

    witam jak te funkcje dołączyć, gdzie je wpisać

    • To zależy od tego, co chcesz zrobić i gdzie.

      • Mariusz

        Ale dodaje się bezpośrednio do kodu źródłowego strony, czy jest miejsce w wordpress gdzie się je dodaje. Może jakiś przykład. ?

        • To są funkcje, których można użyć w kodzie źródłowym motywu lub wtyczki. Przy większości funkcji podałem przykłady ich użycia.

          Nie zrozum mnie źle, ale jeśli nie wiesz co zrobić z tymi funkcjami, to musisz jeszcze trochę się douczyć zanim zaczniesz z nich korzystać. Poczytaj sobie w dokumentacji o budowie wtyczek i motywów, na tym blogu znajdziesz też krótkie i ogólne (bardzo krótkie i bardzo ogólne) wprowadzenie do tworzenia wtyczek: https://wpzen.pl/jak-stworzyc-wlasna-wtyczke/

          • Mariusz

            Dziękuje za odpowiedz pozdrawiam

  • ktosik

    function wp_rand($a, $b) {
    return rand($a, $b);
    }

    ……

    • Grzegorz

      dokadnie, moim zdaniem zupełnie bezużyteczna funkcja, która w zasadzie nic nowego nie wnosi i nic nie upraszcza. Drugą dość ograniczoną funkcją jest wp_ismobile(). Zamiast niej proponuję zainstalowanie wtyczki PHP Browser Detection, która daje nam z o wiele większe możliwości filtrowania / identyfikacji przeglądarek i urządzeń z poziomu kodu php.