Powrót do kategorii
Hydepark
tagi
related-posts, wordpress,

Tworzenie listy powiązanych wpisów w WordPress

Avatar
GOGO.Developer, 01/12/2015

Często podczas prowadzenia blogu, zawierającego dużą ilość wpisów, wynika potrzeba tworzenia powiązanych między sobą wpisów. Dzięki temu można zaproponować czytelnikom ciekawe artykuły w oparciu o dane odnośnie materiałów, jakie czytają teraz lub przeczytali wcześniej.

Jednym ze sposobów rozwiązania podanego problemu jest użycie specjalnych wtyczek, które mogą identyfikować zawartość obserwowanego przez użytkownika wpisu i porównywać ją z dostępnymi artykułami na stronie www. Przy tym używają się różne mechanizmy i metodyki, pozwalające proponować najlepsze warianty wpisów dla czytelników. Chociaż nie zawsze rezultat ich działania spełnia nasze oczekiwania.

W takim przypadku najlepszym wejściem jest tworzenia własnego rozwiązania. I właśnie tym  zajmiemy się w naszym artykule: spróbujemy realizować projekt wtyczki pozwalającej tworzyć listę powiązanych ze sobą wpisów w WordPress.

Podczas tworzenia wtyczki będziemy opierać się na logice, że przy powiązywaniu podobnych wpisów należy opierać się na kategorii, tagach i innych elementach klasyfikujących treści. A w przypadku gdyby udało się jednoznacznie wskazać wpisy z tej samej kategorii, co i aktualny artykuł, mogliśmy je zaproponować czytelnikom.

Tworzenie wtyczki

Kolejnym ważnym krokiem po odpowiedzi na pytanie: „Co ma robić wtyczka?”,  jest wybór dla niej nazwy. W naszym przypadku odpowiedź na pierwsze pytanie leży w tytule artykułu, więc przejdziemy do punktu B. Nazwiemy naszą wtyczkę „Related Posts Plus” i odpowiednio do tego stworzymy plik php wtyczki – related-posts-plus.php.

Będziemy po kolei opisywać proces tworzenia wtyczki z dodaniem odpowiednich fragmentów kodu.

Zacząć należy z nagłówku wtyczki. Dodajemy wstępną informację o autorze i opisujemy samą wtyczkę:

<?php

/**

* Plugin Name: Related Posts Plus

* Plugin URI: http://przykladowa-strona.pl/

* Description: This plugin identifies what categories the current post is in and outputs a list of the most recent posts in the same categories.

* Version: 1.0.0

* Author: Kowalski

* Author URI: http://przykladowa-strona.pl

* License: GPL-3.0+

* License URI: http://www.gnu.org/licenses/gpl-3.0.html

* Domain Path: /lang

* Text Domain: plus

*/

Za tym przechodzimy do tworzenia kodu samej wtyczki.

Wyznaczenia kategorii wybranego wpisu

Przede wszystkim należy wyznaczyć inne wpisy, które mają taką samą kategorię jak i wybrany wpis. Otrzymaną listę należy dodać do tablicy. Zrobić to można za pomocą podanej niżej funkcji:

function related_posts_plus() {

 $post_id = get_the_ID();

 $cat_ids = array();

}

W środek funkcji related-posts-plus() dodamy funkcję get_the_category(), która będzie otrzymywać tablicę danych zawierającą kategorii wybranego wpisu:

$categories = get_the_category( $post_id );

Podana funkcja zawiera tylko jeden parametr ID, który wyznacza z jakim konkretnym wpisem my będziemy pracować.

Dalej należy stworzyć tablicę, która będzie zawierała ID wszystkich kategorii:

if ( $categories && ! is_wp_error( $categories ) ) {

     foreach ( $categories as $category ) {

         array_push( $cat_ids, $category->term_id );

     }

}

W podanym fragmencie kodu odbywa się sprawdzanie zwrotu w zmiennej $category wartości null lub błędu. W przypadku, gdy wartość równia się null, odbywa się dodanie kategorii w tablicę.

W rezultacie powyższych operacji funkcja related_posts_plus(); będzie mieć następujący wygląd:

function tutsplus_related_posts() {

   $post_id = get_the_ID();

   $cat_ids = array();

   $categories = get_the_category( $post_id );

   if ( $categories && !is_wp_error( $categories ) ) {

         foreach ( $categories as $category ) {

             array_push( $cat_ids, $category->term_id );

         }

     }

}

Napisanie zapytania dla wyświetlania wpisów z wybranej kategorii

Teraz, kiedy my mamy tablicę z ID kategorii, można używać ją jako argument dla zapytania, który będzie wyznaczał wpisy z podanych kategorii.

W środku naszej funkcji ustanowimy następujące argumenty dla zapytania:

 

$current_post_type = get_post_type( $post_id );

$args = array(

   'category__in' => $cat_ids,

   'post_type' => $current_post_type,

   'posts_per_page' => '5',

   'post__not_in' => array( $post_id )

);

Podane argumenty będą nachodzić wpisy z tej samej kategorii i wykluczać z listy wybrany wpis. Linijka    ‚posts_per_page’ => ‚5’, oznacza, że funkcja będzie wyświetlać tylko 5 wpisów. Ten parametr można zmienić w zależności od potrzeby.

Teraz dodamy zapytanie:

 

$query = new WP_Query( $args );

if ( $query->have_posts() ) {

     ?>

   <aside class="related-posts">

       <h3>

           <?php _e( 'Related Posts', 'plus' ); ?>

       </h3>

       <ul class="related-posts">

           <?php

                 while ( $query->have_posts() ) {

                     $query->the_post();

                     ?>

                   <li>

                        <a href="<?php the_permalink(); ?>">

                           <?php the_title(); ?>

                       </a>

                   </li>

                   <?php

                 }

             ?>

       </ul>

   </aside>

   <?php

}

wp_reset_postdata();

Podany fragment kodu odpowiada za wyświetlanie w liście nazw wpisów i linków do nich.

Dalej zostanie tylko zapisać wszystkie zmiany przekazać plik related-posts-plus.php na serwer. Podany plik powinny znajdować się w folderze /wp-plugins/.

Kiedy plik z wtyczką jest umieszczony na serwerze, przechodzimy do kolejnego kroku.

Podłączenie wtyczki do motywu

Ostatnim krokiem będzie dodanie funkcji related_posts_plus(); w plik single.php, który odpowiada za wyświetlenie wpisu na stronie www. Żeby wykonać taką operację, należy wejść w panel administracyjny naszej strony i wybrać sekcję Wygląd – Edytor.

Pojawi się odpowiednie okno, w którym trzeba dla ustawionego motywu (w naszym przypadku to Twenty Fourteen) otworzyć w edytorze plik single.php (rys.1). Funkcję related_posts_plus(); można dodać w dowolne miejsce w pliku, oprócz środka cyklu. W naszym przypadku dodamy ją na koniec pliku.

1

Rysunek 1. Edytowania pliku single.php

Po zapisaniu wszystkich zmian przechodzimy na stronę z dowolnym wpisem. Otrzymamy następujący rezultat (rys. 2):

2

Rysunek 2. Powiązane wpisy na stronie ze wpisem

Jak widać na samym dole strony będą wyświetlane 5 wpisów, które najbardziej odpowiadają tematyce podanego artykułu (zgodnie z użytym przez nas algorytmem).

Alternatywna metoda: tagi i taksonomii

W naszym przykładzie powiązane wpisy wyświetlają się na zasadzie wspólnej kategorii. Ale nie ma żadnego problemu zmienić naszą funkcję related_posts_plus(); tak, aby wybierać wpisy w oparciu o tagi oraz elementy taksonomii.

Dlatego, żeby używać tagów zamiast kategorii, należy zamienić funkcję get_the_category() na get_the_tags(). Zarazem zamienić argument dla zapytania ‚category__in’ na ‚tag__in’.

W przypadku użycia elementów taksonomii, trzeba wziąć funkcję get_the_terms() zamiast get_the_category(). Przy tym należy zamienić argument ‚category__in’ na ‚tax_query’.

Oprócz tego funkcję related_posts_plus(); można zmodyfikować w taki sposób, żeby wyszukiwania powiązanych wpisów odbywało się na zasadzie kilach umów, np. na zasadzie wspólnej kategorii i tagów. Żeby w funkcji pojawiła się taka możliwość należy stworzyć w niej dwie tablicy i dwa zapytania odpowiednio.

Podsumowanie

Przedstawiliśmy Państwu bardzo prosty sposób wyświetlania powiązanych wpisów na stronie www. Nie jest to nowe i unikalne rozwiązanie, ale pozwala oni rozszerzyć możliwości strony internetowej. Przy tym, że używana funkcja lekko poddaje się modyfikacji i dopasowania do Państwa potrzeb.

Także należy dodać, że podany sposób jest dojść prosty i nie obciąża serwera tak jak niektóre z gotowych rozwiązań.

Gotowa paczka z plikami stworzonej przez nas wtyczki i zmodyfikowanego pliku .css dodaje się poniżej.

POBIERZ PACZKĘ

 

Artykuł opracowany przy współpracy z TemplateMonster.com

Podobne artykuły

WordPress – Tworzenie motywu potomnego

Stwórz motyw potomny aby bezpiecznie edytować stylistykę projektu!

Poznajmy się
Poznajmy się
Chcesz porozmawiać o start-upach, projektach lub programowaniu?

GOGOmedia Sp. z o.o.
ul. Klimczaka 1
02-797 Warszawa

+48 22 378 47 27
GOGOmedia
GOGOmedia
Internet Software House

Jesteśmy internetową firmą technologiczną, dostarczamy kompletne rozwiązania informatyczne z zakresu web aplikacji. Kompleksowo obsługujemy klientów z różnych sektorów biznesu w zakresie dedykowanego oprogramowania. Prowadzimy szkolenia, doradzamy, wykonujemy specjalistyczne audyty i dzielimy się zdobytą przez lata wiedzą. Dla wielu jesteśmy partnerem, który pomaga osiągać wyznaczone cele biznesowe w najbardziej optymalny sposób.

Polecamy
Polecamy
narzędzia wspierające naszą codzienną pracę
  • New Relic
  • CloudFlare
  • JIRA
  • Bamboo
  • Axure
  • Zendesk
  • Microsoft Project