Wtyczka Similarity współpracująca z qTranslate

Tym razem wpis będzie bardzo krótki. Osoby korzystające z wielu wtyczek napotykają czasem na problem z kompatybilnością. Niestety, wymagać od twórców aby uwzględniali inne wtyczki podczas pisania swoich, to jak wymagać od programisty aby instalował Windowsa. Zatem w przypadku pojawiania się problemów zmuszeni jesteśmy do utworzenia własnych rozwiązań.

Wtyczki sprawiające problemy

Na moim blogu miałem kilka kwestii braku kompatybilności wtyczek. qTranslate META nie współgra z All in One SEO Pack, a teraz przyszła kolej na wtyczkę Similarity, która ma problem z samym qTranslate. Nie jest łatwo tworzyć wielojęzycznego bloga;) Jednak, jak już się domyślacie poradzimy sobie z tym.

Głównym zadaniem tego wpisu jest zachowanie na później sposobu, w jaki rozwiązałem ten problem. W przypadku aktualizacji którejś z wtyczek nie będę musiał odszukiwać poprawionych przeze mnie plików i nadpisywać nowych – po prostu sięgnę do bloga 🙂

Problem wtyczki Similarity

Korzystając z wtyczki qTranslate tytuły wpisów zapisywane są w inny sposób. Dla każdego użytego w notce języka są dodawane specjalne znaczniki (oparte na komentarzach HTML), a całość zapisywana jest do jednego pola.

<!–:pl–>PHP w trybie CGI – autentyfikacja HTTP – system logowania<!–:–><!–:en–>PHP in CGI version – HTTP Authentication – login system<!–:–>

Z powodu takiego zapisu, pobierając tytuł wpisu otrzymamy go we wszystkich językach. Niestety, użytkownik będący na stronie z językiem Polskim może nie mieć ochoty na oglądanie listy podobnych wpisów, na której, każdy wpis jest wypisany we wszystkich językach w jakich występuje. W przypadku tylko dwóch języków nie jest to jeszcze straszne, chociaż mylące. Co jeśli, ktoś tworzy większy serwis tłumaczony na dziesiątki języków?

Rozwiązanie

W przypadku tworzenia takich haków najbardziej niewdzięczną czynnością jest przerobienie czyjegoś kodu i wyłapanie w nim odpowiednich fragmentów. W przypadku takim jak ten, gdzie przyczyna niepoprawnego działania jednej z wtyczek jest znana, poszukiwanie rozwiązania jest łatwiejsze. W zasadzie wystarczy odnaleźć fragment kodu wtyczki Similarity odpowiadający za wyświetlanie linków do podobnych wpisów. Dodatkowo, można się pokusić o fragment z wtyczki qTranslate, który oczyszcza link z niepotrzebnych tłumaczeń. Dzięki takiemu połączeniu nie będzie potrzeby pisania własnego kodu, wyrażeń regularnych etc. Mając na uwadze, że konieczność wykorzystania haków do Similarity występuje tylko w przypadku korzystania z qTranslate możemy śmiało pokusić się o wtórne skorzystanie z jej kodu.

W tym przypadku mamy szczególne ułatwienie, gdyż wtyczka qTranslate uruchamiana jest przed wtyczką Similarity, zatem źródła tej pierwszej są już załadowane. Czyli utworzenie rozwiązania sprowadza się do odnalezienia i wykorzystania właściwej funkcji. Z poszukiwaniami było ciężko, na szczęście edytory pomagają śledzić kolejne wywołania funkcji. Dzięki temu już po kilkunastu przeskokach miałem odnalezioną odpowiednią funkcję z wtyczki qTranslate.

Szukana funkcja to: qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage($lang), nazywa się ciekawie 😉

Jedyne co nam pozostaje to wywołanie tej funkcji w odpowiednim miejscu wtyczki Similarity. Dokładnie to są to 2 miejsca, (oryginalnie linia 200 i 281). Jako, że kod może zostać wywoływany w dwóch miejscach lepiej będzie utworzyć oddzielną funkcję, którą w razie konieczności zmian można zastąpić czymkolwiek innym. Interesują nas dwie linie 200 i 281 pliku similarity/similarity.php. Są to linie generujące linki do podobnych postów. W tym kodzie istotną zmienną jest $post->post_title, która odpowiada za to co użytkownik widzi na ekranie.

$impression = str_replace("{title}",$post->post_title,str_replace("{url}",get_permalink($list[$i]['post_id']),str_replace("{strength}",$list[$i]['strength'],str_replace("{link}","<a href=\"{url}\">{title}</a>",$output_template))));

Odnajdujemy miejsca utworzenia zmiennej $post (linie 143 oraz 215), dopisujemy za nimi:

// linia 143
$post = get_post($list[$i]['post_id']);
// dopisujemy:
$post->post_title = qtranslate_post_title($post->post_title);
//(..)
// linia 215
$post = get_post($list[$i]['post_id']);
// dopisujemy:
$post->post_title = qtranslate_post_title($post->post_title);

Teraz zostało nam już tyko wywołać odpowiednią funkcję z wtyczki qTranslate. Robimy to następująco:

1
2
3
4
5
6
7
8
9
10
11
/**
 * Hak poprawiający wyświetlanie podobnych linków
 * @author Vokiel | http://blog.vokiel.com/?p=598
 * @param string $title
 **/
function qtranslate_post_title($title){
	if (function_exists('qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage')){
		$title = wp_specialchars(qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage($title));
	}
	return $title;
}

Prosty warunek sprawdzający czy wymagana funkcja została zdefiniowana (załadowana), jeśli tak, to poprawiamy link, jeśli nie, to zostaje zwrócony taki jaki był. Mam nadzieje, że się komuś jeszcze przyda

Voila!

 

Przeczytaj także

Komentarze: 1

Dodaj komentarz »

 
 
 

Dodaj komentarz

 
(nie będzie publikowany)
 
 
Komentarz
 
 

Dozwolone tagi XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
© 2009 - 2016 Vokiel.com
WordPress Theme by Arcsin modified by Vokiel