Na razie nie wchodząc głęboko w szczegóły wyjaśnię, o co w tym wpisie chodzi. Otóż postaram się przybliżyć wam filtr the_content
, dzięki któremu bardzo łatwo zrealizujemy cel postawiony w temacie.
Filtry w WordPressie są często wykorzystywane we wtyczkach – np. do dodawania na końcu wpisu guzików z mediów społecznościowych.
Wyobraźmy sobie sytuację w której mamy już wiele opublikowanych wpisów. Wyobrażamy sobie naszego bloga z 50 wpisami (bardzo często odwiedzanym z resztą). I teraz chcielibyśmy sobie coś tam zmienić, coś tam dodać na początku tekstu, może też na końcu. Najlepszy przykład jaki przychodzi mi teraz do głowy to kod reklamy. 🙂 Mamy już na naszym blogu gotowe shortcode-y, więc moglibyśmy sobie spokojnie zedytować posty i wpisując krótką komendę w edytorze, albo nawet klikając guzik shortcode-a w edytorze umieścić go w treści nasz baner. Zaraz, edytować 50 postów i bawić się w ręczne dodawanie?
Sposób oczywiście najlepiej sprawdza się w sytuacji, gdy chcemy dodać coś bezpośrednio na początku wpisu i bezpośrednio po nim. Wiadomo, że mając te 50 postów, które prawdopodobnie powstawały na przestrzeni kilku miesięcy/lat, to każdy wpis będzie trochę inny. Dlatego sposób wymaga przewidzenia niektórych sytuacji i sprawdzenia efektu końcowego „ręcznie – naocznie”, niemniej zawsze jest to lepsze niż edycja każdego wpisu z osobna.
Po tym przydługim wstępniaku, zacznijmy wreszcie działać, oto przykład:
Cały kod:
// dodanie przed i po poscie jednostki reklamowe function add_text($content) { //kod reklamy $ad = 'TWÓJ KOD REKLAMY'; $updated_content = ''; if ( is_single() ) { $updated_content = $ad . '<br />' . $content . '<br />' . $ad . '<br />'; return $updated_content; } else { return $content; } } add_filter( 'the_content', 'add_text' );
A teraz postaram się wytłumaczyć o co tutaj chodzi.
W pliku functions.php
piszemy nową funkcję add_text()
, przyjmującą argument $content
. Tak, w tym argumencie znajduje się treść naszego wpisu.
W ciele funkcji, w zmiennej $ad zapisujemy kod reklamy dla naszego przykładu, albo cokolwiek innego, co chcielibyśmy umieścić na początku (na końcu) wpisu.
W zmiennej $updated_content
zapiszemy naszą, za chwilę lekko zmodyfikowaną, wersję wpisu.
W „ifi-e” sprawdzamy, czy wywołanie dotyczy pojedynczego wpisu, bo nie chcielibyśmy, żeby reklama pojawiała się liście wpisów przy każdym wycinku, prawda? W tym miejscu możemy także dodać jakiś inny własny warunek jak sprawdzenie typu/statusu wpisu, czy należy do jakiejś kategorii, zawiera tag itd., zależy od naszych potrzeb.
Wreszcie instrukcja właściwa:
$updated_content = $ad . '<br />' . $content . '<br />' . $ad . '<br />';
Nie jest to jakaś zdobycz programowania (tylko podstawy podstaw), ale chodzi o zrozumienie przykładu i tego w jaki sposób osiągnąć wspomniany efekt. Do reklamy na początku „doklejamy” znak łamania linii, do tego doklejamy kontent wpisu, znak łamana linii, reklamę która ma być na końcu wpisu i na koniec znowu znak łamania linii. Na dokładnym „sklejeniu” „stringów”, w kolejnej linijce, która tak na prawdę spokojnie mogłaby być uwzględniona w poprzedniej, zwracamy efekt końcowy.
Ważne jest, że jeżeli używamy już tego „ifa”, bo nie zawsze jest nam potrzebny, to należy pamiętać także o else
. Jeżeli go pominiemy, a warunek nie zostanie spełniony, to nie wyświetli nam się w ogóle treść wpisu.
Na koniec, najważniejsze, czyli dodanie filtra z argumentem the_content
i add_text
. Dzięki temu WordPress weźmie pod uwagę naszą funkcję przed wyświetleniem wpisów.
the_content
– jak nazwa wskazuje, oznacza że chodzi o kontent, treść wpisu. Z resztą tak samo nazywa się funkcja, której używamy w pętli WordPress-a do wyświetlenia treści wpisu.add_text
– tak nazywa się nasza właśnie utworzona funkcja. Jeżeli nazwa naszej funkcji i nazwa podana w filtrze nie będą się pokrywać, wpis także nie zostanie wyświetlony.
Wspomniany sposób można z powodzeniem wykorzystać także w przypadku tytułu wpisu. Wtedy zamiast the_content
, używamy the_title
, o tak:
add_filter( 'the_title', 'add_before_title' );