Na tym blogu dosyć często załączam fragmenty kodów i opisuję różne skrypty. Do tej pory korzystałem z wbudowanych wtyczek w WordPressie, jednak nie spełniały one w pełni moich oczekiwań. Postanowiłem wziąć sprawy w swoje ręce i rozwiązać ten problem bez korzystania z jakiejkolwiek wtyczki. Potrzebowałem między innymi kodu, który zmieni znaki specjalne typu "<" i ">" na encje, aby finalnie w przeglądarce kod wyświetlał się bezbłędnie. Jak to zrobiłem?
Instrukcja dla strony internetowej
Najlepiej chyba od razu pokazać kod:
<?php
$str = 'Tutaj kod ze znacznikiem pre, który chcemy zmienić';
$pattern = '~<pre[^>]*>\K.*(?=</pre>)~Uis';
$str = preg_replace_callback($pattern, function ($m) {
return str_replace("<", "<", $m[0]);
}, $str);
echo $str;
?>
W pierwszej linijce tworzymy zmienną $str, a jako wartość podajemy kod, który chcemy skonwertować.
W drugiej linijce definiujemy wyrażenie, które sprawia że znaki będą zmienione wyłącznie pomiędzy znacznikiem <pre> i </pre>.
W trzeciej linijce aż do końca krótko mówiąc zamieniamy - w tym przypadku - jeden znak "<", przy czym to wystarczy by przeglądarka nie odczytała tego kodu jako elementu strony internetowej.
Instrukcja dla WordPressa
Sprawdźmy teraz jak to zrobić w przypadku WordPressa. Tutaj sprawa przez chwilę była bardziej skomplikowana, ponieważ funkcji która wyświetla treść posta the_content() nie można przypisać do zmiennej. Z drugiej strony funkcję get_the_content() można przypisać do zmiennej, natomiast nie zawiera formatowania tekstu.
Udało się to jednak rozwiązać poniższym kodem:
<?php
function get_the_content_with_formatting ($more_link_text = '(more...)', $stripteaser = 0, $more_file = '') {
$content = get_the_content($more_link_text, $stripteaser, $more_file);
$content = apply_filters('the_content', $content);
$content = str_replace(']]>', ']]>', $content);
return $content;
}
$str = get_the_content_with_formatting();
$pattern = '~<code[^>]*>\K.*(?=</code>)~Uis';
$str = preg_replace_callback($pattern, function ($m) {
return str_replace("<", "<", $m[0]);
}, $str);
echo $str;
?>
W powyższym kodzie wykorzystujemy rozwiązanie znalezione na forum WordPressa i łączymy je z omówionym wcześniej kodem. Tutaj zaszła jeszcze jedna zmiana - kod będzie zmieniony ale nie pomiędzy znacznikiem <pre> a pomiędzy znacznikiem <code>.
Dlaczego? Ponieważ w WordPressie wykorzystałem kolorowanie składni kodu za pomocą Prism - opiszę go w następnej poradzie, która pojawi się na itporady.pl za tydzień - warto sprawdzić! :)
Warto zobaczyć
Szukasz hostingu?
Jest dużo firm oferujących hosting, ale którą wybrać? Przedstawiamy zestawienie najciekawszych propozycji i ranking hostingów (Wrzesień 2023).
Data publikacji: 05.07.2016 r. Tagi: wordpress, kolorowanie kodu, prism, formatowanie, encje, zmiana znaków, code, pre. Źródło obrazka porady: Pixabay.