AJAX - 单击按钮运行PHP函数

时间:2016-09-01 16:33:09

标签: php jquery ajax wordpress

我有一个简单的基于PHP的计数器Wordpress功能,每次加载页面时都会更新用户元。

我想要做的只是在单击特定按钮时运行此功能。

我的按钮标记

<a class="button" id="interaction-count" href="#">Interaction</a>

我当前的PHP函数(当前正在运行,并在每次加载页面时更新用户元数据)

function setCvDownloads($postID) {
    $count_key = 'download_count';
    $count = get_user_meta($postID, $count_key, true);
    if($count==''){
        $count = 0;
        delete_user_meta($postID, $count_key);
        add_user_meta($postID, $count_key, '0');
    }else{
        $count++;
        update_user_meta($postID, $count_key, $count);
    }
}

单击interaction-count按钮时是否可以运行此命令?我假设会涉及一些AJAX?如果有人把我指向正确的方向,这将是非常好的

4 个答案:

答案 0 :(得分:1)

使用Ajax是最好的选择。

<a class="button" id="interaction-count" href="#" onclick="setCvDownloads(<?php echo $post->ID);">Interaction</a>

您需要在该函数中传递帖子ID,因为您已将其用于该函数。

<强>的Ajax:

确保您的文件路径在Ajax语法的URL中是正确的,否则将无效。

function setCvDownloads(a)
{
    $.ajax({
      type: "POST",
      url: "/savedata.php",
      data: "&post_id="+a,
      success:function(html)
      {
         // here you can provide if you need success notifications or as per your wish.
      }
    });
}

<强> savedata.php

<?php
include('../../wp-config.php'); // Ensure that your wp-config file is connected here correctly.
$post_ID = $_POST['post_id']; // Getting the posted POST ID over ajax here.
$count_key = 'download_count';
    $count = get_user_meta($post_ID, $count_key, true);
    if($count==''){
        $count = 0;
        delete_user_meta($post_ID, $count_key);
        add_user_meta($post_ID, $count_key, '0');
    }else{
        $count++;
        update_user_meta($post_ID, $count_key, $count);
    }
?>

答案 1 :(得分:1)

使用jQuery。这个jQuery代码应该这样做,但你需要一个PHP文件来捕获请求。

$("#interaction-count").on("click", function(){
    $.ajax({
      type: "POST",
      url: "/somephpfile.php",
      data: {},
      success: success,
      dataType: dataType
    });
});

答案 2 :(得分:0)

你也可以同步,但最好的方法肯定是使用ajax。

所以代码,简单的js(没有jquery),将是:

<input type="button" ... onclick="CallPhpFunction()" />
....
<script>
function CallPhpFunction() {
    var xhttp=new XMLHttpRequest();
    xhttp.open('POST', 'phpscript.php', true);
    xhttp.send('data=somedata&otherData=someotherdata');
}
</script>

在示例中,我还展示了如何将数据发送到php脚本,并将其传递给send方法。这可以在PHP脚本中使用$ _POST。

答案 3 :(得分:0)

为此,您需要在wordpress循环

中添加以下代码
<a class="button" id="interaction-count" href="#"
 onclick="increaseMyCount('<?php the_ID();?>')">Interaction</a>

<script type="text/javascript">
function increaseMyCount(numb_data)
{
jQuery.ajax({
method: "POST",
url: "<?php bloginfo('url');?>/wp-admin/admin-ajax.php",
data: { postid: numb_data, action: 'setcvdownloads' }
})
.done(function( msg ) {
alert( "Data Saved: " + msg );
});
}
</script>

在主题文件的functions.php中,您需要编写以下代码

<?php
function setCvDownloads() {
    $count_key = 'download_count';
    $postID=$_POST['postid'];
    $count = get_user_meta($postID, $count_key, true);
    if($count==''){
    $count = 0;
    //delete_user_meta($postID, $count_key);
    add_user_meta($postID, $count_key, '0');
    }else{
        $count++;
        update_user_meta($postID, $count_key, $count);
    }
    echo "Saved";
    wp_die();
}
add_action( 'wp_ajax_setcvdownloads', 'setCvDownloads' );
add_action( 'wp_ajax_nopriv_setcvdownloads', 'setCvDownloads' );
?>