fot. Dan StrangeNaszym zadaniem będzie stworzenie znacznika shortcode, który wstawiony w dowolnym miejscu treści wyświetli liczbę wszystkich opublikowanych wpisów i komentarzy.
Narzędzie, którym się posłużymy
Słowem „shortcode” określa się specjalne znaczniki, które po umieszczeniu w treści wpisu generują odpowiednią mieszankę kodu HTML. Przykładowo:
[gallery]
wyświetla galerię zdjęć, które zostały dodane do wpisu,[ratings]
wyświetla system ocen wpisu (WP-PostRatings),[poll id="2"]
wyświetla ankietę o ID = 2 (WP-Polls),[youtube width="400" height="300"]eBGIQ7ZuuiU[/youtube]
wyświetla określony film z serwisu YouTube o podanych rozmiarach (youtube with style).
Na chwilę obecną WordPress posiada tylko jeden standardowy shortcode - [gallery], reszta to już sprawka odpowiednich wtyczek. Nic nie stoi jednak na przeszkodzie aby stworzyć własny shortcode.
I wbrew pozorom nie jest to wcale trudne!
Efekt, który chcemy osiągnąć
Naszym zadaniem będzie stworzenie znacznika shortcode, który wstawiony w dowolnym miejscu treści wyświetli liczbę wszystkich opublikowanych wpisów i komentarzy.
Kawałek kodu PHP, który pobierze z bazy odpowiednie dane już mamy - wystarczy sięgnąć po artykuł Jak wyświetlić łączną ilość wpisów i komentarzy.
Aktualizacja (15.12.2009): Dzięki uprzejmości Grzegorza mamy poprawiony kod PHP.
Moglibyśmy tutaj wykorzystać jedną z wtyczek opisanych w artykule PHP we wpisach i widgetach i byłoby pozamiatane. Nam jednak zależy na trzech istotnych rzeczach:
- zapewnienie komfortu użytkowania,
- ograniczenie niebezpieczeństwa,
- unikanie kopiowania kodu.
To tyle jeśli chodzi o teorię. Teraz to co tygrysy lubią najbardziej czyli praktyka!
Własny shortcode - tworzenie
Poniższy kod dodajemy do pliku functions.php:
function pokaz_statystyki ($atrybuty) { extract (shortcode_atts (array('typ' => ''), $atrybuty)); if ($typ == "ilosc-wpisow") { $posts_stats = wp_count_posts(); $wynik = $posts_stats->publish; } elseif ($typ == "ilosc-komentarzy") { $comments_stats = wp_count_comments(); $wynik = $comments_stats->approved; } return $wynik; } add_shortcode('statystyki', 'pokaz_statystyki');
Najważniejszy zapis znajduje się w ostatnim wierszu - za jego pośrednictwem został dodany shortcode o nazwie „statystyki”. Od teraz, za każdym razem gdy w treści wpisu pojawi się [statystyki] zostanie uruchomiona funkcja „pokaz_statystyki” (wiersze 1-14).
W wierszu 2. przejmowana jest wartość atrybutu „typ”. W wierszu 3. i 7. widać, że shortcode reaguje na dwie wartości atrybutu - „ilosc-wpisów” oraz „ilosc-komentarzy”. W zależności od tego jaki typ wybierzemy zostanie pobrana odpowiednia wartość z bazy danych.
Więcej o samym tworzeniu znaczników shortcode:
- Shortcode API w encyklopedii WordPressa (EN)
- WordPress Shortcode API autorstwa Maćka Palmowskiego (PL).
Własny shortcode - korzystanie
Zgodnie z tym co stworzyliśmy powyżej możemy teraz w dowolnym miejscu w treści wpisu bądź strony zamieścić shortcode:
[statystyki typ="ilosc-wpisow"]
wyświetli ilość wszystkich opublikowanych wpisów,[statystyki typ="ilosc-komentarzy"]
wyświetli ilość wszystkich zatwierdzonych komentarzy.
Koniec. Prawda, że nie było to zbyt trudne? :-)
Zachęcam do własnych eksperymentów z tą funkcjonalnością WordPressa - w razie problemów służę pomocą za pośrednictwem poniższych komentarzy.

Komentarze (14)
Dzięki za artykuł, niebawem przetestuję to rozwiązanie :)
odpowiedzFajnie :) Też sobie po testuje :) Dzięki
odpowiedzMożna taki shortcode wstawić do widgetu tekstowego?
odpowiedzCoś się chyba we wpisie posypało. Po kodzie źródłowym się siepie z deka.
Fajna zabawka. Trzeba promować shrttagi bo to naprawdę ułatwia robotę a sporo ludzi o nich nie wie. W końcu każdą funkcję można pod to podpiąć. Na vivee mamy pod podpięte ‘polecane stronki’ np. czyli wtyczka która pobiera dane z delicji.
odpowiedzWow, nie wiedziałem, że to można tak łatwo zrobić… Dzięki za pomocny trick :)
odpowiedzHej Szymon - ciekawy wpis.
Jedna uwaga - i jednoczesnie apel do wszystkich - unikajcie pisania bezposrednich zapytan SQL do bazy w pluginach. Rodzi to ryzyko, ze jesli w przyszlosci struktura bazy danych WP sie zmieni, wasz kod moze nie dzialac prawidlowo. Zawsze warto sprawdzic, czy informacja, ktora chcemy uzyskac nie jest czasem dostepna poprzez jakas funkcje API WordPressa. W tym konkretnym przypadku tak jest:
1) ilosc wpisow na blogu mozna dostac w ten sposob:
$posts_stats = wp_count_posts();$wynik = $posts_stats->publish; //globalna liczba opublikowanych postow na blogu
2) ilosc komentarzy bardzo podobnie:
$comments_stats = wp_count_comments();$wynik = $comments_stats->approved; //globalna liczba opublikowanych komentarzy na blogu
Obie funkcje wp_count_posts() i wp_count_comments() zwracaja obiekty. Polecam zrobic var_dump() i sprawdzic jakie jeszcze statystyki sa dostepne.
Pozdrawiam :)
odpowiedzGrzesiek - dzięki stokrotne za słuszną uwagę i zaprezentowanie lepszego kodu - naniosłem stosowne poprawki do treści artykułu :-).
odpowiedzŁatwo, prosto i przyjemnie :) - na 100% wykorzystam to rozwiązanie w kilku projektach!
odpowiedzNormalnie nie można używać żadnych znaczników shortcode w widgetach.
Żeby to zmienić wystarczy jednak dodać do pliku
functions.php(plik znajduje się w katalogu aktualnie używanego szablonu graficznego -.../wp-content/themes/nazwa-szablonu/functions.php) następującą linijkę:Ciekawy artykuł.
Mam tylko jedno zastrzeżenie a mianowicie chodzi mi o małe błędy dotyczące fragmentu:
„[…]zostanie uruchomiona funkcja „pokaz_statystyki” (wiersze 1-22).
W wierszu 2. przejmowana jest wartość atrybutu „typ”. W wierszu 4. i 13. widać, że shortcode […]”
Mam na myśli to że cały kod składa się z 14 linijek a w tekście mowa jest o 22
odpowiedzPoprawione - dzięki Krzysiek.
odpowiedzDopiero teraz dowiedziałem się o czymś takim jak shortcode i muszę powiedzieć że naprawdę spodobały mi się możliwości i elastyczność jakie daje to narzędzie. Nie wiecie czy może istnieją gotowe biblioteki z zaimplementowanymi różnymi shortcode’ami?
odpowiedzObawiam się, że nie ma takich bibliotek ale z drugiej stony stworzenie czegoś na własną rękę nie jest aż takie trudne.
odpowiedzDzięki za artykuł przyda mi się bo właśnie chcę zrobić swój i dodać do edytora.
odpowiedzDodaj własny komentarz
Odnośniki z innych stron (4)
Lista innych stron, które w jakiś sposób odnoszą się do opublikowanej tutaj treści:
[…] WPNinja.pl/tworzymy-wlasny-shortcode-wyswietlajacy-ogolna-liczbe-wpisow-i-komentarzy/ […]
[…] jeśli będziemy chcieli podzielić tylko część tekstu to trzeba będzie stworzyć własne shortcody. Dodajmy do tego potrzebę większej kontroli nad zawartością kolumn i zapewnienie obsługi w […]
[…] gdzie go umieścić. Jeżeli, ktoś nie wie co oznaczają poniższe linijki, powinien zajrzeć do: Tworzymy własny „shortcode” wyświetlający ogólną liczbę wpisów i komentarzy, lub mojego artykułu: WordPress: […]
[…] kod związany z:własnymi typami wpisów (custom post types),dodanymi na potrzeby strony shortcodes,modyfikacjami panelu administracyjnego (np. zmiana logo na stronie logowania),własnymi […]