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):

bartosz@romanowski.im

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:

Napisz do mnie: 

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:

$text = "Piszemy WordPress, nie WordPress";
echo capital_P_dangit($text);

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):

Opublikowano post_date)); ?> temu

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

Opublikowano 5 dni temu

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):

$pierwszy_url = get_url_in_content(get_the_content());
if($pierwszy_url) {
    echo 'Link z wpisu';
}

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:

$urle = wp_extract_urls(get_the_content());
if($urle) {
    echo 'Ostatni link z wpisu';
}

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ą):


// tutaj kod przycisków Facebooka, Twittera, Google+ itp.

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:

if(wp_is_mobile()) {
    echo 'Cześć użytkowniku mobilny';
}
else {
    echo 'Nie jesteś mobilny...';
}

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:

$post_id = url_to_postid('http://nasza-domena.pl/2015/02/02/to-jest-testowy-wpis/');

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:

// 16-znakowe hasło z dwoma zestawami znaków specjalnych !@#$%^&*() i _ []{}<>~`+=,.;:/?|'
$haslo = wp_generate_password(16, true, true);

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:

function remove_shortcode_from_index($content) {
	if(is_home()) {
		$content = strip_shortcodes($content);
	}
	return $content;
}
add_filter('the_content', 'remove_shortcode_from_index');

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]:

function custom_shortcode_scripts() {
	global $post;
	if(is_a($post, 'WP_Post') && has_shortcode($post->post_content, 'wielki-slider')) {
		wp_enqueue_script('wielki-slider-js');
	}
}
add_action('wp_enqueue_scripts', 'custom_shortcode_scripts');

wp_rand()

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

Przykład:

$liczba = wp_rand(2, 5); // losowa liczba z zakresu od 2 do 5

convert_smiles()

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

Przykład:

echo convert_smilies("Ta emotikonka będzie obrazkiem :)");

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:

echo wp_text_diff('Stara wersja', 'Nowa wersja');

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