1

我正在尝试为我的 Wordpress 博客创建一个投票系统,但我编写的代码不会更新为投票创建的元数据字段,并且每次我调用函数添加投票时,我都会返回值 1,

这是我写的代码:

首先在帖子的 html 部分,我创建了一个通过 javascript调用loadurl()的链接:

<a  onclick="loadurl()" class='voteup' title="به این پست یه امتیاز"><i class="icon-angle-up"></i></a>

loadurl()调用的脚本如下,它使用 ajax从functions.php文件中调用call_me()函数

function loadurl() {
var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>';
    var value = $.ajax({

      type: "POST",
      url: ajaxurl,
      data:{
            //the call_me function for adding a vote in the functions.php
        action: 'call_me'
        }
    })
     .fail(function(r,status,jqXHR) {
         console.log('failed');
     })
     .done(function(r,status,jqXHR) {

          console.log('success');
          //r is the return value of the function call_me();
          console.log(r);
    });
}

最后在functions.php文件中我添加了一个动作钩子(我不太确定)和应该获得currentvotes的函数体,在给当前投票加1后将其更新为新投票数数:

<?php  
   add_action('wp_ajax_noPriv_call_me', 'call_me');
   add_action('wp_ajax_call_me', 'call_me');
   add_action('save_post', 'call_me');

   function call_me() { 
      global $wpdb;
      $currentvotes = get_post_meta($_POST['post'], 'votes', true);
      $currentvotes = $currentvotes + 1;
      update_post_meta($_POST['post'], 'votes', $currentvotes);
      echo $currentvotes;   
      die();
   }
?>

但是 loadurl() 函数中 console.log(r) 函数输出的 currentvotes 值始终为 1,

4

1 回答 1

3

问题是我没有将 PostID 传递给callme()函数,并且由于某种原因,一旦我进入 functions.php 中的 php 函数,就无法获取 postID。所以我添加了将 postID 存储在其中的id变量:

var id= <?php the_ID();?>;

然后通过将以下内容添加到 ajax 调用将其传递给 callme() 函数:

'id': id,

所以现在 ajax 调用看起来像这样:

function loadurl() {

var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>';
var id= <?php the_ID();?>;
var value = $.ajax({

    type: "POST",
    url: ajaxurl,
    data:{
        'id': id,
        action: 'call_me'

        }

    })
     .fail(function(r,status,jqXHR) {
         console.log('failed');

     })
     .done(function(r,status,jqXHR) {
        /*console.log('success');*/
        console.log(r);

     });

}

现在,$id= $_REQUEST['id'];我可以检索发出 Ajax 调用的 postID,并使用以下函数从为帖子存储的相应元数据中读取投票值并将其返回给 ajax 调用:

<?php  
add_action('wp_ajax_nopriv_call_me', 'call_me');
add_action('wp_ajax_call_me', 'call_me');


function call_me(){ 
 $id= $_REQUEST['id'];

    $currentvotes = get_post_meta($id, 'votes', true);
    $currentvotes = $currentvotes + 1;
    update_post_meta($id, 'votes', $currentvotes);

echo $currentvotes ;
die();
}
?>
于 2013-09-12T13:21:58.017 回答