19.08.09

Vylepšujeme zdrojové kódy redakčního systému WordPress

WordPress je open-source redakční systém, což nejen znamená, že na jeho vývoji pracují desítky lidí po celém světě, ale především, že jeho zdrojové kódy jsou veřejně dostupné a každý si je může dle vlastní libosti upravovat, vylepšovat a měnit. Já mám dnes pro vás několik typů, jak si pomocí drobných modifikací těchto zdrojových kódů vylepšit své internetové stránky v řadě ohledech. Nejprve se podíváme na blokování přístupů z určité internetové adresy, poté na změnu počítání komentářů, dále přidání funkce zpětných odkazů a nakonec zvýraznění komentářů od administrátora webu.

1. Blokování přístupů z určité internetové adresy

Pokud svůj web máte již nějakou dobu a spousta lidí jej zná, postupně začnou přibývat odkazy z jiných serverů. V případě, že se vám některý takový server znelíbí, můžete návštěvníkům, kteří z něj přicházejí, život malinko znepříjemnit, a sice tak, že jim jednoduchou funkcí zakážete přístup z oné internetové domény. Pokud k vám pak přijdou prostřednictvím odkazu, zobrazí se jim pouze bílá stránka, po jejímž znovunačtení se sice váš web zobrazí, avšak příchod se nezapíši do statistik ani zpětných odkazů. Ptáte se, jak na to? Jednoduše. V kořenovém adresáři WordPress otevřete soubor index.php a vložte do něj následující funkci, v níž text blokovana_domena přepište na doménu serveru, který chcete blokovat. Tento kód samozřejmě lze vložit několikrát a blokovat tak hned několik serverů zároveň.

If (ereg('blokovana_domena', $HTTP_REFERER))
die();

2. Změna počítání komentářů

Komentáře v redakčním systému WordPress se standardně po počeštění lokalizačním balíčkem zobrazují jako žádný komentáře, jeden komentář a poté dva a více komentářů. My bychom však správně chtěli, aby se nám zapisovaly dva až čtyři komentáře. Toho docílíme poměrně snadno úpravou funkce pro počítání komentářů v souboru comment-template.php. Tento soubor naleznete ve složce wp-includes, otevřete jej a vyhledejte následující funkci:

function comments_number( $zero = false, $one = false, $more = false, $deprecated = '' ) {
global $id;
$number = get_comments_number($id);

if ( $number > 1 )
$output = str_replace('%', number_format_i18n($number), ( false === $more ) ? __('% Comments') : $more);
elseif ( $number == 0 )
$output = ( false === $zero ) ? __('No Comments') : $zero;
else // must be one
$output = ( false === $one ) ? __('1 Comment') : $one;
echo apply_filters('comments_number', $output, $number);
}

Tu pak celou nahraďte upraveným a počeštěným kódem:

function comments_number( $zero = false, $one = false, $more = false, $deprecated = '' ) {
global $id;
$number = get_comments_number($id);

if ( $number == 0 )
$output = 'žádný komentář';
elseif ( $number == 1 )
$output = '1 komentář';
elseif (($number > 1) and ($number < 5))
$output = str_replace('%', $number, '% komentáře');
else
$output = str_replace('%', $number, '% komentářů');
echo apply_filters('comments_number', $output, $number);
}

3. Zobrazování comment_author_link v novém okně + drobné počeštění

Pokud vám čtenář na váš web napíše komentář a uvede také internetovou adresu svých stránek, odkaz na tyto stránky se i přesto, že vede ven z vašeho webu, otevírá ve stejném okně. Chcete-li všechny takové odkazy otevírat v okně novém, do tagu <a> v následující funkci ze souboru comment-template.php vepište target=’_blank’.

function get_comment_author_link() {
/** @todo Only call these functions when they are needed. Include in if... else blocks */

$url = get_comment_author_url();
$author = get_comment_author();

if ( empty( $url ) || 'http://' == $url )
$return = $author;
else
$return = "<a href='$url' rel='external nofollow' class='url'>$author</a>";
return apply_filters('get_comment_author_link', $return);
}

Co se týče počeštění, možná jste si všimli, že při uzavření komentářů se u článku vždy zobrazí Comments off. Pakliže tento nápis chcete počeštit, vyhledejte si řádek uvedený jako první a nahraďte jej řádkem druhým.

function comments_popup_link( $zero = false, $one = false, $more = false, $css_class = '', $none = false ) {
function comments_popup_link( $zero = false, $one = false, $more = false, $css_class = '', $none = 'Komentáře nejsou povoleny' ) {

4. Funkce zpětných odkazů

Zobrazování několika posledních zpětných odkazů, tedy odkazů na internetové adresy, ze kterých k vám přišlo v našem případě pět posledních návštěvníků, je v dnešní době funkce velice oblíbená a rozšířená. WordPress ani v nejnovější verzi ji však ve svém základu neobsahuje, a tak si ji do něj musíme přidat sami. Budeme ovšem potřebovat zasáhnout do MySQL databáze, proto se do ní přihlaste, vytvořte novou tabulku s názvem backlinks a naplňte ji těmito zkušebními daty:

CREATE TABLE `referer` (
`id` int(10) unsigned NOT NULL auto_increment,
`ref1` varchar(255),
`ref2` varchar(255),
`ref3` varchar(255),
`ref4` varchar(255),
`ref5` varchar(255),
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=0 ;

INSERT into `referer` VALUES(1, 'http://search.seznam.cz/', 'http://search.seznam.cz/', 'http://search.seznam.cz/', 'http://search.seznam.cz/', 'http://search.seznam.cz/');

Jakmile tak učiníte, ve složce wp-includes zvolte editaci souboru function.php, na jehož začátek zkopírujte PHP funkci pro zjišťování zpětných odkazů, přičemž namísto blokovana_domena zapište adresu, která se nemá do zpětných odkazů ukládat. Tento kód můžete vložit také do jiného souboru, do kterého má ale WordPress neustále přístup.

function backlinks() {
If (ereg('blokovana_domena', $_SERVER['HTTP_REFERER']))
return;
$data = mysql_fetch_row(mysql_query("SELECT * FROM referer WHERE id=1"));
if ( isset($_SERVER['HTTP_REFERER']) and strpos($_SERVER['HTTP_REFERER'], $_SERVER['SERVER_NAME']) === false ) {
if ( in_array($_SERVER['HTTP_REFERER'], $data) === false ) {
mysql_query("UPDATE referer SET ref1='{$_SERVER['HTTP_REFERER']}', ref2='$data[1]', ref3='$data[2]', ref4='$data[3]', ref5='$data[4]' WHERE id=1") or die (mysql_error());
$data = array($_SERVER['HTTP_REFERER'], $data[1], $data[2], $data[3], $data[4]);
}
}
foreach ( $data as $value ) {
if ( is_numeric($value) === false ) {
echo "\t<li><a target='_blank' href='".str_replace("&", "&amp;", $value)."'>".ereg_replace("^http:\/\/([^/]+)\/(.*)", "\\1", $value)."</a></li>\n";
}
}
}

Nyní máme vše připraveno, a tak nezbývá, než nechat zpětné odkazy vytisknout tam, kde je chceme zobrazit. Otevřete si tedy patřičný soubor vaší vzhledové šablony a přidejte do něj:

<li>
<?php backlinks(); ?>
</li>

5. Změna stylu komentářů od administrátora webu

Jako dnešní poslední typ bych vám rád nabídnul změnu stylu komentářů od vás coby administrátora webu. Jak jistě víte, vzhledová podoba komentářů na vašich stránkách je zapsána v CSS souboru a souboru comments.php uložených ve složce vaší vzhledové šablony, přičemž všechny bez výjimky vypadají stejně. Pro lepší dojem i orientaci by ovšem nebylo na škodu, kdyby se vámi psané komentáře lišily od těch ostatních, nemám pravdu? Toho můžeme docílit přidáním jednoduché funkce opět na začátek souboru function.php, kde namísto váš e-mail zapište e-mailovou adresu, pod kterou jste v administraci vašeho webu evidován jako autor, a vaše jméno přepište na konkrétní jméno, jež se zobrazuje na vašich stránkách jako podpis administrátora. Následující funkce pak ověří, zda se oba dva tyto údaje shodují s některými publikovanými komentáři, a v případě že ano, přiřadí jim definovaný styl.

$author_highlight = array
(
"class_name_highlight" => "highlighted",
"class_name_else" => "",
"email" => "váš e-mail",
"author" => 'vaše jméno'
);

function author_highlight() {
global $comment, $author_highlight;
if (empty($author_highlight["author"]) || empty($author_highlight["email1"]) || empty($author_highlight["email2"]) || empty($author_highlight["class_name_highlight"]))
return;
$author = $comment->comment_author;
$email = $comment->comment_author_email;
if (strcasecmp($author, $author_highlight["author"]) == 0 && strcasecmp($email, $author_highlight["email"]) == 0)
echo $author_highlight["class_name_highlight"];
else
echo $author_highlight["class_name_else"];
}

Aby funkce jako taková věděla, jak mají komentáře od administrátora vypadat, musíme jim zapsat vzhled do CSS souboru vaší vzhledové šablony, a to třídou highlighted. Parametry v ní uvedené jsou pouze ukázkové, vy si komentáře můžete upravit dle libosti.

.highlighted {
border-bottom: 1px solid #E58712;
border-top: 1px solid #E58712;
border-left: 1px solid #E58712;
border-right: 1px solid #E58712;
}

Tím máme téměř hotovo, ještě si však otevřete soubor comments.php, vyhledejte řádek <?php foreach ($comments as $comment) : ?> a bezprostředně za něj umístěte kód níže. Po uložení se všechny komentáře, u kterých sedí jak zadaný e-mail, tak i jméno, budou chlubit odlišnou podobou od všech ostatních.

<div class="<?php author_highlight(); ?>">

V dnešním článku jsme si ukázali několik vylepšení zdrojových kódu WordPress, která v zásadě sám používám a jsem s nimi velice spokojen. Jak jsem ale zmínil již na začátku, tento redakční systém patří mezi open-source, a tak možnost jeho úprav je v podstatě neomezená. Pokud tedy také máte v rukávu typ či radu pro lepší WordPress, nezapomeňte nás na ni upozornit.

Vytisknout článek Vytisknout článek

Diskuse ke článku

  1. Separatista napsal:

    Většina těchto úprav není pro použití ve WordPressu vhodná, protože budete zasahovat do jádrových souborů WordPressu (kromě šablony), které se vám při příští aktualizaci (každých pár týdnů) přepíší a budete to muset dělat celé znova. Veškeré změny zdrojových kódů WordPressu je vhodné realizovat pomocí samostatných pluginů. Na vše výše popisované existují
    jednoduché nezávislé pluginy, které jsou doporučovaným řešením.

  2. Petr napsal:

    Všechny tyto úpravy trvá vrátit po aktualizaci na novou verzi WordPress cca 10 minut. ;-)
    Pluginy jsou krásné řešení (i z těchto funkcí by šly vytvořit), ovšem znatelně zpomalují samotný WordPress s už i tak složitou strukturou (viz PHP limit na 32MB…).

  3. Petr Glaser napsal:

    Zdravím,
    opravdu hodně se mi líbí úprava vzhledu komentářů, ale chtěl bych se zeptat jak udělat aby všichni lidé s úrovní administrátor měli jiné komentáře nejen já. Upozorňuji, že nejde pouze o administrátory, ale i jiné úrovně. Budu velmi rád, pokud se mi dostane pomoci.

    Petr

  4. Petr Glaser napsal:

    a ještě další věc, já nechci aby se zvýrazňovalo jméno, to ne, chtěl bych aby se zvýraznil text psaný tou danou osobou, ne její/jeho jméno

Přidejte komentář

 

Vyhledat 



Partneři / Doporučujeme 
  • Shoptet
  • Shopy na míru
  • Cybergenics
  • LOGA na míru
  • Effectix