Tworzysz stronę internetową i potrzebujesz pomocy?

W komentarzach pod artykułem o RODO (Praktyczne aspekty Rozporządzenia o Ochronie Danych Osobowych (RODO/GDPR) w działalności internetowej) dyskusja trochę zboczyła na boczne tory, i dotarła do wyświetlania chmurki tagów, ale tylko dla artykułów (postów) z wybranej kategorii. Zagadnienie (wyzwanie ;-)) w sumie ciekawe, więc postanowiłem mu się przyjrzeć…

WordPress i chmura tagów dla postów z wybranej kategorii

WordPress w standardzie posiada funkcję, które pozwala nam wyświetlić właściwie w dowolnym miejscu chmurkę tagów, które są wykorzystywane przy artykułach:

wp_tag_cloud(); 

Mamy tu nawet jakieś wbudowane możliwości personalizacji wyników, ale brak (przynajmniej) jednej opcji, która w niektórych przypadkach by się przydała:

Bardziej mi zależy, na tagu tylko na digg, by łatwiej było mi szukać, co mam w digg.

(…)

Z tego co ja czytałem (i zrozumiałem) dokumentację, to mogę wykluczyć co najwyżej jakieś tagi, ale dla mnie tagi są uniwersalne dla digg i nie digg.

Uznałem, że wprawdzie w standardzie opcji, by przefiltrować chmurkę do tagów tylko z wybranej kategorii nie mamy, ale od czego mamy – na potrzeby przećwiczenia koncepcji – query_post(), dzięki czemu możemy przefiltrować posty należące np. do wybranej kategorii:

query_posts( 'category_name=slug-kategorii' );

Zdecydowałem się skorzystać ze sluga kategorii, ale można równie dobrze skorzystać z ID kategorii:

query_posts( 'cat=1' );

Ogólnie, dzięki skorzystaniu z tej metody możemy dość dowolnie przefiltrować artykuły (posty), z którymi w dalszej kolejności będziemy pracować…

W dalszej kolejności to już operacje (w pętli) na przefiltrowanych artykułach, z których na potrzeby naszej chmurki tagów wyciągamy skojarzone z artykułami tagi, które następnie – po małej obróbce – podstawiamy jako argumenty do standardowej funkcji odpowiedzialnej za wyświetlenie chmury tagów:

<?php

query_posts( 'category_name=slug-kategorii' );
if ( have_posts() ) {
	while ( have_posts() ) {

		the_post();

		$PostTags = get_the_tags();
			if ( $PostTags) {
				foreach( $PostTags as $Tag ) {
					$CategoryTagsArray[] = $Tag -> term_id;
				}
			}

	} 
}
wp_reset_query();

$CloudTagArgs = array( 'include' => implode( ',', array_unique( $CategoryTagsArray ) ) );

wp_tag_cloud( $CloudTagArgs ); 

?>

W warunkach produkcyjnych zamiast „query_posts” lepiej chyba będzie skorzystać z „WP_Query”, co wymaga nieznacznej modyfikacji kodu:

<?php

$query = new WP_Query( array( 'category_name' => 'artykul-sponsorowany' ) );

if ( $query->have_posts() ) {
	while ( $query->have_posts() ) {

		$query->the_post();

		$PostTags = get_the_tags();
			if ( $PostTags) {
				foreach( $PostTags as $Tag ) {
					$CategoryTagsArray[] = $Tag -> term_id;
				}
			}

	} 
}

$CloudTagArgs = array( 'include' => implode( ',', array_unique( $CategoryTagsArray ) ) );

wp_tag_cloud( $CloudTagArgs ); 

?>

Powyższy kod PHP (jeden lub drugi, ale lepiej chyba drugi) wystarczy wstawić w miejscu, gdzie chcemy wyświetlić tak zmodyfikowaną chmurkę tagów (można też np. stworzyć krótki kod, który powinien znacznie uprościć wykorzystanie).

(!) Zgłoś błąd na stronie | Lub postaw nam kawę :-)
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej
Kurs "WordPress: Pierwsze kroki" (na dobry początek)
Patryk
Kurs "WordPress: Pierwsze kroki" (bezpłatna lekcja)