在WordPress中将投票动态输出到div

时间:2018-03-15 作者:tc2049

我无法在每个帖子上获得相应div的正确输出。单击按钮时,如何传入相应的帖子id?这是通过jQuery发出的AJAX请求。

样板php

          $votes = get_post_meta($post->ID, "votes", true);
          $votes = ($votes == "") ? 0 : $votes;


          echo \'<div id="vote_counter">\'. $votes.\'</div><br>\';
沃特姆。js公司

 jQuery(document).ready( function() {

 jQuery(".user_vote").on(\'click\', function(event) {
    event.preventDefault();
    post_id = $(this).attr("data-post_id");
    nonce = $(this).attr("data-nonce");

 jQuery.ajax({
     type : "post",
     dataType : "json",
     url : myAjax.ajaxurl,
     data : {action: "my_user_vote", post_id : post_id, nonce: nonce},
     success: function(response) {
        if(response.type == "success") {
           jQuery("#vote_counter").html(response.vote_count);
        }
        else {
           alert("Your vote could not be added");
        }


     }

   });   

 });
   return false; 
});
功能。php

add_action( \'init\', \'my_script_enqueuer\' );

function my_script_enqueuer() {
   wp_register_script( "my_voter_script", get_stylesheet_directory_uri() .\'/js/voteme.js\', array(\'jquery\') );
   wp_localize_script( \'my_voter_script\', \'myAjax\', array( \'ajaxurl\' => admin_url( \'admin-ajax.php\' )));        

   wp_enqueue_script( \'jquery\' );
   wp_enqueue_script( \'my_voter_script\' );

}

add_action("wp_ajax_my_user_vote", "my_user_vote");
add_action("wp_ajax_nopriv_my_user_vote", "my_must_login");

function my_user_vote() {

   if ( !wp_verify_nonce( $_REQUEST[\'nonce\'], "my_user_vote_nonce")) {
      exit("No naughty business please");
   }   

   $vote_count = get_post_meta($_REQUEST["post_id"], "votes", true);
   $vote_count = ($vote_count == \'\') ? 0 : $vote_count;
   $new_vote_count = $vote_count + 1;

   $vote = update_post_meta($_REQUEST["post_id"], "votes", $new_vote_count);

   if($vote === false) {
      $result[\'type\'] = "error";
      $result[\'vote_count\'] = $vote_count;
   }
   else {
      $result[\'type\'] = "success";
      $result[\'vote_count\'] = $new_vote_count;
   }

   if(!empty($_SERVER[\'HTTP_X_REQUESTED_WITH\']) && strtolower($_SERVER[\'HTTP_X_REQUESTED_WITH\']) == \'xmlhttprequest\') {
      $result = json_encode($result);
      echo $result;
   }
   else {
      header("Location: ".$_SERVER["HTTP_REFERER"]);
   }

   die();

}

function my_must_login() {
   echo "You must log in to vote";
   die();
}

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

[编辑]提供了更好的替换

尝试以下操作:

在模板中。php,替换:

echo \'<div id="vote_counter">\'. $votes.\'</div><br>\';
。。使用:

echo \'<div id="vote_counter-\' . $post->ID . \'" class="vote_counter">\'. $votes.\'</div><br>\';
在voteme。js,替换:

jQuery("#vote_counter").html(response.vote_count);
。。使用:

jQuery("#vote_counter-" + post_id).html(response.vote_count);
您还应声明post_idnonce 作为局部变量;i、 e.:

var post_id = $(this).attr("data-post_id"),
  nonce = $(this).attr("data-nonce");
希望这有帮助。

结束