W tym epizodzie poznajemy wiele wbudowanych funkcji WordPressowych, z których będziemy często korzystać, zatem warto je znać. Skupimy się na funkcjach dotyczących postów, czyli tych naprawdę bardzo popularnych i co za tym idzie – często używanych.

WordPress jest frameworkiem, w którym wiele rzeczy dostajemy na tacy. Mamy gotowe rozwiązania, których sami pisać nie musimy. Posty, strony, własne typy, także funkcji do obsługi różnych rzeczy – to wszystko jest.

I oczywiście można to rozszerzać pisząc własne pluginy, widgety, bloki, shortcodes, własne hooki i filtry – to wszystko możemy robić. Podstawową kwestią jest jednak znajomość tego, co razem z WordPressem dostajemy, wbudowanych funkcji do podstawowych operacji.

Poznamy sobie funkcje WordPressa stworzone do obsługi postów, wewnątrz 'the loop’, pętli, którą już poznaliśmy.

Do dzieła.

Post – najbardziej podstawowe funkcje

Do najbardziej podstawowych funkcji zaliczamy:

  • the_ID() – wyświetla ID posta
  • the_title() – wyświetla tytuł posta
  • the_excerpt() – wyświetla zajawkę posta
  • the_content() – wyświetla zawartość posta
  • the_category() – wyświetla kategorie posta
  • the_tags() – wyświetla tagi posta

Typowe zastosowanie funkcji the_ID:

<h3 id="post-<?php the_ID(); ?>"><?php the_title(); ?></h3>

Tak tworzymy dynamicznie id CSS zawierający „post” w nazwie i po myślniku ID danego wpisu.

Tytuł w tagu <h3> możemy uzyskać też tak:

<?php the_title( '<h3>', '</h3>' ); ?>

Jak widać the_title wyświetla tytuł, niepotrzebne żadne echo. Może przyjąć też argumenty before i after czyli co przed i po wyświetleniu tytułu.

Możemy się zatem nieco pobawić przy użyciu wbudowanej funkcji PHP sprintf:

<?php
the_title(
  sprintf( '<h2 class="card-title h4"><a href="%s" rel="bookmark">', esc_attr( esc_url( get_permalink() ) ) ),
  '</a></h2>'
);
?>

Może wygląda to na nieco zagmatwane, ale to przykład z oficjalnej dokumentacji WordPressa. Mamy tutaj wyświetlenie tytułu, po którym mamy tagi zamykające „</a></h2>” zaś przed którym otwieramy sobie tag <h2> oraz <a> z href (linkiem), do którego wrzucamy zawartość get_permalink().

Zobaczmy raz jeszcze na ten przykład:

<h3 id="post-<?php the_ID(); ?>"><?php the_title(); ?></h3>

Moglibyśmy to sobie zapisać – mniej więcej plus jakaś sekwencja ucieczkowa – w ten sposób:

<?php the_title(
    sprintf('<h3 id="post-%s">', get_the_ID()), 
    "</h3>"); ?>

Czyli pierwszy argument (before, przed) to <h3> z id, do którego wrzucamy zawartość get_the_ID(), drugi argument (after, po) to zamknięcie tagu <h3> zaś wewnątrz ląduje nasz tytuł.

Od nas zależy jak będziemy chcieli z tych funkcji korzystać, mamy je natomiast do pełnej dyspozycji. Taki zapis ze sprintf również warto znać, jako że dokumentacja WP go podaje i możemy się na niego natknąć.

Funkcja the_category() wyświetla kategorie wpisu. Możemy jej przekazać separator, jakiego ma użyć:

<?php the_category( ', ' ); ?>

Tutaj separatorem jest przecinek i spacja. Tym kategorie będą oddzielone. Tak samo działa the_tags().

Oczywiście, gdybyśmy chcieli te kategorie wypisać w jakiś inny sposób, np. dać im coś z przodu (tag otwierający <span> na przykład) i z tyłu (tak zamykający </span>) a następnie czymś je oddzielić (niech będzie spacja) musimy uciec się do funkcji get_the_category(), przejść w pętli, zrobić co trzeba używając klasycznego PHP:

<?php
            $categories = get_the_category();
            $category_badges = array();

            foreach ($categories as $category) {
                $category_badges[] = '<span class="badge text-bg-info">' . esc_html($category->name) . '</span>';
            }

            echo implode(' ', $category_badges);
            ?>

Podobnie mamy funkcję get_the_tags(), która zwraca tagi naszego posta.

<?php
            $tags = get_the_tags();
            $tag_badges = array();

            if ($tags) {
                foreach ($tags as $tag) {
                    $tag_badges[] = '<span class="badge text-bg-primary">' . esc_html($tag->name) . '</span>';
                }

                echo implode(' ', $tag_badges);
            }
            ?>

Jeżeli jednak chcemy coś prostego, czyli wypisać kategorie/tagi, ewentualnie oddzielić jedne od drugich jakimś separatorem (spacja, przecinek, cokolwiek) to używamy prostych funkcji the_category() oraz the_tags()

Funkcja the_tags() jest o tyle ciekawa, że posiada co prawda argumenty before, separator i after, ale to before/after tyczy się całego bloku z tagami

<?php the_tags( 'Tags: ', ', ', '<br />' ); ?> 

Powyższy kod daje napis „Tags:” na początku, każdy tag oddziela przecinkiem, daje znak nowej linii „</br> na końcu.

Jeżeli jednak chcemy, aby każdy nasz tag miał coś na początku i końcu (np. <span>) to musimy użyć get_the_tags(), w pętli zrobić co trzeba i zwrócić używając implode.

I tak mniej więcej wyglądają zabawy z tymi funkcjami w WordPressie. Nie warto tutaj podawać każdego możliwego przykładu, jeżeli rozumiemy mechanizm i znamy ich nazwy, powinniśmy – czasami z pomocą internetu lub dokumentacji – umieć to wszystko obsłużyć.

Warto tutaj może nadmienić o istnieniu funkcji sprawdzających, czy dany post coś posiada. Przykład:

if ( has_excerpt() ) {
	the_excerpt();
} else { 
	echo substr( get_the_content(), 0, 200 ) . ' ' . __( 'read more..' );
}

Tutaj sprawdzamy, czy post posiada zajawkę i tylko wtedy ją próbujemy wyświetlać.

Post – data, czas, autor

Do pokazywania daty utworzenia posta używamy funkcji the_date():

<?php the_date(); ?>

Warto przekazać do niej format, jakiego chcemy użyć:

<?php the_date('Y-m-d'); ?>
<?php the_date('Y-m-d'); ?>

Możemy też przekazać before oraz after:

<?php the_date( 'Y-m-d', '<h2>', '</h2>' ); ?>

Tutaj nasza data zostanie wrzucona w tagi <h2>.

Jak w większości przypadków funkcji zaczynających się od „the”, które coś wyświetlają, istnieje też wersja tej funkcji zaczynająca się od „get”, która zwraca datę, zamiast ją wyświetlać:

<?php echo get_the_date(); ?> 

Tutaj aby ją wyświetlić musimy ją wrzucić w echo. Możemy ją jednak np. zapisać do zmiennej, sprawdzić jakimś kodem ile dni temu post został napisany i tę wartość wyświetlić.

Funkcje z „get” mają zatem swoje zastosowanie, choć na pierwszy rzut oka mogłoby się wydawać, że to takie „głupsze” odpowiedniki funkcji z „the”, które trzeba w to „echo” wrzucać.

Funkcja the_time() służy zaś do wyświetlania czasu, kiedy post został opublikowany:

<p>Posted: <?php the_date('F j, Y'); ?> at <?php the_time('g:i a'); ?></p>

W przypadku the_time() też warto podać format, jeżeli domyślny nam nie odpowiada.

Warto zwrócić uwagę, że funkcje daty mogą zwracać też czas (albo datę i czas), wszystko zależy od podanego formatu.

<p><?php printf( __( 'Modified: %1$s at  %2$s', 'textdomain' ),
	get_the_modified_date( 'F j, Y' ) ),
	get_the_modified_date( 'g:i a' )
); ?></p>

Tutaj korzystamy z funkcji get_the_modified_date() zwracającej datę modyfikacji posta. Używamy jej dwa razy wewnątrz printf, raz dla daty, raz dla czasu.

Analogicznie są też funkcje the_modfied_date() oraz the_modified_time(). Działają bardzo podobnie, więc myślę, że lepiej będzie wspomnieć o innej funkcji – the_modified_author():

<p>This post was last modified by <?php the_modified_author(); ?></p>

Tutaj wyświetlamy kto był autorem ostatniej modyfikacji posta. Oczywiście funkcja the_author, wyświetlająca tego, który post utworzył, również istnieje:

<p>This post was written by <?php the_author(); ?></p>

Podobnie istnieje funkcja get_the_author(), która autora utworzenia posta zwraca zamiast wypisywać:

<?php $author = get_the_author(); ?>

Tak zapisanego do zmiennej autora możemy modyfikować, obrabiać w kodzie do woli i później coś z nim zrobić.

Inne funkcje postów

Istnieje jeszcze kilka funkcji, które warto znać:

  • the_permalink() – wyświetla adres URL danego posta
  • get_the_permalink() -zwraca adres URL danego posta
  • the_title_attribute() – wyświetla tytuł posta pozbawiony pewnych znaków, w bezpiecznej formie
  • has_post_thumbnail() – sprawdza, czy post ma obrazek
  • the_post_thumbnail() – wyświetla obrazek posta

Oto przykład:

<a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a>

Mamy tutaj tag <a>, do którego atrybutu „href” ląduje permalink (link posta), atrybutu „title” ląduje zawartość the_title_attribute(), zaś jako tekst linka – tytuł posta.

Inny przykład:

<?php if ( has_post_thumbnail() ) : ?>
	<a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>">
		<?php the_post_thumbnail(); ?>
	</a>
<?php endif; ?>

Tutaj, jeżeli post ma obrazek, tworzymy tag <a>. Jako atrybut href – permalink. Jako atrybut title (czyli tooltip) – zawartość the_title_attribute().

Wewnątrz linku – obrazek. Warto dodać, że obrazki możemy wyświetlać w różnych wielkościach a nawet podać własną wielkość:

the_post_thumbnail( 'thumbnail' );       
the_post_thumbnail( 'medium' );          
the_post_thumbnail( 'large' );           
the_post_thumbnail( 'full' );         
the_post_thumbnail( array(100, 100) );  

Myślę, że tyle wystarczy. Omówiliśmy sobie szereg funkcji, dzięki którym jesteśmy w stanie używając WordPressowego „the loop” zrobić niemal wszystko z naszymi postami. Reszta to znajomość PHP, HTML i CSS oraz nasza własna wyobraźnia.

Oczywiście naukę WordPressa będziemy kontynuować, natomiast naprawdę niewiele zostało w temacie funkcji dotyczących postów.

Do następnego razu.