Modyfikacja kodu wynikowego w shortcode [gallery]

WordPress umożliwia nam stworzenie własnego kodu wynikowego shortcode gallery poprzez filtr post_gallery. Niestety filtr ten jest umieszczony przed właściwym kodem generującym galerię, zatem najcześciej proponowanym rozwiązaniem jest stworzenie własnej funkcji obsługi tego shortcode i wykorzystanie atrybutów, które otrzymujemy jako argument funkcji filtrującej. Takie rozwiązanie ma pewne wady:

  • musimy pilnować ewentualnych zmian w kodzie WordPressa aby zapewnić pełną kompatybilność,
  • w wypadku gdy chcemy tylko dodać jakieś atrybuty do zdjęć to rozwiązanie wydaje się być mocno na wyrost,
  • trzeba wygenerować sporo kodu, który często duplikuje to co już robi WordPress.

Niestety pomysł dodania wywołania apply_filter na końcu shortcode nie ma wzięcia wśród developerów WordPressa, zatem poniżej lekko zmodyfikowana wersja kodu, którą znalazłem w jednym z wątków dotyczących tego problemu, dzięki niej można wykorzystać obecny kod shortcode i go po prostu zmodyfikować funkcjami modyfikującym ciągi znaków:

function custom_gallery_shortcode($gallery, $attr) {
	remove_filter('post_gallery', __FUNCTION__, 10, 2);
	$gallery = gallery_shortcode($attr);
	add_filter('post_gallery', __FUNCTION__, 10, 2);

	// Modyfikujemy kod w zmiennej $gallery TUTAJ
	
	return $gallery;
}
add_filter('post_gallery', 'custom_gallery_shortcode', 10, 2);

I jeszcze krótki komentarz dlaczego tak a nie inaczej:

Wywołujemy filtr post_gallery po czym go usuwamy na czas wywołania funkcji gallery_shortcode, która bez tego wpadłaby w niekończącą się pętlę jako, że to on jest źródłem wywołania tego filtra. Po całym zabiegu przywracamy nasze wywołanie filtra i możemy według uznania modyfikować wynikowy kod galerii.