Sztuczki w wordpress’ie: przeciążanie standardowych funkcji dostępnych w szablonie

Gdy programujemy w szablonie skórki WordPress’a możemy korzystać z całej masy funkcji dostępnych w engine WordPress’a. Niektóre z nich zwracają wartości, inne od razu drukują na ekran, zwykle są parametryzowane i możliwość konfiguracji jest wystarczająco duża.

Problem

Niestety z czasem zawsze przychodzi pewne 'ale’… chcielibyśmy aby standardowa funkcja wordpressa działała minimalnie inaczej. Zatem musimy zmodyfikować jej kod… ale stop nie możemy tak bezczelnie nadpisywać funkcji wordpress.Takie hamskie haki są niedopuszczalne z kilku powodów:

  • Utrudniamy przyszłe aktualizacje, po każdej aktualizacji będziemy musieli pamiętać aby w pliku XXX w linii YYY wstawić swojego hacka.
  • Ta sama funkcja może być wywoływana w innym pliku szablonu, może to powodować błędne/niechciane działanie. Pozatym gdy zmienimy skórkę na inną to hack pozostanie dalej mimo, że już go nie będziemy potrzebować
  • Hack’owanie kodu jakichkolwiek bibliotek/frameworków czy takich gotowych kombajnów jak wordpress jest sprzeczne z zasadami programowania.

Zatem jak sobie z tym problemem poradzić?

Wszelkie gotowe rozwiązania powinno się rozszerzać nie modyfikując przy tym źródeł samej głównej aplikacji. Jeżeli takie rozszerzenie jest nie możliwe to oznacza, że aplikacja została źle napisana i należy poszukać innej rozszerzalnej.

Czy rozszeżać funkcje w WordPress?

Oczywiście. Posłużymy się w tym celu trochę zapomnianym plikiem szablonów: functions.php. Jeżeli plik functions.php nie istnieje w katalogu głównym naszej skórki to go tworzymy. Plik ten jest automatycznie ładowany wraz z uruchomieniem WordPress’a, można w nim umieszczać swoje dedykowane dla skórki funkcje oraz jak w naszym przypadku funkcje speudo przeciążające.

Zwykle w szablonach nie ma tego pliku, także świadomość programistów wordpress’owych na temat jego jest niewielka. Zatem radze sobie zapamiętać o takiej możliwości!

Dobra, a więc załóżmy, że chcemy zmodyfikować działanie funkcji the_content_rss. Tworzymy zatem w pliku functions.php funkcję my_the_content_rss.

function my_the_content_rss($more_link_text='(more...)', $stripteaser=0, $more_file='', $cut = 0, $encode_html = 0) {
	global $id;

	ob_start();
	the_content_rss('', $stripteaser, $more_file, $cut, $encode_html);
	$bufferContent = ob_get_contents();
	ob_end_clean();

	$bufferContent = preg_replace( '/\.\.\.\s*$/', '', $bufferContent );
	$bufferContent .=  '<span class="read-on"><a href="'. get_permalink() . "#more-$id\" class=\"more-link\">$more_link_text</a></span>";
	
	print $bufferContent;
}

Funkcja my_the_content_rss musi przyjmować co najmniej takie parametry parametry jak oryginalna funkcja the_content_rss. Wywołuje oryginalną funkcję, jako że the_content_rss nie zwraca wartości tylko drukuję ją na ekran musimy zatem poprzez ob_start() włączyć buforowanie, od tej pory wszystkie dane, które miały być drukowane są zapisywane w buforze, następnie poprzez ob_get_contents() odczytujemy ten bufor i kończymy buforowanie ob_end_clean().

Teraz mając w zmiennej $bufferContent wynik działania oryginalnej funkcji możemygo dostosować do naszych indywidualnych wymagań w przykładzie jest to wycięcie „…” oraz wstawienie linka do szczegółów posta.

Tyle. Następnie w szablonie w miejscach, w których potrzebujemy niestandardowy wygląd/dane szablonu wywołujemy zamiast the_content_rss nowo stworzoną funkcję my_the_content_rss.

Odbanowanie domeny w Google

Ban w google

Jakże wielkie było moje zdziwienie gdy po powrocie z błogich wakacji w skrzynce mailowej znalazłem wiadomość od Google Search Quality zawiadamiającą o usunięciu z indeksu Google dwóch moich serwisów.

Powodem usunięcia (bana) było 'zastosowanie technik, które wykraczają poza wytyczne jakościowe Google’ a dokładnie domeny zawierały 'strony z ukrytym tekstem w serwisie XXX’.

Jednocześnie w mailu zostałem pouczony żeby poprawić lub usunąć wszystkie strony serwisów, które nie spełniają norm jakościowych Google.

Zostałem także poinformowany, że domeny zostały zablokowane na okres przynajmniej trzydziestu dni.

Mniejsza o to czy ban się należał czy nie, przyznaje, że część winy leżała po mojej stronie.

A ban rzeczywiście był jak skurczybyk… domeny nie dało rady znaleźć w Google w żaden sposób, site:0, odwiedzalność spadła o 75%… generalnie tragedia. Trzeba wziąć się zatem za odblokowanie…

Jak odblokować domenę?

Najpierw trzeba poprawić kod strony, do którego Google ma zastrzeżenie, następnie dodać domeny do
Google Webmaster Tools, zweryfikować i wysłać proźbę o ponowną indeksacje.

W polu tekstowym można napisać, że ów zły kod został usunięty i ew. opisać dlaczego się pojawił.

W moim przypadku obydwie domeny zostały odblokowane w przeciągu 48h od zgłoszenia. Szczerze mowiąc jestem w głębokim szoku bo praktycznie pogodziłem się już z ponad miesięczną nieobecnością w indeksie. A tak jest wielkie ufff.

Nie wiem czy standardowa procedura Google jest taka szybka, czy może szybkość wynikła z uwagi na wysoką wartość serwisów na zablokowanych domenach, czy może z tego że moje przewinienie było niewielkie i nie było umyślne, w każdym razie chylę czoła przed machiną G.

Serwisy wróciły na pozycje w SERP’ach sprzed bana, nie odnotowałem też żadnych dodatkowych perturbacji.

Wniosek?

Po pierwsze: nie warto oszukiwać Google, bo z pewnością Ci się to nie opłaci.
Po drugie: jeżeli już zdecydowałeś się oszukiwać Google to bądź pewny, że Google się o tym dowie.
Po trzecie: jeżeli Google się dowiedziało o oszukiwaniu i ukarało Cie to nie załamuj rąk, popraw się i daj znać o tym Google.