В этом простом руководстве вы узнаете, как создать счетчик голосов, используя метаданные публикации.
Я хотел бы знать, как добавить голоса против этого небольшого скрипта (например, -1, -2). Следующим образом: если у поста 0 голосов и за него проголосовали против, он получает -1. Если у сообщения есть 1 голос, и за него проголосовали, он заканчивается 0 (только один счетчик).
часть jQuery:
<?php wp_enqueue_script( 'jquery' ) ?>
<?php wp_head(); ?>
<script type="text/javascript">
jQuery(document).ready(function() {
jQuery(".vote a").click(
function() {
var some = jQuery(this);
var thepost = jQuery(this).attr("post");
var theuser = jQuery(this).attr("user");
jQuery.post("<?php bloginfo('template_url'); ?>/vote.php", {
user: theuser,
post: thepost
}, function(data) {
var votebox = ".vote" + thepost + " span";
jQuery(votebox).text(data);
jQuery(some).replaceWith('<span class="voted">Voted</span>');
});
});
});
</script>
Когда участник нажимает на ссылку для голосования, приведенный выше код получает идентификатор сообщения и идентификатор пользователя участника и отправляет их в файл с именем voice.php, используя метод сообщения. Файл voice.php выполнит все, что нам нужно для добавления голосования.
голосование.php:
<?php
$file = dirname(__FILE__);
$file = substr($file, 0, stripos($file, "wp-content") );
require( $file . "/wp-load.php");
$currentvotes = get_post_meta($_POST['post'], 'votes', true);
$currentvotes = $currentvotes + 1;
$voters = get_post_meta($_POST['post'], 'thevoters', true);
if(!$voters) $voters = $_POST['user']; else $voters = $voters.",".$_POST['user'];
update_post_meta($_POST['post'], 'votes', $currentvotes);
update_post_meta($_POST['post'], 'thevoters', $voters);
echo $currentvotes;
?>
После того, как информация отправлена на голосование.php, создаются два настраиваемых поля. Один для подсчета голосов и один для добавления избирателя в список, чтобы он не мог проголосовать снова.
functions.php:
// voting function
function voting($id) {
global $user_ID;
$currentvotes = get_post_meta($id, 'votes', true);
$voters = get_post_meta($id, 'thevoters', true);
$voters = explode(",", $voters);
foreach($voters as $voter) {
if($voter == $user_ID) $alreadyVoted = true;
}
if(!$currentvotes) $currentvotes = 0;
echo '<div class="vote vote'.$id.'"><span>'.$currentvotes.'</span>';
if($user_ID && !$alreadyVoted) echo '<br /><a post="'.$id.'" user="'.$user_ID.'">'.__("Vote").'</a>';
if($user_ID && $alreadyVoted) echo '<br /><span class="voted">'.__("Voted").'</span>';
echo '</div>';
if(!$user_ID) echo '<div class="signup"><p><a href="'.get_bloginfo('url').'/wp-login.php?action=register">'.__('Register').'</a> '.__('to vote').'.</p></div>';
}
какие-либо предложения?
Загрузка скриптов прямо в header.php темы… только что умер щенок… 🙁
@ t31os ха-ха, спасибо, что указали на это.
Я хотел бы добавить, что этой системой голосования легко злоупотреблять. Единственный реальный способ обеспечить это — заставить людей войти в систему для голосования. После входа в систему вы должны проверить имя пользователя в файле voice.php, а не передавать его в запросе ajax.
Вам придется сделать вторую кнопку для голосования против. Присвойте кнопке голосования «за» класс «за», а кнопке голосования «против» — класс «против».
jQuery
voice.php
Это все, что вам нужно для редактирования