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.