Wprowadzenie:
W dzisiejszym artykule chciałbym podzielić się z Wami moim nowym pluginem WordPress, który umożliwia wyświetlanie pięciu ostatnich postów pod artykułem. Co więcej, plugin pobiera ostatnie posty z kategorii, która została oznaczona jako podstawowa. Jestem bardzo podekscytowany możliwościami tego rozwiązania, które pozwoli na bardziej dynamiczne prezentowanie treści na stronie. W dalszej części artykułu przedstawię Wam szczegóły implementacji oraz przykładowy kod pluginu.
Wstęp:
Zdecydowałem się napisać ten plugin z myślą o sytuacjach, gdy chcemy wyświetlić listę ostatnich postów na stronie, ale tylko dla kategorii, którą uznajemy za podstawową. Zastosowałem tutaj logikę działania popularnych wtyczek SEO, takich jak Yoast SEO, które umożliwiają wybranie jednej kategorii jako "głównej".
Implementacja:
Aby rozpocząć, musimy utworzyć nowy folder o nazwie "wdaxrock-ostatnie-wpisy" w katalogu "wp-content/plugins/" naszej instalacji WordPressa. Następnie, wewnątrz tego folderu, tworzymy plik o nazwie "wdaxrock-ostatnie-wpisy.php". Ten plik będzie głównym plikiem pluginu, w którym umieścimy nasz kod. Oczywiście możesz nazwać ten katalog jak chcesz, ale pamiętaj, że nazwa folderu i pliku głównego musi być taka sama. Dodaj też plik index.php, ale jedynie z funkcją exit; Zapobiegnie to listowaniu katalogu wtyczki.
/**
* Plugin Name: Ostatnie wpisy z kategorii
* Plugin URI: https://prostykod.pl
* Author: Daniel Wolak
* Author URI: https://prostykod.pl
* Description: Skrypt do wypisania pod postem ostatnich 5 wpisów z tej kategorii
* Version: 0.1.0
* License: GPL-2.0+
* License URL: http://www.gnu.org/licenses/gpl-2.0.txt
* text-domain: wdaxrock-ostatnie-wpisy
*/
/**
* Skrypt do wyświetlania ostatnich wpisów w aktualnej kategorii pod wpisem.
* Wykorzystuje hook the_content.
* Zachowuje zasady SEO.
*/
// Funkcja, która będzie wywoływana przy użyciu hooka the_content
function wdaxrock_wyswietl_ostatnie_wpisy($content)
{
// Sprawdzam, czy jesteśmy na pojedynczej stronie wpisu
if (is_single()) {
// Pobieram aktualną kategorię wpisu
$categories = get_the_category();
$current_category = $categories[0];
// Sprawdzam, czy wtyczka Yoast SEO jest aktywna
if (class_exists('WPSEO_Primary_Term')) {
// Pobieram ID aktualnego wpisu
$post_id = get_the_ID();
// Tworzę instancję klasy WPSEO_Primary_Term
$primary_term = new WPSEO_Primary_Term('category', $post_id);
// Pobieram główną kategorię za pomocą metody get_primary_term()
$primary_category = $primary_term->get_primary_term();
// Sprawdzam, czy udało się pobrać główną kategorię
if ($primary_category) {
// Pobieram dane kategorii głównej by zastąpić aktualną
$current_category = get_term_by('ID', $primary_category, 'category');
} else {
// echo 'Brak głównej kategorii dla tego wpisu.';
}
} else {
// echo 'Wtyczka Yoast SEO nie jest aktywna.';
}
// Sprawdzam, czy istnieje aktualna kategoria
if ($current_category) {
$args = array(
'posts_per_page' => 5, // Liczba wpisów do wyświetlenia
'category__in' => array($current_category->term_id), // Identyfikator aktualnej kategorii
'post__not_in' => array(get_the_ID()), // Wyklucz bieżący wpis
'orderby' => 'date',
'order' => 'DESC',
);
// Tworzę zapytanie do bazy danych dla ostatnich wpisów w aktualnej kategorii
$query = new WP_Query($args);
// Sprawdzam, czy są jakieś wyniki
if ($query->have_posts()) {
$content .= '<hr /><h2>Ostatnie wpisy w kategorii: <a href="' . get_term_link($current_category->term_id, 'category') . '">' . $current_category->name . '</a></h2>';
$content .= '<ul>';
// Przechodzę przez każdy wpis
while ($query->have_posts()) {
$query->the_post();
$content .= '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
}
$content .= '</ul>';
} else {
$content .= '<p>Brak ostatnich wpisów w tej kategorii.</p>';
}
// Resetuję zapytanie
wp_reset_postdata();
} else {
// $content .= '<p>Nie znaleziono aktualnej kategorii.</p>';
}
}
return $content;
}
// Dodaję moją funkcję do hooka the_content
add_filter('the_content', 'wdaxrock_wyswietl_ostatnie_wpisy');
Analiza kodu:
- Początkowa sekcja komentarzy zawiera informacje o wtyczce, takie jak nazwa, autor, opis, wersja, licencja, URL itp. Jest to ważne dla zarządzania wtyczką i jej identyfikacji.
- Funkcja
wdaxrock_wyswietl_ostatnie_wpisyjest wywoływana przy użyciu hookathe_content. Ta funkcja jest odpowiedzialna za generowanie treści wyświetlanych pod wpisem. - Sprawdzane jest, czy jesteśmy na pojedynczej stronie wpisu za pomocą warunku
is_single(). - Następnie pobierana jest aktualna kategoria wpisu za pomocą funkcji
get_the_category(). Przyjęto, że pierwsza kategoria jest aktualną kategorią. - Sprawdzane jest, czy wtyczka Yoast SEO jest aktywna za pomocą
class_exists('WPSEO_Primary_Term'). Jeśli tak, pobierane jest ID aktualnego wpisu.
Jeżeli nie mamy zainstalowanej wtyczki Yoast SEO, to nie mamy wskazanej kategorii głównej i system pobierze dane pierwszej kategorii. Jeżeli nie rozsiewamy wpisu po kategoriach, to nie robi to różnicy. - Tworzona jest instancja klasy
WPSEO_Primary_Termi pobierana jest główna kategoria za pomocąget_primary_term(). Jeśli nie udało się pobrać głównej kategorii, pozostaje aktualna kategoria. - Jeśli istnieje aktualna kategoria, tworzone są argumenty dla zapytania
WP_Query, które określają liczbę wpisów do wyświetlenia, kategorię, wykluczenie bieżącego wpisu oraz sortowanie według daty publikacji w kolejności malejącej. - Wykonuje się zapytanie
WP_Queryi sprawdza, czy są jakieś wyniki. Jeśli tak, generowana jest treść wyświetlająca ostatnie wpisy w kategorii. - Po przejściu przez wszystkie wpisy, zapytanie jest resetowane za pomocą
wp_reset_postdata(). - Funkcja zwraca treść, która zostaje dołączona do oryginalnej treści artykułu dzięki hookowi
the_content. - Na końcu funkcji, przy użyciu
add_filter, dodawana jest funkcja do hookathe_content, co oznacza, że będzie ona wywoływana przy renderowaniu treści artykułu.
Podsumowanie:
Dzięki temu prostemu pluginowi możemy teraz wyświetlać pięć ostatnich postów dla kategorii oznaczonej jako podstawowa, pod dowolnym artykułem na naszej stronie WordPress. To doskonałe rozwiązanie, które pozwala na dynamiczne prezentowanie najnowszych treści i zachęcanie czytelników do odkrywania więcej artykułów z tej samej kategorii.
Wierzę, że mój nowy plugin będzie przydatnym narzędziem dla wielu osób, które chcą zoptymalizować swoją stronę WordPress pod kątem SEO i jednocześnie dostarczać wartościową treść dla swoich odwiedzających.
Dziękuję za przeczytanie tego artykułu i mam nadzieję, że ten plugin spełni Wasze oczekiwania. Zachęcam do pobrania i przetestowania go na własnej stronie. Będę wdzięczny za wszelkie opinie i sugestie dotyczące dalszego rozwoju tego narzędzia.