Gdy zrozumiesz interfejs Shortcode API i sposób działania filtrów, zaimplementujesz je w WordPressie.
A kiedy jesteś w stanie zmieszać te dwa, możesz zrobić znacznie więcej niż zwykle, niż gdy działają niezależnie od siebie.
W szczególności możesz filtrować dane, które są wynikiem skróconego kodu, co może być szczególnie przydatne dla innych programistów. Jeśli jesteś zaznajomiony z implementacją filtrów niestandardowych, robienie tego w kontekście krótkiego kodu nie różni się zbytnio.
Ale jeśli nigdy wcześniej nie korzystałeś z interfejsu API shortcode ani funkcji, nadal jest to łatwe.
Filtry niestandardowe ze skrótami
W tym poście użyjemy stosunkowo wymyślnego przykładu. Oznacza to, że krótki kod spowoduje coś statycznego. Powodem jest to, że ułatwia zademonstrowanie w poście i zaimplementowanie w kodzie.
Krótki kod
Aby zaimplementować shortcode, potrzebujesz dwóch rzeczy:
- niestandardowa nazwa shortcode,
- funkcja, która służy do wrzucania informacji do miejsca, w którym używany jest krótki kod.
<?php
namespace Acme;
add_shortcode('a_simple_example', __NAMESPACE__. 'aSimpleExample');
/**
* Replaces [a_simple_example] short code with the text "This is the result of an example shortcode."
* whenever the shortcode is placed in a post or page.
*/
function aSimpleExample()
{
return 'This is the result of an example shortcode.';
}
Uwaga w powyższym kodzie; Poprzedziłem funkcję przedrostkiem. __NAMESPACE__Dzieje się tak, ponieważ funkcja znajduje się w niestandardowej przestrzeni nazw (którą można zobaczyć na górze pliku).
Bez tego prefiksu funkcja nie zostanie wywołana. Jeśli zdecydujesz się nie używać przestrzeni nazw, możesz zrezygnować zarówno z prefiksu, jak i wiodących ukośników nazwy funkcji.
Pamiętaj, że powrócimy do tej funkcji, gdy tylko zainstalujemy filtr.
Filtr
Dodanie niestandardowego filtra jest podobne do dodawania krótkiego kodu. Potrzebujesz:
- niestandardowa nazwa filtra,
- funkcja, która służy do filtrowania przychodzących informacji (a filtry powinny generalnie akceptować przynajmniej jeden parametr, którym są oczywiście dane do filtrowania):
Aby zachować spójność z powyższym przykładem, powiedzmy, że chcemy tylko zastąpić kilka słów w shortcode :
<?php
namespace Acme;
add_filter('custom_shortcode_example', __NAMESPACE__. 'aSimpleShortcodeFilter');
/**
* Replaces [a simple example] short code with the text "This is the result of an example shortcode."
* whenever the shortcode is placed in a post or page.
*
* @param string $input the input to filter.
*
* @return string the result of the filter running on the input
*/
function aSimpleShortcodeFilter(string $input): string
{
return str_ireplace(
'an example shortcode.',
'a filtered shortcode',
$input
);
}
Zastąpi to zawartość:
To jest wynik przykładowego shortcode.
Do:
To jest wynik przefiltrowanego shortcode.
Ale nadal musimy związać ich dwoje razem.
Ponowne odwiedzanie Shortcode
Aby powiązać te dwie funkcje ze sobą, musimy upewnić się, że funkcja dla krótkiego kodu stosuje filtr do wartości, którą zwraca.
Na szczęście wdrożenie go jest proste zwłaszcza, że mamy wszystko, czego potrzebujemy:
<?php
namespace Acme;
add_shortcode('a_simple_example', __NAMESPACE__. 'aSimpleExample');
/**
* Replaces [a_simple_example] short code with the text "This is the result of an example shortcode."
* whenever the shortcode is placed in a post or page.
*/
function aSimpleExample()
{
return apply_filters('custom_shortcode_example', 'This is the result of an example shortcode.');
}
W najbardziej konkretnym przykładzie zawsze zalecam sprawdzenie, czy wynik parametru nie jest pusty, czy zawiera ciąg, którego szukam, lub coś podobnego.
Oznacza to, że często lubię otwierać klauzulą ochronną. Jeśli test się nie powiedzie, po prostu zwracam przychodzącą wartość; w przeciwnym razie przefiltruję dane i zwrócę jakikolwiek wynik tej operacji.
