Problemy z shortcodami po aktualizacji WordPressa (Zmiany w Shortcode API)

Shortcode w WordPressie to bardzo przydatne narzędzie, wielu użytkowników nie wyobraża sobie używania WordPressa bez shortcodów, ogólnie mówiąc służą one do tworzenia bardziej skomplikowanych treści we wpisach, stronach czy widgetach, bez używania bezpośrednio kodu HTML czy PHP.

Przykładem może być chociażby wbudowany w WordPressa shortcode „gallery” w nawiasach kwadratowych, który służy do wyświetlania konkretnej galerii zdjęć na stronie lub we wpisie. Wielu developerów wykorzustuje shortcode w swoich wtyczkach dla łatwego i wygodnego wyświetlania bardziej złożony struktur. Więcej informacji na temat shortcodów (oraz instrukcję dodania własnego shortcodu) można znaleźć tutaj.

Zmiany w shortcode API

Poprawka aktualizująca bezpieczeństwo (wersja 4.2.3) została wydana pod koniec lipca br. i zostały w niej dodane zmiany dotyczące Shortcodes API. Niestety wraz z tą aktualizacją, wiele shortcodów używanych we wtyczkach czy motywach przestało działać i spowodowało to problemy na wielu stronach internetowych. Zamiast treści, którą miał produkować shortcode, w kodzie źródłowym można było zobaczyć tylko czysty tekst shortcodu, czyli np. w przypadku przycisku, zobaczyliśmy tylko napis button w nawiasach kwadratowych zamiast faktycznego przycisku.

Dużym problemem jest tutaj fakt, że wielu użytkowników WordPressa (większość, ponieważ tego typu aktualizacje, jeśli się ich nie wyłączy są instalowane automatycznie) nie było kompletnie świadomych zmian jakie zostały dodane i większość z nich za zaistniały problem winiło twórców wtyczek czy motywów. Artykuł opisujący problem został wydany tego samego dnia co aktualizacja (można go znaleźć tutaj), ale osobiście uważam, że to za późno dla twórców wtyczek i motywów jak również użytkowników, żeby przygotować się na tego typu zmiany. Rozumiem fakt, że była to poprawka, która miała na celu poprawę bezpieczeństwa, jednak myślę, że bez problemu można było wysłać informację o planowanych zmianach kilka dni wcześniej.

Skala problemu

Potencjalnie aktualizacja może mieć wpływ na każdy shortcode; zależy to tylko od sposobu w jaki implementowane są shortcode w Waszym motywie czy wtyczce. Zasadnicze pytanie: „Czy mam jakikolwiek shortcode, który występuje we fragmencie kodu HTML z atrybutami?” Shortcody, które tworzą struktury z adresami URL, czy atrybutami src=”” w treści również mogą powodować problemy. Dobrym pomysłem będzie sprawdzenie wszystkich tego typu shortcodów i naniesienie zmian w sposobie zapisu atrybutów (opis zmian w następnej sekcji tego artykułu).

Jak naprawić shortcode?

Ogólnie sprawa nie jest bardzo skomplikowana i w większości przypadków w bardzo prosty sposób można naprawić shortcody używane na stronach lub we wpisach. Generalnie tego typu shortcode przed aktualizacją działał poprawnie:

<a href="/[shortcode query="?ref="]">

Jednak po aktualizacji będzie on odrzucony przez Shortcode API i zostaniemy z textem shortcodu zamiast strukturą, którą miał on wyświetlać. Jako obejście można użyć następujących, lekko zmodyfikowanych shortcodów:

<a href="/[shortcode query='?ref=']">
<a href='/[shortcode query="?ref="]'>

Obie formy powinny działać poprawnie.

Shortcody występujące w stylach CSS inline, jak tutaj również nie będą działać poprawnie:

<div style="background-image: url('[shortcode]');">

jako obejście można zastosować coś takiego:

<div [shortcode]>

tzn. shortcode, który zamiast wyświetlania tylko samej wartości URL, będzie generował cały styl z poziomu funcji shortcode. W tym przypadku jest trochę więcej pracy, ponieważ musimy przebudować shortcody. W razie dalszych problemów, zawsze możemy przebudować shortcode całkowicie tak aby generował on np. całego diva (jest to konieczne, jeśli z shortcode będą korzystać użytkownicy z uprawnieniami niższymi niż redaktor, ponieważ tego typu użytkownicy nie mogą korzystać z niefiltrowanego HTMLA w treści i jest to dla nich jedyne rozwiązanie).

Tagi artykułu:

×

Interesujesz się WordPressem?

Polub nas na Facebooku, będziesz na bieżąco!

facebook