WP-PostRatings + WP-Cache? Bez problému!
WP-PostRatings je vynikající rozšíření pro redakční systém WordPress. Tento plugin přidává možnost hodnocení článků pomocí stupnice (1-5 hvězdiček) a lze ho stáhnou v oficiálním adresáři WordPress.org, či přímo nainstalovat přes administraci zadáním názvu do „instalačního vyhledávače“. Plugin umožňuje poměrně velký výběr ikonek pro hodnocení + možnost přidat vlastní. Přičítání hlasů je řešené prostřednictvím AJAXu, stránka se tedy nemusí reloadovat a uživatele hodnocení nijak neobtěžuje. Instalace je poměrně jednoduchá. Po vlastním stažením a aktivováním pluginu je už potřeba pouze přidat hlasovací element do šablony webu.
Otevřeme si soubor /wp-content/themes/<theme>/index.php a v něm najdeme řádky:
<?php while (have_posts()) : the_post(); ?>
a
<?php endwhile; else: ?>
První řádek značí začátek vypsání článku, druhý řádek znamená konec vypsání článku na hlavní stránce. Řádky nemusí být 100% shodné jako ty, které jsem uvedl, ale mohou se mírně lišit. Náš hodnotící kód umístěme někam mezi tyto dvě značky. Je to jedno, záleží pouze na nás, kde chceme mít hodnocení.
<?php if(function_exists('the_ratings')) { the_ratings(); } ?>
Asi budete chtít hodnocení i na stránce s příspěvkem, takže si otevřeme soubor šablony single.php, do kterého vložíme ten samý kód na přibližně stejné místo.
Tím jsme skončili a můžeme přejít k nastavení v administraci. Můžeme zobrazit statistiky hodnocení, změnit hodnotící ikonky, zapnout/vypnout možnost hodnotit neregistrovaným návštěvníkům a změnit šablony (vzhled hodnotícího prvku). To se bude hodit především kvůli změně jazyka z angličtiny na češtinu. Pro plugin je k dispozici čeština (pro administrační rozhraní), kterou lze stáhnout ZDE. Stažený archiv pak rozbalíme a soubory zkopírujeme na FTP do složky /wp-content/plugins/wp-postratings. Tím je čeština „nainstalovaná“. Pokud stále nefunguje, zkontrolujte správné umístění.
Spolupráce s WP-(Super)-Cache a dalšími cachovacími pluginy
Pokud používáte, stejně jako já, cachovací plugin pro WordPress, tak nastává problém se zobrazováním starých hodnocení, a uživatele, který již hlasoval to může zmást. Vše jde vyřešit velice jednoduchou úpravou, kterou si zde popíšeme. Úprava spočívá ve vytvoření funkce, která si hodnocení vždy načte pomocí AJAXu. Jak tedy na to?
Otevřeme si soubor našeho vzhledu functions.php a úplně na konec přidáme následující kód. Dáme si pozor, abychom nevynechali volný řádek, což by mohlo způsobit chyby při hlasování.
<?php
function get_rating_ajax($id) {
$nonce = wp_create_nonce('my_rating');
?>
<div id="ratings-wrap-<?php echo $id;?>">
<img src="/wp-content/uploads/images/loading_rating.gif" />
</div>
<script type="text/javascript">
jQuery(document).ready(function($){
$.ajax({
type : "GET",
url : "<?php echo get_option('home'); ?>/wp-content/plugins/wp-postratings/wp-postratings.php",
data : { wp_ajaxaction : "jquery", post_id : <?php echo $id; ?> , _ajax_check : "<?php echo $nonce;?>"},
success : function(response){$("#ratings-wrap-<?php echo $id; ?>").html(response);}
});
});
</script><?php
}
?>
Poté si otevřeme soubor /wp-content/plugins/wp-postrating.php, kde si najdeme řádek
$wpdb->ratings = $wpdb->prefix.'ratings';
za který přidáme řádek
if ( $_GET['wp_ajaxaction'] == 'jquery' ) {
$nonce =$_REQUEST['_ajax_check'];
if (! wp_verify_nonce($nonce, 'my_rating') ) die('Security check');
$id = $wpdb->escape($_GET['post_id']);
the_ratings('div',$id);
exit();
}
### Function: Get IP Address
function get_ipaddress() {
if (empty($_SERVER["HTTP_X_FORWARDED_FOR"])) {
$ip_address = $_SERVER["REMOTE_ADDR"];
} else {
$ip_address = $_SERVER["HTTP_X_FORWARDED_FOR"];
}
if(strpos($ip_address, ',') !== false) {
$ip_address = explode(',', $ip_address);
$ip_address = $ip_address[0];
}
return esc_attr($ip_address);
}
a nakonec vložíme do šablony místo původního hlasovacího kódu ( the_ratings(); ) kód nový
<?php get_rating_ajax ($post->ID) ?>
A nyní by vše mělo fungovat tak, jak by mělo. Pokud vám něco nefunguje, vypisuje se nějaká chyba, nebo jsem v návodu udělal nějakou chybu já, napište do komentářů
Facebook
Zatím zde nejsou žádné komenáře.