具有Ajax调用和php功能的WordPress投票系统不起作用 - php

我正在尝试为我的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文件中,我添加了一个动作钩子(我不确定),并且应该获取当前投票的函数体,在当前投票中添加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,

参考方案

问题是我没有将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();
}
?>

PHP strtotime困境 - php

有人可以解释为什么这在我的服务器上输出为true吗?date_default_timezone_set('Europe/Bucharest'); var_dump( strtotime('29.03.2015 03:00', time()) === strtotime('29.03.2015 04:00�…

PHP-全局变量的性能和内存问题 - php

假设情况:我在php中运行一个复杂的站点,并且我使用了很多全局变量。我可以将变量存储在现有的全局范围内,例如$_REQUEST['userInfo'],$_REQUEST['foo']和$_REQUEST['bar']等,然后将许多不同的内容放入请求范围内(这将是适当的用法,因为这些数据指的是要求自…

php-casperjs获取内部文本 - php

我正在为casperjs使用php包装器-https://github.com/alwex/php-casperjs我正在网上自动化一些重复的工作,我需要访问一个项目的innerText,但是我尚不清楚如何从casperjs浏览器访问dom。我认为在js中我会var arr = document.querySelector('label.input…

PHP Laravel从另一个驱动器读取文件 - php

我目前正在学习Laravel。我想知道是否有一种方法可以在Laravel中使用Storage::从另一个硬盘访问文件(使用Windows)。例如,我在驱动器C:上安装了带有Laravel的Xampp,但是我想访问网站目录之外的E:上的文件。我试过使用Storage::files('E:')和File::files('E:…

php:拆分字符串,直到第一次出现数字 - php

我有像cream 100G sup 5mg Children 我想在第一次出现数字之前将其拆分。所以结果应该是array( array('cream','100G'), array('sup','5mg Children') ); 可以告诉我如何为此创建图案吗?我试过了list(…