WordPress: Wypisanie pod postem ostatnich wpisów z kategorii

Wprowadzenie:

W dzisiej­szym artyku­le chciał­bym podzie­lić się z Wami moim nowym plugi­nem WordPress, który umożli­wia wyświe­tla­nie pięciu ostat­nich postów pod artyku­łem. Co więcej, plugin pobie­ra ostat­nie posty z katego­rii, która zosta­ła oznaczo­na jako podsta­wo­wa. Jestem bardzo podeks­cy­to­wa­ny możli­wo­ścia­mi tego rozwią­za­nia, które pozwo­li na bardziej dynamicz­ne prezen­to­wa­nie treści na stronie. W dalszej części artyku­łu przed­sta­wię Wam szcze­gó­ły imple­men­ta­cji oraz przykła­do­wy kod pluginu.

Wstęp:

Zdecy­do­wa­łem się napisać ten plugin z myślą o sytuacjach, gdy chcemy wyświe­tlić listę ostat­nich postów na stronie, ale tylko dla katego­rii, którą uznaje­my za podsta­wo­wą. Zasto­so­wa­łem tutaj logikę działa­nia popular­nych wtyczek SEO, takich jak Yoast SEO, które umożli­wia­ją wybra­nie jednej katego­rii jako "głównej".

Implementacja:

Aby rozpo­cząć, musimy utworzyć nowy folder o nazwie "wdaxrock-ostat­nie-wpisy" w katalo­gu "wp-conten­t/plu­gin­s/" naszej insta­la­cji WordPres­sa. Następ­nie, wewnątrz tego folde­ru, tworzy­my plik o nazwie "wdaxrock-ostatnie-wpisy.php". Ten plik będzie głównym plikiem plugi­nu, w którym umieści­my nasz kod. Oczywi­ście możesz nazwać ten katalog jak chcesz, ale pamię­taj, że nazwa folde­ru i pliku główne­go musi być taka sama. Dodaj też plik index.php, ale jedynie z funkcją exit; Zapobie­gnie to listo­wa­niu katalo­gu 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:

  1. Począt­ko­wa sekcja komen­ta­rzy zawie­ra infor­ma­cje o wtycz­ce, takie jak nazwa, autor, opis, wersja, licen­cja, URL itp. Jest to ważne dla zarzą­dza­nia wtycz­ką i jej identyfikacji.
  2. Funkcja wdaxrock_wyswietl_ostatnie_wpisy jest wywoły­wa­na przy użyciu hooka the_content. Ta funkcja jest odpowie­dzial­na za genero­wa­nie treści wyświe­tla­nych pod wpisem.
  3. Spraw­dza­ne jest, czy jeste­śmy na pojedyn­czej stronie wpisu za pomocą warun­ku is_single().
  4. Następ­nie pobie­ra­na jest aktual­na katego­ria wpisu za pomocą funkcji get_the_category(). Przyję­to, że pierw­sza katego­ria jest aktual­ną kategorią.
  5. Spraw­dza­ne jest, czy wtycz­ka Yoast SEO jest aktyw­na za pomocą class_exists('WPSEO_Primary_Term'). Jeśli tak, pobie­ra­ne jest ID aktual­ne­go wpisu.
    Jeżeli nie mamy zainsta­lo­wa­nej wtycz­ki Yoast SEO, to nie mamy wskaza­nej katego­rii głównej i system pobie­rze dane pierw­szej katego­rii. Jeżeli nie rozsie­wa­my wpisu po katego­riach, to nie robi to różnicy.
  6. Tworzo­na jest instan­cja klasy WPSEO_Primary_Term i pobie­ra­na jest główna katego­ria za pomocą get_primary_term(). Jeśli nie udało się pobrać głównej katego­rii, pozosta­je aktual­na kategoria.
  7. Jeśli istnie­je aktual­na katego­ria, tworzo­ne są argumen­ty dla zapyta­nia WP_Query, które określa­ją liczbę wpisów do wyświe­tle­nia, katego­rię, wyklu­cze­nie bieżą­ce­go wpisu oraz sorto­wa­nie według daty publi­ka­cji w kolej­no­ści malejącej.
  8. Wykonu­je się zapyta­nie WP_Query i spraw­dza, czy są jakieś wyniki. Jeśli tak, genero­wa­na jest treść wyświe­tla­ją­ca ostat­nie wpisy w kategorii.
  9. Po przej­ściu przez wszyst­kie wpisy, zapyta­nie jest reseto­wa­ne za pomocą wp_reset_postdata().
  10. Funkcja zwraca treść, która zosta­je dołączo­na do orygi­nal­nej treści artyku­łu dzięki hooko­wi the_content.
  11. Na końcu funkcji, przy użyciu add_filter, dodawa­na jest funkcja do hooka the_content, co oznacza, że będzie ona wywoły­wa­na przy rende­ro­wa­niu treści artykułu.

Podsumowanie:

Dzięki temu proste­mu plugi­no­wi możemy teraz wyświe­tlać pięć ostat­nich postów dla katego­rii oznaczo­nej jako podsta­wo­wa, pod dowol­nym artyku­łem na naszej stronie WordPress. To dosko­na­łe rozwią­za­nie, które pozwa­la na dynamicz­ne prezen­to­wa­nie najnow­szych treści i zachę­ca­nie czytel­ni­ków do odkry­wa­nia więcej artyku­łów z tej samej kategorii.

Wierzę, że mój nowy plugin będzie przydat­nym narzę­dziem dla wielu osób, które chcą zopty­ma­li­zo­wać swoją stronę WordPress pod kątem SEO i jedno­cze­śnie dostar­czać warto­ścio­wą treść dla swoich odwiedzających.

Dzięku­ję za przeczy­ta­nie tego artyku­łu i mam nadzie­ję, że ten plugin spełni Wasze oczeki­wa­nia. Zachę­cam do pobra­nia i przete­sto­wa­nia go na własnej stronie. Będę wdzięcz­ny za wszel­kie opinie i sugestie dotyczą­ce dalsze­go rozwo­ju tego narzędzia.

Dodaj komentarz

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.