web-dev-qa-db-fra.com

Comment permettre aux utilisateurs de voter à la baisse dans ce compteur de vote simple (qui utilise le post méta)?

Ce tutoriel simple vous apprend à créer un compteur de votes en utilisant les métadonnées de la publication.

J'aimerais savoir comment ajouter des votes à la baisse à ce petit script (par exemple -1, -2). De la manière suivante: Si le message a 0 vote et qu'il obtient un vote négatif, il se termine par -1. Si le message a 1 vote et qu'il a été voté par défaut, il se termine par 0 (un seul compteur).

la partie 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>

Lorsqu'un membre clique sur le lien de vote, le code ci-dessus obtient l'ID de publication et l'ID utilisateur du membre et l'envoie à un fichier appelé vote.php à l'aide d'une méthode de publication. Le fichier vote.php effectuera tout ce dont nous avons besoin pour ajouter le vote.

vote.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;
?>

Une fois les informations publiées sur vote.php, deux champs personnalisés sont créés. Un pour compter le vote et un pour ajouter l'électeur à une liste afin qu'il ne puisse plus voter.

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>';
}

aucune suggestion?

3
janoChen

Vous devrez créer un deuxième bouton pour voter à la baisse. Donner au bouton upvote une classe de haut et le bouton de vote bas une classe de bas.

jQuery

<?php wp_enqueue_script( 'jquery' ) ?>
<?php wp_head(); ?>
    <script type="text/javascript">
        jQuery(document).ready(function() {
            jQuery(".vote a.up").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,
                    updown: 'up'
                }, function(data) {
                    var votebox = ".vote" + thepost + " span";
                    jQuery(votebox).text(data);
                    jQuery(some).replaceWith('<span class="voted">Voted</span>');
                });
            });
            jQuery(".vote a.down").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,
                    updown: 'down'
                }, function(data) {
                    var votebox = ".vote" + thepost + " span";
                    jQuery(votebox).text(data);
                    jQuery(some).replaceWith('<span class="voted">Voted</span>');
                });
            });
        });
    </script>

vote.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);
if("up" == $_POST['updown']) {
    $currentvotes ++;
} elseif("down" == $_POST['updown']) {
    $currentvotes --;
}

$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;
?>

C'est tout ce que vous devriez avoir besoin d'éditer

1
Brady