WP-DOC

Pisanie motywu

05.04 Podobne wpisy – alternatywa dla chmurki tagów

Ostatnia modyfikacja: 10.03.2021

Na blogu opartym na WordPress można spotkać chmurkę tagów. Tagi te są wyświetlane w jednym miejscu, z różnym rozmiarem fontu. Ich rozmiar zależy od ilości przypisania do postów. Im więcej dany tag jest wykorzystany tym większy rozmiar fontu posiada. Jednak zamiast standardowej chmurki tagów, można wyświetlić listę wpisów posiadający ten sam tag, co aktualnie czytany post. Na zdjęciu niżej (w motywie roboczym), lista postów posiadający przynajmniej jeden z tagów, co aktualnie czytany artykuł.

Przykładowy szablon i lista wpisów według tagów

Rejestracja sidebar

Dla poprawnego działania listy postów opartej o tagi, należy zarejestrować sidebar. Podczas rejestracji w funkcji register_sidebar(), podajemy w jakim elemencie ma być wyświetlany każdy widżet. W moim przypadku rejestracja wygląda jak na listingu niżej. Z poniższego kodu, najważniejszy jest element div z nazwą klasy aside_box. W takim samym div, należy umieścić listę wpisów, aby zachować jednolity wygląd motywu.

functions.php – rejestracja sidebar.

function reg_sidebar() {
    register_sidebar(array(
        'name'          => 'Panel boczny lewy', 'nazwamotywu',
        'description'   => 'Tutaj przeciągnij widżet.', 'nazwamotywu',
        'id'            => 'sidebar-left'
        'before_widget' => '<div id="%1$s" class="aside_box %2$s">',
        'after_widget'  => '</div>',
        'before_title'  => '<h2>',
        'after_title'   => '</h2>'
    ));
}
add_action('widgets_init','reg_sidebar');

Tworzenie funkcji

Podstawą działania listy postów będzie funkcja o nazwie similar_post(), umieszczona w pliku functions.php. Oczywiście nazwa funkcji może być dowolna. Na początku wewnątrz funkcji dodamy warunek, który sprawdzi, dwie rzeczy:

  1. Czy aktualnie przeglądana strona to strona pojedynczego wpisu;
  2. Czy wpis posiada przypisany chociaż jeden tag.

functions.php – utworzenie funkcji similar_post() wraz z instrukcją warunkową

function similar_post() {
    if(is_single() && has_tag()) {
        
    }
}

Instrukcja warunkowa if, sprawdza dwa warunki. Pierwszym warunkiem jest użycie funkcji is_single(), która sprawdza, czy aktualna strona to pojedynczy wpis. Więcej o tej funkcji dowiesz się z artykułu 02.09 Pojedynczy wpis. Drugim warunkiem jest funkcja has_tag(), która sprawdza, czy aktualnie wyświetlany wpis posiada przypisany co najmniej jeden tag. Więcej o tej funkcji dowiesz się z artykułu 02.12 Tagi. Jeżeli oba warunki będą spełnione, to znaczy, że użytkownik będzie czytał wpis, który zawiera co najmniej jeden tag, wówczas zostanie wyświetlona lista z postami, które posiadają te same tagi.

Po utworzeniu funkcji musimy ją wywołać w sidebar. Najczęściej jest to plik sidebar.php.

sidebar.php – wywołanie funkcji

<?php
similar_post();
?>

Wyświetlanie tagów bieżącego posta

Do wyświetlenia listy postów posiadający te same tagi co post bieżący, musimy znać ID tagów bieżącego posta. Dane te uzyskamy za pomocą funkcji get_the_tags(). Funkcja ta zwróci tablicę z wszystkimi informacjami dotyczącymi tagów z bieżącego posta. Funkcję tą przypiszmy do zmiennej i za pomocą funkcji PHP print_r(), zobaczmy jakie dane są zwracane.

functions.php – wyświetlanie informacji o tagach bieżącego posta.

function similar_post() {
    if(is_single() && has_tag()) {

        $current_tags = get_the_tags();
        echo '<pre>';
        print_r($current_tags);
        echo '</pre>';
    }
}

Po odświeżeniu strony funkcja print_r() powinna wyświetlić kod jak niżej. Oczywiście ilość obiektów, będzie równać się ilości tagów przypisanego do bieżącego posta. W moim przypadku są to trzy tagi, więc są trzy obiekty w tablicy.

Zawartość zwrócona przez funkcję print_r() ze zmienną $current_tag

Array
(
    [0] => WP_Term Object
        (
            [term_id] => 10
            [name] => animacja
            [slug] => animacja
            [term_group] => 0
            [term_taxonomy_id] => 10
            [taxonomy] => post_tag
            [description] => 
            [parent] => 0
            [count] => 4
            [filter] => raw
        )

    [1] => WP_Term Object
        (
            [term_id] => 11
            [name] => background
            [slug] => background
            [term_group] => 0
            [term_taxonomy_id] => 11
            [taxonomy] => post_tag
            [description] => 
            [parent] => 0
            [count] => 2
            [filter] => raw
        )

    [2] => WP_Term Object
        (
            [term_id] => 12
            [name] => hover
            [slug] => hover
            [term_group] => 0
            [term_taxonomy_id] => 12
            [taxonomy] => post_tag
            [description] => 
            [parent] => 0
            [count] => 4
            [filter] => raw
        )

)

Jak łatwo zauważyć ID tagu otrzymamy po odwołaniu się do trem_id. Za pomocą pętli foreach, zapiszemy wszystkie ID tagów do tablicy o nazwie tag_id_array(). Tablicę tą wykorzystamy w dalszej części. Poniżej zmodyfikowany kod. Nie zapomnij usunąć funkcji print_r().

functions.php – pętla zapisująca ID tagów do tablicy.

function similar_post() {
    if(is_single() && has_tag()) {

        $current_tags = get_the_tags();
        $tag_id_array = array();
        foreach($current_tags as $tag) {
            $tag_id_array[] = $tag->term_id;
        }
    }
}

Pobieranie ID postów z tym samym tagiem

Do pobrania postów, które posiadają ten sam tag co post bieżący wykorzystamy klasę WordPress o nazwie WP_Query(). Klasa tę można wywołać w dowolnym miejscu i uzyskać dowolne informacje. Więcej w linku wyżej. Podczas tworzenia motywu, klasa ta będzie wykorzystywana jeszcze nie raz. Klasa ta jako argumenty przyjmuje tablicę z odpowiednimi parametrami. Do funkcji, którą tworzymy, będziemy potrzebować dwa parametry:

  • tag__in – parametr ten przyjmuje tablicę, w której znajdują się ID tagów. Tablicę taką utworzyliśmy wcześniej wykorzystując funkcję get_the_tag() oraz pętlę foreach. Ten parametr zwróci wszystkie posty zawierające ID tagów, które przechowujemy w tablicy tag_id_array[].
  • posts_per_page – służy do określenia ile postów ma być wyświetlonych na jednej stronie. Liczbę tę ustawiamy w panelu administratora Ustawienia - Czytanie - Strony blogu wyświetlają maksymalnie. Naszym zadaniem będzie pobranie wszystkich postów z odpowiednim ID tagu. Podając wartość -1 pobierzemy wszystkie posty, wówczas bez znaczenia będą ustawienia w panelu administratora.

Klasę WP_Query(), należy przypisać do zmiennej, a wewnątrz niej utworzyć tablicę asocjacyjną jak na listingu niżej. Po utworzeniu zapytania należy użyć funkcji wp_reset_postdata(), która przywraca $post global do bieżącego postu. Innymi słowy, inne zapytania nie będą zmodyfikowane przy użyciu parametrów, które zostały wprowadzone w klasie WP_Query() przypisane do zmiennej tag_query.

functions.php – tworzenie zapytania na podstawie klasy WP_Query()

function similar_post() {
    if(is_single() && has_tag()) {

        $current_tags = get_the_tags();
        $tag_id_array = array();
        foreach($current_tags as $tag) {
            $tag_id_array[] = $tag->term_id;
        };

        $tag_query = new WP_Query(
            array (
                'tag__in' => $tag_id_array,
                'posts_per_page' => -1
            )
        );
        wp_reset_postdata();

        echo '<pre>';
        print_r($tag_query);
        echo '</pre>';

    }
}

Aby przekonać się co zwróci zmienna tag_query, użyj funkcji PHP print_r(). Dokładnie przeanalizuj otrzymane dane. Będzie ich trochę dużo, a wszystko będzie zależeć od tego, ile postów posiada choć jeden tag z bieżącego posta. W moim przypadku jest to 6 postów. Dane, które nas interesują najbardziej zaczynają się od [post] i przypisanej do niej tablicy Array, to tam znajdują się dane wszystkich znalezionych postów. Przykład danych jednego posta na listingu niżej.

Otrzymane dane z WP_Query() – post

[post] => Array (
    [0] => WP_Post Object
         (
              [ID] => 82
              [post_author] => 1
              [post_date] => 2020-12-07 22:18:55
              [post_date_gmt] => 2020-12-07 21:18:55
              [post_content] => Tutaj będzie treść posta.
              [post_title] => Post numer 14
              [post_excerpt] => 
              [post_status] => publish
              [comment_status] => open
              [ping_status] => open
              [post_password] => 
              [post_name] => post-numer-14
              [to_ping] => 
              [pinged] => 
              [post_modified] => 2021-01-16 21:53:35
              [post_modified_gmt] => 2021-01-16 20:53:35
              [post_content_filtered] => 
              [post_parent] => 0
              [guid] => http://localhost/wpnauka/?p=82
              [menu_order] => 0
              [post_type] => post
              [post_mime_type] => 
              [comment_count] => 0
              [filter] => raw
        )
    [1] => WP_Post Object
        (
            // Tutaj te same parametry co wyżej, tylko dla posta o innym numerze ID
        )
    [2] => WP_Post Object
        (
            // Tutaj te same parametry co wyżej, tylko dla posta o innym numerze ID
        )
    [3] => WP_Post Object
        (
            // Tutaj te same parametry co wyżej, tylko dla posta o innym numerze ID
        )
    [4] => WP_Post Object
        (
            // Tutaj te same parametry co wyżej, tylko dla posta o innym numerze ID
        )
    [5] => WP_Post Object
        (
            // Tutaj te same parametry co wyżej, tylko dla posta o innym numerze ID
        )
)

Poniżej tej tablicy jest zapis informujący ile postów pasuje do zapytania WP_Query(). Linia ta będzie wyglądać jak na listingu niżej. W moim przypadku cyfra 6, oznacza 6 postów.

Ilość postów pasujących do zapytania WP_Query()

[post_count] => 6

Jako ciekawostka, na samym początku znajduje się tablica naszego zapytania, które zostało utworzone za pomocą WP_Query(). Doskonale w niej widać ID tagów, które są przypisane do postów. Tablica ta ma postać jak na listingu niżej.

Zapytanie stworzone za pomocą WP_Query() w otrzymanych wynikach tego zapytania

[query] => Array
    (
        [tag__in] => Array
            (
                [0] => 10
                [1] => 11
                [2] => 12
            )

        [posts_per_page] => -1
)

Wyświetlanie postów – tytuł i data publikacji

Dzięki zapytaniu WP_Query(), można wyświetlić dowolną informację na temat postów. Tworząc listę podobnych postów ograniczymy wyświetlanie informacji jedynie do tytułu oraz daty publikacji postu. Jednak na początku, lista postów musi zostać umieszczona w elemencie div o nazwie klasy aside_box, która została zdeklarowana podczas rejestracji paska bocznego. Cały kod HTML zostanie przypisany do zmiennej, jak na listingu niżej.

functions.php – utworzenie elementu div dla listy postów

function similar_post() {
    if(is_single() && has_tag()) {

        $current_tags = get_the_tags();
        $tag_id_array = array();
        foreach($current_tags as $tag) {
            $tag_id_array[] = $tag->term_id;
        };

        $tag_query = new WP_Query(
            array (
                'tag__in' => $tag_id_array,
                'posts_per_page' => -1
            )
        );
        wp_reset_postdata();
        
        $post_id = array();
        for($i=0; $i<=$tag_query->post_count-1; $i++) {
            if(get_the_ID() != $tag_query->posts[$i]->ID) {
                $post_id[] = $tag_query->posts[$i]->ID;
            }
        }
        
        $list_post = '<div class="aside_box aside_box_post">';
        $list_post .= '<h2 class="aside_post_title">Podobne artykuły</h2>';
        $list_post .= '<ul>';
        // Tutaj będzie pętla wyświetlająca wpisy.
        $list_post .= '</ul>';
        $list_post .= '</div>';

        echo $list_post;

    }
}

Po zapisaniu pliku i odświeżeniu strony, zobaczymy przygotowany element div, w którym będą wyświetlane wpisy. Każdy z nich będzie w osobnym elemencie li. Do wyświetlenia poszczególnych elementów niezbędne będą funkcje wymienione niżej.

  • get_permalink – funkcja ta sama wygeneruje adres url do wpisu, wystarczy podać ID wpisu;
  • get_the_date – wyświetli datę publikacji wpisu, wystarczy podać formatowanie daty oraz ID wpisu. Więcej na temat tej funkcji przeczytasz w 06.01 Data i godzina postu.

Wiedząc jakie funkcje będą potrzebne, ile wpisów posiada przynajmniej jeden tag co bieżący post oraz jak wygląda tablica posta wygenerowana przez zapytanie WP_Query(), można stworzyć pętlę for. Pętla ta wygeneruje elementy li wraz z tytułem, który jest jednocześnie linkiem do postu oraz datę publikacji, jak na listingu niżej. Pamiętaj o zmniejszeniu [post_count] o jeden, gdyż elementy w tablicy liczone są od zera.

functions.php – wyświetlanie linków oraz daty publikacji postu

function similar_post() {
    if(is_single() && has_tag()) {

        $current_tags = get_the_tags();
        $tag_id_array = array();
        foreach($current_tags as $tag) {
            $tag_id_array[] = $tag->term_id;
        };

        $tag_query = new WP_Query(
            array (
                'tag__in' => $tag_id_array,
                'posts_per_page' => -1
            )
        );
        wp_reset_postdata();
        
        $list_post = '<div class="aside_box aside_box_post">';
        $list_post .= '<h2 class="aside_post_title">Podobne artykuły</h2>';
        $list_post .= '<ul>';
        for($t=0; $t<=$tag_query->post_count-1; $t++) {
            $list_post .= '<li><a href="'.get_permalink($tag_query->posts[$t]->ID).'">'.$tag_query->posts[$t]->post_title.'</a><span class="post-date"> Data publikacji: '.get_the_date('d.m.Y', $tag_query->posts[$t]->ID).'</span></li>';
        }
        $list_post .= '</ul>';
        $list_post .= '</div>';

        echo $list_post;

    }
}

Limit postów

Powyższa funkcja działa i wyświetla wpisy. Problem polega na tym, że funkcja ta wyświetla wszystkie znalezione do zapytania WP_Query() posty. Jeżeli będzie ich przykładowo 56, wyświetli je wszystkie. Warto ograniczyć wyświetlanie do bardziej racjonalnej ilości. Ilość wyświetlanych postów będziemy przekazywać jako argument funkcji. W pliku sidebar.php, gdzie jest wywołanie funkcji podaj ilość wpisów do wyświetlenia.

sidebar.php – ilość postów do wyświetlenia

<?php
similar_post(3);
?>

W pliku functions.php zdeklarujemy zmienną limit z domyślną wartością 4. Jeżeli w pliku sidebar.php w miejscu wywołania funkcji nie zostanie podana żadna wartość, zostanie wyświetlone 5 postów.

functions.php – deklarowanie domyślnej wartości dla funkcji similar_post()

function similar_post($limit = 4) {
    // Dotychczasowy kod funkcji
}

Po klasie WP_Query(), należy stworzyć instrukcje warunkową sprawdzającą, czy podana wartość nie jest za mała lub za duża. Trzeba przyjąć sytuację, kiedy użytkownik pod 15 postów do wyświetlenia. Natomiast wpisów o takich samych tagach jak post bieżący może być mniej niż 15. Wówczas zmienną limit należy wyrównać do wartości prezentowanej przez [post_count] minus jedn, czyli bieżący post. Natomiast kiedy zostanie podana liczba mniejsza od zera (ujemna), zmienną limit ustawimy na wartość zero.

W pętli for zamiast $tag_query z post_count wstawiamy zmienną limit.

functions.php – sprawdzanie wartości zmiennej limit oraz ustawienie jej w pętli

function similar_post($limit = 4) {
    if(is_single() && has_tag()) {

        $current_tags = get_the_tags();
        $tag_id_array = array();
        foreach($current_tags as $tag) {
            $tag_id_array[] = $tag->term_id;
        };

        $tag_query = new WP_Query(
            array (
                'tag__in' => $tag_id_array,
                'posts_per_page' => -1
            )
        );
        wp_reset_postdata();

        if($limit > $tag_query->post_count) {
            $limit = $tag_query->post_count-1;
        } else if($limit < 0) {
            $limit = 4;
        }
        
        $list_post = '<div class="aside_box aside_box_post">';
        $list_post .= '<h2 class="aside_post_title">Podobne artykuły</h2>';
        $list_post .= '<ul>';
        for($t=0; $t<=$limit-1; $t++) {
            $list_post .= '<li><a href="'.get_permalink($tag_query->posts[$t]->ID).'">'.$tag_query->posts[$t]->post_title.'</a><span class="post-date"> Data publikacji: '.get_the_date('d.m.Y', $tag_query->posts[$t]->ID).'</span></li>';
        }
        $list_post .= '</ul>';
        $list_post .= '</div>';

        echo $list_post;

    }
}

Należy pamiętać, że elementy w tablicy liczone są od zera. Dlatego w pętli, należy zmniejszyć wartość zmiennej limit o jeden. W przypadku podania 3 postów, zostaną wyświetlone cztery posty [0,1,2,3].

Losowanie postów

Funkcja wyświetla posty od najnowszego do najstarszego, gdyż klasa WP_Query(), domyślnie w ten sposób pobiera posty. W przypadku kiedy tagi bieżącego posta, znajdują się na przykład w 20 innych postach, a ograniczymy ilość wyświetlania do 5, to zawsze zostanie wyświetlone 5 najnowszych wpisów. Jest to dobre rozwiązanie kiedy prowadzimy bloga o wydarzeniach bieżących, na przykład polityce. Natomiast kiedy blog jest o tematyce, gdzie hierarchia wydarzeń nie ma znaczenia, na przykład blog kulinarny, wówczas można wylosować posty do wyświetlenia.

Po instrukcji warunkowej if sprawdzającej wartość zmiennej limit, należy utworzyć tablicę oraz pętle, do której dodamy wszystkie ID postów zwróconych przez klasę WP_Query(). W pętli tej wykorzystamy funkcję get_the_ID() do pobrania bieżącego ID postu, aby nie dodawać go do tablicy. Wtedy będziemy mieć pewność, że w linkach do postów, nie znajdzie się bieżący post. Po pętli za pomocą funkcji PHP array_rand(), wylosujemy ID postów. Funkcja ta przyjmuje dwa parametry jak niżej. Natomiast zwracaną wartością jest tablica.

  1. tablicę, z której ma losować;
  2. ilość elementów do wylosowania, tutaj wykorzystamy zmienną limit.

Funkcja PHP array_rand() nie losuje wartości tablicy a jedynie ich klucze. Dlatego zwróconej tablicy znajdują się klucze tablicy, na której odbyło się losowanie. Funkcja zwracając tablicę, zwróci klucze w kolejności w jakiej występowały w oryginalnej tablicy. Dzięki temu zostanie zachowana kolejność wpisów od najnowszego do najstarszego.

functions.php – tworzenie tablicy i uzupełnianie jej oraz losowanie

function similar_post($limit = 5) {
    if(is_single() && has_tag()) {

        $current_tags = get_the_tags();
        $tag_id_array = array();
        foreach($current_tags as $tag) {
            $tag_id_array[] = $tag->term_id;
        };

        $tag_query = new WP_Query(
            array (
                'tag__in' => $tag_id_array,
                'posts_per_page' => -1
            )
        );
        wp_reset_postdata();

        if($limit > $tag_query->post_count) {
            $limit = $tag_query->post_count-1;
        } else if($limit < 0) {
            $limit = 5;
        }
        
        $post_id_array = array();
        for($i=0; $i<=$tag_query->post_count-1; $i++) {
            if(get_the_ID() != $tag_query->posts[$i]->ID) {
                $post_id_array[] = $tag_query->posts[$i]->ID;
            }
        }
        $post_rand = array_rand($post_id_array, $limit);

        $list_post = '<div class="aside_box aside_box_post">';
        $list_post .= '<h2 class="aside_post_title">Podobne artykuły</h2>';
        $list_post .= '<ul>';
        for($t=0; $t<=$limit-1; $t++) {
            $list_post .= '<li><a href="'.get_permalink($tag_query->posts[$t]->ID).'">'.$tag_query->posts[$t]->post_title.'</a><span class="post-date"> Data publikacji: '.get_the_date('d.m.Y', $tag_query->posts[$t]->ID).'</span></li>';
        }
        $list_post .= '</ul>';
        $list_post .= '</div>';

        echo $list_post;

    }
}

Pozostało tylko dokonać zmiany w zmiennej list_post wewnątrz pętli for. Użyjemy dodatkowej zmiennej, aby w pętli zapisać do niej ID wylosowanego posta i wstawimy je w istniejące funkcje. W przypadku tytułu posta, wykorzystamy funkcję get_the_title(), która jako parametr przyjmuje ID wpisu. Zmodyfikowany i gotowy kod całej funkcji na listingu niżej.

functions.php – wyświetlanie listy wpisów opartej na tagach bieżącego postu.

function similar_post($limit = 5) {
    if(is_single() && has_tag()) {

        $current_tags = get_the_tags();
        $tag_id_array = array();
        foreach($current_tags as $tag) {
            $tag_id_array[] = $tag->term_id;
        };

        $tag_query = new WP_Query(
            array (
                'tag__in' => $tag_id_array,
                'posts_per_page' => -1
            )
        );
        wp_reset_postdata();

        if($limit > $tag_query->post_count) {
            $limit = $tag_query->post_count-1;
        } else if($limit < 0) {
            $limit = 5;
        }
        
        $post_id_array = array();
        for($i=0; $i<=$tag_query->post_count-1; $i++) {
            if(get_the_ID() != $tag_query->posts[$i]->ID) {
                $post_id_array[] = $tag_query->posts[$i]->ID;
            }
        }
        $post_rand = array_rand($post_id_array, $limit);

        $list_post = '<div class="aside_box aside_box_post">';
        $list_post .= '<h2 class="aside_post_title">Podobne artykuły</h2>';
        $list_post .= '<ul>';
        for($t=0; $t<=$limit-1; $t++) {
            $post_data = $post_id_array[$post_rand[$t]];
            $list_post .= '<li><a href="'.get_permalink($post_data).'">'.get_the_title($post_data).'</a><span class="post-date"> Data publikacji: '.get_the_date('d.m.Y', $post_data).'</span></li>';
        }
        $list_post .= '</ul>';
        $list_post .= '</div>';

        echo $list_post;

    }
}

Poprawianie funkcji

Funkcja nie jest doskonała. Wada funkcji będzie widoczna w momencie, kiedy bieżący post będzie posiadał jeden lub kilka tagów i będą one przypisane tylko i wyłącznie do posta bieżącego. Wówczas funkcja PHP array_rand() zwróci błąd. Stanie się tak dlatego gdyż tablica post_id_array() będzie pusta. Taka sytuacja przy prowadzeniu bloga raczej miejsca mieć nie będzie, jednak warto się zabezpieczyć.

Jeżeli [post_count] zwrócona przez klasę WP_Query(), będzie posiadać wartość 1, czyli tylko bieżący post, należy uniknąć wykonywania dalszej części kodu wewnątrz funkcji. W instrukcji warunkowej, po zakończeniu działania klasy WP_Query() należy sprawdzić warunek, czy [post_count] jest większy od 1. Jeżeli tak to przechodzimy dalej, jeżeli nie funkcja kończy działanie. Na listingu niżej dodana instrukcja warunkowa.

functions.php – warunek sprawdzający czy istnieje więcej postów z tagiem niż tylko wpis bieżący

function similar_post($limit = 5) {
    if(is_single() && has_tag()) {

        $current_tags = get_the_tags();
        $tag_id_array = array();
        foreach($current_tags as $tag) {
            $tag_id_array[] = $tag->term_id;
        };

        $tag_query = new WP_Query(
            array (
                'tag__in' => $tag_id_array,
                'posts_per_page' => -1
            )
        );
        wp_reset_postdata();

        if($tag_query->post_count > 1) {
            
            if($limit > $tag_query->post_count) {
                $limit = $tag_query->post_count-1;
            } else if($limit < 0) {
                $limit = 5;
            }
            
            $post_id_array = array();
            for($i=0; $i<=$tag_query->post_count-1; $i++) {
                if(get_the_ID() != $tag_query->posts[$i]->ID) {
                    $post_id_array[] = $tag_query->posts[$i]->ID;
                }
            }

            $post_rand = array_rand($post_id_array, $limit);

            $list_post = '<div class="aside_box aside_box_post">';
            $list_post .= '<h2 class="aside_post_title">Podobne artykuły</h2>';
            $list_post .= '<ul>';
            for($t=0; $t<=$limit-1; $t++) {
                $post_data = $post_id_array[$post_rand[$t]];
                $list_post .= '<li><a href="'.get_permalink($post_data).'">'.get_the_title($post_data).'</a><span class="post-date"> Data publikacji: '.get_the_date('d.m.Y', $post_data).'</span></li>';
            }
            $list_post .= '</ul>';
            $list_post .= '</div>';

            echo $list_post;
        }
    }
}

KOMENTARZE

Jeżeli masz pytanie lub sugestie dotyczącą artykułu to napisz komentarz. Wartościowe komentarze zostaną umieszczone jako opinie warte uwagi.

Napisz komentarz

Wszystkie pola są obowiązkowe. E-mail nie będzie udostępniony, ani wykorzystywany do rozsyłania wiadomości reklamowych.

Jeszcze nikt nie napisał komentarza.