Tworzenie listy powiązanych wpisów w WordPress
Czas czytania:
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.
Rysunek 1. Edytowania pliku single.php
Po zapisaniu wszystkich zmian przechodzimy na stronę z dowolnym wpisem. Otrzymamy następujący rezultat (rys. 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.
Artykuł opracowany przy współpracy z TemplateMonster.com
Zainteresował Cię ten artykuł?
Może Cię również zainteresować:
5 rzeczy, na które warto zwrócić uwagę, wybierając dedykowany system klasy ERP, WMS lub LMS
Tworzenie dedykowanych aplikacji web’owych (dostępnych przez przeglądarkę WWW z poziomu komputera, tabletu czy telefonu) jest… Read More
Warsztaty Discovery – 5 powodów dla których warto je przeprowadzić
Post pochodzi bezpośrednio z naszych oficjalnych kanałów na Social Media. W dynamicznym… Read More
Optymalizacja eCommerce vs. Zewnętrzny Dyrektor Technologiczny
🛠️ Studium przypadku 🛠️Post pochodzi bezpośrednio z naszych oficjalnych kanałów na Social… Read More