Bonjour je rencontre un soucis lors de la création d'un "petit" plugin permettant d'ajouter sur la page des auteurs un bouton de vote, j'ai suivi, pour ce faire, ce tuto Creating a Plugin to Add Votes to Your WordPress Comments Using AJAX avec une seule différence, puisque je ne suis pas dans une boucle, je n'ai pas fait appel au hook de wordpress, me contentant d'appeler la fonction sur ma page auteur.
mon code php:
<?php
/**
Plugin Name: WP-VoteMe
Description: déf.
Version: 1.0
**/
define('VOTEMESURL', WP_PLUGIN_URL."/".dirname( plugin_basename( __FILE__ ) ) );
define('VOTEMEPATH', WP_PLUGIN_DIR."/".dirname( plugin_basename( __FILE__ ) ) );
function voteme_enqueuescripts() {
wp_enqueue_script('voteme', VOTEMESURL.'/js/voteme.js', array('jquery'));
wp_localize_script('voteme', 'votemeajax', array('ajaxurl' => admin_url('admin-ajax.php')));
}
add_action('wp_enqueue_scripts', voteme_enqueuescripts);
function voteme_addlink() {
global $wp_query;
$curauth = $wp_query->get_queried_object();
$authorID = $curauth->ID;
$votemelink = "";
$nonce = wp_create_nonce("voteme_nonce");
$votes = get_usermeta($authorID, '_votemecount', true) != '' ? get_usermeta($authorID, '_votemecount', true) : '0';
$arguments = $authorID.",'".$nonce."'";
$link = $votes.' <a onclick="votemeadd('.$arguments.');">'.'Votes'.'</a>';
$votemelink = '<div id="voteme-'.$authorID.'">';
$votemelink .= '<span>'.$link.'</span>';
$votemelink .= '</div>';
echo $votemelink;
}
function voteme_ajaxhandler() {
if ( !wp_verify_nonce( $_POST'nonce'], "voteme_nonce")) {
die("cette action n'est pas permise !");
}
$results = '';
global $wpdb;
$authorid = $_POST'authorid'];
$votecount = get_usermeta($authorid, '_votemecount', true) != '' ? get_usermeta($authorid, '_votemecount', true) : '0';
$votecountNew = $votecount + 1;
update_usermeta($authorid, '_votemecount', $votecountNew);
$results.='<div class="votescore">'.$votecountNew.'</div>';
die($results);
}
add_action( 'wp_ajax_nopriv_voteme_ajaxhandler', 'voteme_ajaxhandler' );
add_action( 'wp_ajax_voteme_ajaxhandler', 'voteme_ajaxhandler' );
mon script ajax :
function votemeadd(author_id,nonce) {
$.ajax({
type: "POST",
url: votemeajax.ajaxurl,
data: {
action: 'voteme_ajaxhandler',
authorid: author_id,
nonce:nonce
},
success:function(data, textStatus, XMLHttpRequest){
var linkofvote = '#voteme-' + author_id;
$(linkofvote).html('');
$(linkofvote).append(data);
},
error: function(MLHttpRequest, textStatus, errorThrown){
alert(errorThrown);
}
});
}
J'appel ma fonction "voteme_addlink()" sur ma page author en plaçant mon code php comme suite
<?php voteMe_addlink(); ?>
Mon soucis est que mon plugin fonctionne parfaitement tant que je suis connecté, hors je souhaite qu'il fonctionne aussi avec des utilisateurs non-authentifiée.
Si vous avez une piste, franchement, je suis preneur, j'ai beau chercher sur internet, je ne trouve rien, en tout cas rien qui me mette sur une piste.
D'avance, merci pour votre aide.
Bonjour,
Ta fonction t'affiche plusieurs utilisateurs ? ou du moins te permets de voté pour plusieurs utilisateurs ?
Je te pose la question car je vois que tu te sers de l'id user et j'ai peur qu'au final tu puisses uniquement voté pour toi même.
as tu crée plusieurs utilisateurs pour testé ?
Salut Lotfi Berrahal, sauf erreur de ma part ma function voteme_addlink récupère l'id de l'objet affiché, soit l'id de l'auteur à qui appartient la page en cours d'affichage, j'ai effectué quelques tests sur plusieurs page auteur, et un
<?php echo $authorID; ?>
me donner bien l'id des auteurs à qui appartenaient la page.
Le problème en fait, c'est que seul un utilisateur authentifié peut voté, dans ces circonstances, le vote fonctionne parfaitement, l'incrémentation est correcte et tout le codage fonctionne comme on l'attend...par contre quand c'est un utilisateur non-authentifié qui effectue le vote, j'ai alors ma page accueil au milieu de la page de l'auteur, et bien entendu, le vote ne se fait pas.
Je me dis, que peut-être, il y a une fonction spéciale pour les utilisateurs non authentifié.
Il me semblait que le hook
add_action( 'wp_ajax_nopriv_voteme_ajaxhandler', 'voteme_ajaxhandler' );
permettait justement de permettre l'exécution de l'action pour tous les utilisateurs non-authentifiés.
oui j'ai regardé un peu mieux ton tuto et en bas il en parle.
Avec un élément cochable ou tu choisis si les utilisateurs doivent être connecté ou non pour voter.
Voir l'étape 6.
Oui mais je n'ai pas ajouté ces éléments, et dans mon code, je ne vois rien bloquant le vote pour les personnes non connectés...
Je n'ai pas de message, mais ma page accueil qui s'affiche au milieu de la page auteur.
Et bien j'ai cru être sur une piste grâce à toi...
En fait j'ai revu mon code en intégrant la partie configuration, en me disant que, peut-être, le code fonctionnerait mieux.
Et, hélas, toujours le même problème, il fonctionne parfaitement tant que l'utilisateur est connecté, mais dès qu'il est déconnecté, et que la configuration permet le vote à tous, le problème est toujours là.
Lors du vote la page accueil s'affiche au milieu de ma page auteur...
Ce qui me fait dire que le soucis vient de l'ajax, savez-vous s'il y a une solution pour permettre à ajax de fonctionner avec un utilisateur non-connecté, autre que le hook
add_action( 'wp_ajax_nopriv_voteme_ajaxhandler', 'voteme_ajaxhandler' );
En tout cas Lotfi Berrahal merci pour tes réponses.