Kilka dni temu odezwał się do mnie jeden z użytkowników wtyczki „PRyC WP: Add custom content to post and page (top/bottom)” do WordPressa (tutaj znajduje się artykuł na temat tej wtyczki). Potrzebował wsparcia, bo zawartość dodawana na dole postów przez wtyczkę wyświetlała się przed dodatkowo zdefiniowanym polem we wtyczce ACF. I nie pomaga dostępna od jakiegoś czasu opcja pozwalająca ustawić priorytet. Po wymianie kilku zdań wszystko stało się jasne – dodatkowe pole utworzone przez wtyczkę ACF wyświetlało się po głównej zawartości posta, gdy tymczasem wtyczka „PRyC WP: Add custom content to post and page (top/bottom)” operuje bezpośrednio na tej zawartości (funkcja/filtr the_content()), czyli tym samym oczywiste, że będzie przed.

Własna treść w wybranym miejscu w WordPressie

Pozornie sprawa beznadziejna, bo mamy 2 wtyczki operujące w różnych obszarach WordPressa, a do tego druga wtyczka (ACF) operuje poza polem z zawartością postu. Ale skoro do czynienia mieliśmy z motywem potomnym (child theme), i do tego jeszcze modyfikowanym choćby pod wyświetlanie zawartości pola z wtyczki ACF, to uznałem, że jak będzie budżet (;-)), to można zmodyfikować działanie wtyczki „PRyC WP: Add custom content to post and page (top/bottom)” tak, by zamiast korzystać z filtra/funkcji the_content() wyświetlała zdefiniowaną treść w dowolnym miejscu, gdzie zostaną wstawione odpowiednie znaczniki PHP.

Całej modyfikacji nie będę tu opisywał, i to nie tylko dlatego, że być może jako opcja niebawem pojawi się we wtyczce. Ale to dobra okazja, by pokazać, jak można coś takiego – wyświetlenie dowolnej treści właściwie w dowolnym miejscu – zrobić.

Motyw potomny (child theme)

Wprawdzie w ekstremalnej sytuacji (albo gdy mamy motyw dedykowany, który i tak nie będzie aktualizowany) można zmian dokonać bezpośrednio w bazowym motywie, ale jest to o tyle bezcelowe, że po aktualizacji zmiany znikną.

Wprawdzie kod odpowiedzialny za większość operacji możemy umieścić we własnej wtyczce, to jednak w większości przypadków znaczniki odpowiedzialne za określenie gdzie on ma się wykonać (gdzie ma wyświetlić treść) będą w plikach związanych z motywem. Np. w pliku typu single.php, zazwyczaj odpowiedzialnym za wyświetlenie pojedynczego wpisu. Stąd motyw potomny wydaje się jedynym sensownym wyjściem.

Podstawowe funkcje, czyli co będziemy wyświetlać

By wyświetlić naszą treść w wybranym przez nas miejscu, musimy skorzystać z 2 funkcji, które będą się wzajemnie uzupełniać. Pierwsza zawiera treść do wyświetlenia:

function webinsider_wp_add_custom_content_show() {
	echo "Przykładowa treść do wyświetlenia";
}
add_action('webinsider_wp_add_custom_content', 'webinsider_wp_add_custom_content_show', 10 );

W przypadku gdy zamierzamy korzystać w dodatkowej treści z tzw. krótkich kodów (shortcodes), to musimy lekko zmodyfikować kod, bo domyślnie WordPress krótkie kody przetwarza tylko w podstawowej treści (the_content):

function webinsider_wp_add_custom_content_show() {
	do_shortcode ( "Przykładowa treść do wyświetlenia z krótkimi kodami..." );
}
add_action('webinsider_wp_add_custom_content', 'webinsider_wp_add_custom_content_show', 10 );

Druga definiuje znacznik PHP, który później umieszczamy w wybranym miejscu:

function webinsider_wp_add_custom_content() {
	do_action('webinsider_wp_add_custom_content');
}

I jeśli chodzi o kod do umieszczenia we wtyczce lub pliku functions.php to tyle.

Znacznik, czyli wskazujemy, gdzie treść ma się pojawić

Kolejny krok, to zdefiniowanie miejsca, w którym powyżej zdefiniowana treść ma się pojawić. Możliwości jest wiele, ale załóżmy, że będzie to już wspomniany plik single.php odpowiedzialny za wyświetlanie pojedynczego wpisu/postu.

Otwieramy go do edycji, w wybranym miejscu wstawiamy nasz znacznik (jeśli wstawiamy go w bloku kody PHP, to oczywiście pomijamy tagi otwierające kod, czyli „<?php” i „?>”):

<?php webinsider_wp_add_custom_content(); ?>

I to właściwie wszystko. W tym momencie we wskazanym miejscu powinna pojawić się wcześniej zdefiniowana treść.

(!) Zgłoś błąd na stronie
Envato Elements - pobierasz co chcesz, ile chcesz