publikacja: 14 grudnia 2009, autor: , komentarze 24 http://wpninja.pl/artykuly/tworzymy-wlasny-shortcode-wyswietlajacy-ogolna-liczbe-wpisow-i-komentarzy/

Tworzymy własny „shortcode” wyświetlający ogólną liczbę wpisów i komentarzy

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


  • wyświetla galerię zdjęć, które zostały dodane do wpisu,
  • [ratings]
    wyświetla system ocen wpisu (WP-PostRatings),
  • Co powiedziałbyś na okazyjne videoposty na WPNinja?

    • Jestem za. (74%, głosów: 74)
    • Jestem przeciw. (21%, głosów: 21)
    • Nie mam zdania. (5%, głosów: 5)

    Głosowało osób: 100

    Loading ... Loading ...

    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 – , 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 (plik znajduje się w katalogu aktualnie używanego motywu):

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:

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.

tagi:

Komentarze

  1. Piotr Sajnog 7 lat temu:

    Dzięki za artykuł, niebawem przetestuję to rozwiązanie :)

    odpowiedz
  2. długi 7 lat temu:

    Fajnie :) Też sobie po testuje :) Dzięki

    odpowiedz
  3. Marcin 7 lat temu:

    Można taki shortcode wstawić do widgetu tekstowego?

    odpowiedz
    1. Szymon Skulimowski 7 lat temu:

      Normalnie 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ę:

      add_filter('widget_text', 'do_shortcode');
      odpowiedz
  4. palmiak 7 lat temu:

    Coś 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.

    odpowiedz
  5. Paweł Rabinek 7 lat temu:

    Wow, nie wiedziałem, że to można tak łatwo zrobić… Dzięki za pomocny trick :)

    odpowiedz
  6. Grzesiek 7 lat temu:

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

    odpowiedz
    1. Szymon Skulimowski 7 lat temu:

      Grzesiek – dzięki stokrotne za słuszną uwagę i zaprezentowanie lepszego kodu – naniosłem stosowne poprawki do treści artykułu :-).

      odpowiedz
  7. Jakub Milczarek 7 lat temu:

    Łatwo, prosto i przyjemnie :) – na 100% wykorzystam to rozwiązanie w kilku projektach!

    odpowiedz
  8. Krzysztof 7 lat temu:

    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

    odpowiedz
    1. Szymon Skulimowski 7 lat temu:

      Poprawione – dzięki Krzysiek.

      odpowiedz
  9. Erno 6 lat temu:

    Dopiero 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?

    odpowiedz
    1. Szymon Skulimowski 6 lat temu:

      Obawiam się, że nie ma takich bibliotek ale z drugiej stony stworzenie czegoś na własną rękę nie jest aż takie trudne.

      odpowiedz
  10. Erwin Nowak 5 lat temu:

    Dzięki za artykuł przyda mi się bo właśnie chcę zrobić swój i dodać do edytora.

    odpowiedz
  11. Marcin 4 lata temu:

    powyzszy kod trzeba dodać do functions.php ale motywu, nie jest o tym napisane

    odpowiedz
    1. Szymon Skulimowski 4 lata temu:

      Faktycznie, dzięki za trafną uwagę. Zaktualizowałem treść o informację gdzie znajdziemy wspomniany plik.

      odpowiedz
  12. Artur 1 rok temu:

    Witam,
    wiem, że wpis jest już dość leciwy, ale szukałem właśnie takiej funkcji statystyk wpisów zrobionej jako shortcode. Kod bardzo ładnie działa i daje pożądany efekt. Mam jednak pytanie, jak trzeba zmodyfikować ten kod, żeby w rezultacie otrzymać statystykę wpisów, ale tylko z jednej kategorii?

    odpowiedz
    1. Szymon Skulimowski 1 rok temu:

      Jasne. Liczbę wpisów dla konkretnej kategorii otrzymasz poniższym kodem:

      $category_stats = get_term( 1, 'category' );
      $wynik = $category_stats->count;

      1 to identyfikator danej kategorii.

      odpowiedz
    2. Artur 1 rok temu:

      Bardzo dziękuję za szybką odpowiedź. Wszytko działa tak jak powinno. Swoją drogą świetny blog z bardzo cennymi uwagami, z których bardzo często korzystam.

      odpowiedz
    3. Szymon Skulimowski 1 rok temu:

      Super, dzięki! :)

      odpowiedz

Dodaj własny komentarz

Odnośniki z innych stron

Lista innych stron, które w jakiś sposób odnoszą się do opublikowanej tutaj treści:

  1. O WordPress w *.pl | WPBlogger.pl

    […] WPNinja.pl/tworzymy-wlasny-shortcode-wyswietlajacy-ogolna-liczbe-wpisow-i-komentarzy/ […]

  2. Easy Columns czyli proste dzielenie treści wpisu WordPressa na kolumny | WPNinja

    […] 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 […]

  3. WordPress – własny przycisk w wizualnym edytorze | WPNinja

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

  4. Kiedy warto zastąpić plik functions.php wtyczką funkcjonalną i jak to zrobić? | WPNinja

    […] 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 […]